From 988bd53b5fc4bb843c0bccb81e8815a5b9dce68a Mon Sep 17 00:00:00 2001 From: Pierre Bourdon Date: Tue, 19 Jun 2012 12:11:15 +0200 Subject: [PATCH] Support ANSI color codes in the console logger for Linux/Mac --- Source/Core/Common/Src/ConsoleListener.cpp | 26 +++++++++++++++++++++- Source/Core/Common/Src/ConsoleListener.h | 1 + 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/Source/Core/Common/Src/ConsoleListener.cpp b/Source/Core/Common/Src/ConsoleListener.cpp index e0b2bf4d36..cf03581431 100644 --- a/Source/Core/Common/Src/ConsoleListener.cpp +++ b/Source/Core/Common/Src/ConsoleListener.cpp @@ -35,6 +35,9 @@ ConsoleListener::ConsoleListener() { #ifdef _WIN32 hConsole = NULL; + bUseColor = true; +#else + bUseColor = isatty(fileno(stdout)); #endif } @@ -299,7 +302,28 @@ void ConsoleListener::Log(LogTypes::LOG_LEVELS Level, const char *Text) SetConsoleTextAttribute(hConsole, Color); WriteConsole(hConsole, Text, (DWORD)strlen(Text), &cCharsWritten, NULL); #else - fprintf(stderr, "%s", Text); + char ColorAttr[16] = ""; + char ResetAttr[16] = ""; + + if (bUseColor) + { + strcpy(ResetAttr, "\033[0m"); + switch (Level) + { + case NOTICE_LEVEL: // light green + strcpy(ColorAttr, "\033[92m"); + break; + case ERROR_LEVEL: // light red + strcpy(ColorAttr, "\033[91m"); + break; + case WARNING_LEVEL: // light yellow + strcpy(ColorAttr, "\033[93m"); + break; + default: + break; + } + } + fprintf(stderr, "%s%s%s", ColorAttr, Text, ResetAttr); #endif } // Clear console screen diff --git a/Source/Core/Common/Src/ConsoleListener.h b/Source/Core/Common/Src/ConsoleListener.h index 335d73d773..b223f0df5d 100644 --- a/Source/Core/Common/Src/ConsoleListener.h +++ b/Source/Core/Common/Src/ConsoleListener.h @@ -48,6 +48,7 @@ private: HWND GetHwnd(void); HANDLE hConsole; #endif + bool bUseColor; }; #endif // _CONSOLELISTENER_H