Linux/MacOS - only write colour codes to TTYs

This prevents the colour codes from showing up in piped output, file
redirects, etc.
This commit is contained in:
Ian Rees
2017-04-06 20:49:30 +12:00
committed by wmayer
parent 4976c0dc4a
commit ec715e36fd
2 changed files with 47 additions and 20 deletions

View File

@@ -27,9 +27,11 @@
#ifndef _PreComp_
# include <time.h>
# include <stdio.h>
# ifdef FC_OS_WIN32
# include <io.h>
# include <windows.h>
# if defined (FC_OS_WIN32)
# include <io.h>
# include <windows.h>
# elif defined(FC_OS_LINUX) || defined(FC_OS_MACOSX)
# include <unistd.h>
# 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()