diff --git a/src/Base/Console.cpp b/src/Base/Console.cpp index 335ea92f0e..5d3fb2d250 100644 --- a/src/Base/Console.cpp +++ b/src/Base/Console.cpp @@ -27,9 +27,11 @@ #ifndef _PreComp_ # include # include -# ifdef FC_OS_WIN32 -# include -# include +# if defined (FC_OS_WIN32) +# include +# include +# elif defined(FC_OS_LINUX) || defined(FC_OS_MACOSX) +# include # endif # include "fcntl.h" #endif @@ -633,7 +635,12 @@ void ConsoleObserverFile::Log (const char *sLog) } -ConsoleObserverStd::ConsoleObserverStd() +ConsoleObserverStd::ConsoleObserverStd(): +# if defined(FC_OS_WIN32) + useColorStderr( true ) +# elif defined(FC_OS_LINUX) || defined(FC_OS_MACOSX) + useColorStderr( isatty(STDOUT_FILENO) ) +# endif { bLog = false; } @@ -649,50 +656,68 @@ void ConsoleObserverStd::Message(const char *sMsg) void ConsoleObserverStd::Warning(const char *sWarn) { + if (useColorStderr) { # if defined(FC_OS_WIN32) - ::SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN| FOREGROUND_BLUE); + ::SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN| FOREGROUND_BLUE); # elif defined(FC_OS_LINUX) || defined(FC_OS_MACOSX) - printf("\033[1;33m"); + printf("\033[1;33m"); # endif + } + printf("%s",sWarn); + + if (useColorStderr) { # if defined(FC_OS_WIN32) - ::SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE ); + ::SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE ); # elif defined(FC_OS_LINUX) || defined(FC_OS_MACOSX) - printf("\033[0m"); - fflush(stdout); + printf("\033[0m"); + fflush(stdout); # endif + } } void ConsoleObserverStd::Error (const char *sErr) { + if (useColorStderr) { # if defined(FC_OS_WIN32) - ::SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED|FOREGROUND_INTENSITY ); + ::SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED|FOREGROUND_INTENSITY ); # elif defined(FC_OS_LINUX) || defined(FC_OS_MACOSX) - printf("\033[1;31m"); + printf("\033[1;31m"); # endif + } + printf("%s",sErr); + + if (useColorStderr) { # if defined(FC_OS_WIN32) - ::SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE ); + ::SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE ); # elif defined(FC_OS_LINUX) || defined(FC_OS_MACOSX) - printf("\033[0m"); - fflush(stdout); + printf("\033[0m"); + fflush(stdout); # endif + } } void ConsoleObserverStd::Log (const char *sErr) { + if (useColorStderr) { # if defined(FC_OS_WIN32) - ::SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED |FOREGROUND_GREEN); + ::SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED |FOREGROUND_GREEN); # elif defined(FC_OS_LINUX) || defined(FC_OS_MACOSX) - printf("\033[1;36m"); + printf("\033[1;36m"); # endif + } + printf("%s",sErr); + + if (useColorStderr) { # if defined(FC_OS_WIN32) - ::SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE ); + ::SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE ); # elif defined(FC_OS_LINUX) || defined(FC_OS_MACOSX) - printf("\033[0m"); - fflush(stdout); + printf("\033[0m"); + fflush(stdout); # endif + } } RedirectStdOutput::RedirectStdOutput() diff --git a/src/Base/Console.h b/src/Base/Console.h index cf1240af31..8875f684ba 100644 --- a/src/Base/Console.h +++ b/src/Base/Console.h @@ -130,7 +130,7 @@ public: enum FreeCAD_ConsoleMsgType { MsgType_Txt = 1, - MsgType_Log = 2, + MsgType_Log = 2, MsgType_Wrn = 4, MsgType_Err = 8 } ; @@ -226,6 +226,8 @@ public: virtual void Error (const char *sErr); virtual void Log (const char *sErr); const char* Name(void){return "Console";} +protected: + bool useColorStderr; }; class BaseExport RedirectStdOutput : public std::streambuf