diff options
| -rw-r--r-- | doc/manual-src/en/aria2c.rst | 5 | ||||
| -rw-r--r-- | src/ConsoleStatCalc.cc | 12 | ||||
| -rw-r--r-- | src/ConsoleStatCalc.h | 4 | ||||
| -rw-r--r-- | src/Context.cc | 1 | ||||
| -rw-r--r-- | src/LogFactory.cc | 7 | ||||
| -rw-r--r-- | src/LogFactory.h | 7 | ||||
| -rw-r--r-- | src/Logger.cc | 9 | ||||
| -rw-r--r-- | src/Logger.h | 4 | ||||
| -rw-r--r-- | src/MultiUrlRequestInfo.cc | 1 | ||||
| -rw-r--r-- | src/OptionHandlerFactory.cc | 9 | ||||
| -rw-r--r-- | src/RequestGroupMan.cc | 2 | ||||
| -rw-r--r-- | src/prefs.cc | 1 | ||||
| -rw-r--r-- | src/prefs.h | 2 | ||||
| -rw-r--r-- | src/usage_text.h | 2 |
14 files changed, 57 insertions, 9 deletions
diff --git a/doc/manual-src/en/aria2c.rst b/doc/manual-src/en/aria2c.rst index 8dd340c6..4ac5cda3 100644 --- a/doc/manual-src/en/aria2c.rst +++ b/doc/manual-src/en/aria2c.rst @@ -1138,6 +1138,11 @@ Advanced Options printed for each requested file in each row. Default: ``default`` +.. option:: --enable-color[=true|false] + + Enable color output for a terminal. + Default: ``true`` + .. option:: --enable-mmap[=true|false] Map files into memory. This option may not work if the file space diff --git a/src/ConsoleStatCalc.cc b/src/ConsoleStatCalc.cc index 7e2d351c..f57b1dbb 100644 --- a/src/ConsoleStatCalc.cc +++ b/src/ConsoleStatCalc.cc @@ -63,6 +63,7 @@ #include "FileEntry.h" #include "console.h" #include "ColorizedStream.h" +#include "Option.h" #ifdef ENABLE_BITTORRENT # include "bittorrent_helper.h" @@ -264,15 +265,18 @@ void printProgressSummary(const RequestGroupList& groups, size_t cols, } } // namespace -ConsoleStatCalc::ConsoleStatCalc(time_t summaryInterval, bool humanReadable): +ConsoleStatCalc::ConsoleStatCalc(time_t summaryInterval, + bool colorOutput, + bool humanReadable): summaryInterval_(summaryInterval), readoutVisibility_(true), truncate_(true), #ifdef __MINGW32__ - isTTY_(true) + isTTY_(true), #else // !__MINGW32__ - isTTY_(isatty(STDOUT_FILENO) == 1) + isTTY_(isatty(STDOUT_FILENO) == 1), #endif // !__MINGW32__ + colorOutput_(colorOutput) { if(humanReadable) { sizeFormatter_.reset(new AbbrevSizeFormatter()); @@ -327,7 +331,7 @@ ConsoleStatCalc::calculateStat(const DownloadEngine* e) return; } size_t numGroup = e->getRequestGroupMan()->countRequestGroup(); - const bool color = global::cout()->supportsColor() && isTTY_; + const bool color = global::cout()->supportsColor() && isTTY_ && colorOutput_; if(numGroup == 1) { const std::shared_ptr<RequestGroup>& rg = *e->getRequestGroupMan()->getRequestGroups().begin(); diff --git a/src/ConsoleStatCalc.h b/src/ConsoleStatCalc.h index c2fa02d1..6c5ce538 100644 --- a/src/ConsoleStatCalc.h +++ b/src/ConsoleStatCalc.h @@ -67,8 +67,10 @@ private: bool readoutVisibility_; bool truncate_; bool isTTY_; + bool colorOutput_; public: - ConsoleStatCalc(time_t summaryInterval, bool humanReadable = true); + ConsoleStatCalc(time_t summaryInterval, bool colorOutput = true, + bool humanReadable = true); virtual ~ConsoleStatCalc() {} diff --git a/src/Context.cc b/src/Context.cc index 7cda18da..e50e1b85 100644 --- a/src/Context.cc +++ b/src/Context.cc @@ -168,6 +168,7 @@ Context::Context(bool standalone, LogFactory::setLogFile(op->get(PREF_LOG)); LogFactory::setLogLevel(op->get(PREF_LOG_LEVEL)); LogFactory::setConsoleLogLevel(op->get(PREF_CONSOLE_LOG_LEVEL)); + LogFactory::setColorOutput(op->getAsBool(PREF_ENABLE_COLOR)); if(op->getAsBool(PREF_QUIET)) { LogFactory::setConsoleOutput(false); } diff --git a/src/LogFactory.cc b/src/LogFactory.cc index 6773526e..6312ef20 100644 --- a/src/LogFactory.cc +++ b/src/LogFactory.cc @@ -48,6 +48,7 @@ std::shared_ptr<Logger> LogFactory::logger_; bool LogFactory::consoleOutput_ = true; Logger::LEVEL LogFactory::logLevel_ = Logger::A2_DEBUG; Logger::LEVEL LogFactory::consoleLogLevel_ = Logger::A2_NOTICE; +bool LogFactory::colorOutput_ = true; void LogFactory::openLogger(const std::shared_ptr<Logger>& logger) { @@ -59,6 +60,7 @@ void LogFactory::openLogger(const std::shared_ptr<Logger>& logger) logger->setLogLevel(logLevel_); logger->setConsoleLogLevel(consoleLogLevel_); logger->setConsoleOutput(consoleOutput_); + logger->setColorOutput(colorOutput_); } void LogFactory::adjustDependentLevels() { @@ -154,6 +156,11 @@ void LogFactory::setConsoleLogLevel(const std::string& level) adjustDependentLevels(); } +void LogFactory::setColorOutput(bool enabled) +{ + colorOutput_ = enabled; +} + void LogFactory::release() { logger_.reset(); } diff --git a/src/LogFactory.h b/src/LogFactory.h index 4c977561..662cc583 100644 --- a/src/LogFactory.h +++ b/src/LogFactory.h @@ -51,6 +51,7 @@ private: static bool consoleOutput_; static Logger::LEVEL logLevel_; static Logger::LEVEL consoleLogLevel_; + static bool colorOutput_; static void openLogger(const std::shared_ptr<Logger>& logger); @@ -102,6 +103,12 @@ public: static void setConsoleLogLevel(const std::string& level); /** + * Enable color output if |enabled| is true. By default, color + * output is enabled for terminal. + */ + static void setColorOutput(bool enabled); + + /** * Releases used resources */ static void release(); diff --git a/src/Logger.cc b/src/Logger.cc index 804b26d7..6c857bb1 100644 --- a/src/Logger.cc +++ b/src/Logger.cc @@ -54,7 +54,7 @@ Logger::Logger() : logLevel_(Logger::A2_DEBUG), consoleLogLevel_(Logger::A2_NOTICE), consoleOutput_(true), - useColor_(global::cout()->supportsColor()) + colorOutput_(global::cout()->supportsColor()) {} Logger::~Logger() @@ -86,6 +86,11 @@ void Logger::setConsoleOutput(bool enabled) consoleOutput_ = enabled; } +void Logger::setColorOutput(bool enabled) +{ + colorOutput_ = enabled; +} + bool Logger::fileLogEnabled(LEVEL level) { return level >= logLevel_ && fpp_; @@ -207,7 +212,7 @@ void Logger::writeLog } if(consoleLogEnabled(level)) { global::cout()->printf("\n"); - writeHeaderConsole(*global::cout(), level, useColor_); + writeHeaderConsole(*global::cout(), level, colorOutput_); global::cout()->printf("%s\n", msg); writeStackTrace(*global::cout(), trace); global::cout()->flush(); diff --git a/src/Logger.h b/src/Logger.h index a68ab72f..557c777d 100644 --- a/src/Logger.h +++ b/src/Logger.h @@ -62,7 +62,7 @@ private: LEVEL consoleLogLevel_; // true if console log output is enabled. bool consoleOutput_; - bool useColor_; + bool colorOutput_; // Don't allow copying Logger(const Logger&); Logger& operator=(const Logger&); @@ -127,6 +127,8 @@ public: void setConsoleOutput(bool enabled); + void setColorOutput(bool enabled); + // Returns true if this logger actually writes debug log message to // either file or stdout. bool levelEnabled(LEVEL level); diff --git a/src/MultiUrlRequestInfo.cc b/src/MultiUrlRequestInfo.cc index 0c9f6b2c..7ce24b63 100644 --- a/src/MultiUrlRequestInfo.cc +++ b/src/MultiUrlRequestInfo.cc @@ -136,6 +136,7 @@ std::unique_ptr<StatCalc> getStatCalc(const std::shared_ptr<Option>& op) return make_unique<NullStatCalc>(); } auto impl = make_unique<ConsoleStatCalc>(op->getAsInt(PREF_SUMMARY_INTERVAL), + op->getAsBool(PREF_ENABLE_COLOR), op->getAsBool(PREF_HUMAN_READABLE)); impl->setReadoutVisibility(op->getAsBool(PREF_SHOW_CONSOLE_READOUT)); impl->setTruncate(op->getAsBool(PREF_TRUNCATE_CONSOLE_READOUT)); diff --git a/src/OptionHandlerFactory.cc b/src/OptionHandlerFactory.cc index aa0c9e32..33b04778 100644 --- a/src/OptionHandlerFactory.cc +++ b/src/OptionHandlerFactory.cc @@ -305,6 +305,15 @@ std::vector<OptionHandler*> OptionHandlerFactory::createOptionHandlers() handlers.push_back(op); } #endif // ENABLE_ASYNC_DNS + { + OptionHandler* op(new BooleanOptionHandler + (PREF_ENABLE_COLOR, + TEXT_ENABLE_COLOR, + A2_V_TRUE, + OptionHandler::OPT_ARG)); + op->addTag(TAG_ADVANCED); + handlers.push_back(op); + } #if defined(HAVE_MMAP) || defined(__MINGW32__) { OptionHandler* op(new BooleanOptionHandler diff --git a/src/RequestGroupMan.cc b/src/RequestGroupMan.cc index 2e182fca..36f79931 100644 --- a/src/RequestGroupMan.cc +++ b/src/RequestGroupMan.cc @@ -631,7 +631,7 @@ void RequestGroupMan::showDownloadResults(OutputFile& o, bool full) const } std::string line(pathRowSize, '='); o.printf("%s\n", line.c_str()); - bool useColor = o.supportsColor(); + bool useColor = o.supportsColor() && option_->getAsBool(PREF_ENABLE_COLOR); int ok = 0; int err = 0; int inpr = 0; diff --git a/src/prefs.cc b/src/prefs.cc index e3572990..48632e5b 100644 --- a/src/prefs.cc +++ b/src/prefs.cc @@ -358,6 +358,7 @@ PrefPtr PREF_DISK_CACHE = makePref("disk-cache"); PrefPtr PREF_GID = makePref("gid"); // values: 1*digit PrefPtr PREF_SAVE_SESSION_INTERVAL = makePref("save-session-interval"); +PrefPtr PREF_ENABLE_COLOR = makePref("enable-color"); /** * FTP related preferences diff --git a/src/prefs.h b/src/prefs.h index 0dbc1bc7..a6b30630 100644 --- a/src/prefs.h +++ b/src/prefs.h @@ -294,6 +294,8 @@ extern PrefPtr PREF_DISK_CACHE; extern PrefPtr PREF_GID; // values: 1*digit extern PrefPtr PREF_SAVE_SESSION_INTERVAL; +// value: true |false +extern PrefPtr PREF_ENABLE_COLOR; /** * FTP related preferences diff --git a/src/usage_text.h b/src/usage_text.h index 4a93ed89..914af5ce 100644 --- a/src/usage_text.h +++ b/src/usage_text.h @@ -958,3 +958,5 @@ " specified by --save-session option every SEC\n" \ " seconds. If 0 is given, file will be saved only\n" \ " when aria2 exits.") +#define TEXT_ENABLE_COLOR \ + _(" --enable-color[=true|false] Enable color output for a terminal.") |
