Changeset 243 in pacpusframework


Ignore:
Timestamp:
12/02/13 09:42:47 (11 years ago)
Author:
Marek Kurdej
Message:

Minor fixes for TERM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/PacpusLib/ColorSeverityFormatter.hpp

    r242 r243  
    2323#include <boost/log/expressions.hpp>
    2424#include <boost/log/utility/functional/bind.hpp>
     25#include <cstdlib>
    2526#include <sstream>
    2627
     
    130131#endif // defined(PACPUS_OS_WINDOWS) && !defined(PACPUS_OS_WINDOWS_MOBILE)
    131132
     133bool shouldUseColor(bool stdoutIsTty)
     134{
     135#if defined(PACPUS_OS_WINDOWS) && !defined(PACPUS_OS_WINDOWS_MOBILE)
     136    return true;
     137#else
     138    // On non-Windows platforms, we rely on the TERM variable.
     139    const char* const term = std::getenv("TERM");
     140    const bool termSupportsColor = (term == "xterm")
     141            || (term, "xterm-color")
     142            || (term, "xterm-256color")
     143            || (term, "screen")
     144            || (term, "linux")
     145            || (term, "cygwin");
     146    return stdoutIsTty && termSupportsColor;
     147#endif // defined(PACPUS_OS_WINDOWS) && !defined(PACPUS_OS_WINDOWS_MOBILE)
     148}
     149
    132150template < typename CharT >
    133151struct ColorFormatter
    134152{
    135 #if defined(PACPUS_OS_WINDOWS) && !defined(PACPUS_OS_WINDOWS_MOBILE)
    136153    ColorFormatter()
     154#if defined(PACPUS_OS_WINDOWS) && !defined(PACPUS_OS_WINDOWS_MOBILE)
    137155        : mStreamHandle(GetStdHandle(STD_OUTPUT_HANDLE))
    138     {
    139     }
    140 #endif // defined(PACPUS_OS_WINDOWS) && !defined(PACPUS_OS_WINDOWS_MOBILE)
     156#endif // defined(PACPUS_OS_WINDOWS) && !defined(PACPUS_OS_WINDOWS_MOBILE)
     157    {
     158        mShouldUseColor = shouldUseColor(/*stdoutIsTty*/ true);
     159    }
    141160
    142161    void operator()(boost::log::basic_formatting_ostream<CharT>& strm, SeverityLevel const& sev)
    143162    {
     163        if (!mShouldUseColor) {
     164            return;
     165        }
    144166#if defined(PACPUS_OS_WINDOWS) && !defined(PACPUS_OS_WINDOWS_MOBILE)
    145167        // Gets the current text color.
     
    158180    }
    159181
     182    bool mShouldUseColor;
    160183#if defined(PACPUS_OS_WINDOWS) && !defined(PACPUS_OS_WINDOWS_MOBILE)
    161184    const HANDLE mStreamHandle;
     
    167190struct DefaultFormatter
    168191{
    169 #if defined(PACPUS_OS_WINDOWS) && !defined(PACPUS_OS_WINDOWS_MOBILE)
    170     DefaultFormatter() //(WORD savedConsoleBufferInfo)
     192    DefaultFormatter()
     193#if defined(PACPUS_OS_WINDOWS) && !defined(PACPUS_OS_WINDOWS_MOBILE)
     194    //DefaultFormatter(WORD savedConsoleBufferInfo)
    171195        : mStreamHandle(GetStdHandle(STD_OUTPUT_HANDLE))
    172196        //, mSavedConsoleBufferInfo(savedConsoleBufferInfo)
    173197        , mSavedConsoleBufferInfo(getColorAttribute(COLOR_WHITE) | FOREGROUND_INTENSITY) // FIXME: restore old value, not just reset
    174     {
    175     }
    176 #endif // defined(PACPUS_OS_WINDOWS) && !defined(PACPUS_OS_WINDOWS_MOBILE)
     198#endif // defined(PACPUS_OS_WINDOWS) && !defined(PACPUS_OS_WINDOWS_MOBILE)
     199    {
     200        mShouldUseColor = shouldUseColor(/*stdoutIsTty*/ true);
     201    }
    177202
    178203    void operator()(boost::log::basic_formatting_ostream<CharT>& strm, SeverityLevel const& /*sev*/)
    179204    {
     205        if (!mShouldUseColor) {
     206            return;
     207        }
    180208#if defined(PACPUS_OS_WINDOWS) && !defined(PACPUS_OS_WINDOWS_MOBILE)
    181209        fflush(stdout);
     
    187215    }
    188216
     217    bool mShouldUseColor;
    189218#if defined(PACPUS_OS_WINDOWS) && !defined(PACPUS_OS_WINDOWS_MOBILE)
    190219    const HANDLE mStreamHandle;
Note: See TracChangeset for help on using the changeset viewer.