45 explicit Color(
enum C c = DEFAULT) noexcept :
Color(std::cout, c) {}
52 explicit Color(std::ostream &
os,
enum C c = DEFAULT) noexcept : m_NL(
true), m_os(
os) {
55 auto origFlags = m_os.setf(std::ios::dec, std::ios::basefield);
60 m_os.flags(origFlags);
69 Color(
unsigned char r,
unsigned char g,
unsigned char b) noexcept
70 :
Color(std::cout, r, g, b) {}
79 Color(std::ostream &
os,
unsigned char r,
unsigned char g,
unsigned char b) noexcept
80 : m_NL(
true), m_os(
os) {
83 auto origFlags = m_os.setf(std::ios::dec, std::ios::basefield);
84 m_os << seqBegin << BOLD <<
';' << COL256 <<
";2;" <<
85 toUnsigned(r) <<
';' <<
86 toUnsigned(g) <<
';' <<
88 m_os.flags(origFlags);
113 std::ostream &
os() {
return m_os; }
130 static unsigned toUnsigned(
const T &val) {
return val; }
131 static unsigned outIndex(
const std::ostream &
os) {
132 if (
os.rdbuf() == std::cout.rdbuf())
134 if (
os.rdbuf() == std::cerr.rdbuf())
138 static bool doColor(
const std::ostream &
os) {
140 return m_forceColorValue;
141 auto idx = outIndex(
os);
142 if (m_doColor[idx] < 0)
143 m_doColor[idx] = isatty(idx + 1);
144 return m_doColor[idx];
147 friend void testColor();
148 inline static std::string_view seqBegin =
"\033[";
149 inline static std::string_view seqEnd =
"\033[0m";
150 inline static signed char m_doColor[] = { -1, -1, 1 };
151 inline static bool m_forceColor =
false;
152 inline static bool m_forceColorValue =
false;
157 inline Color &&operator<<(Color &&os,
const Color::Ctrl &ctrl)
160 return std::move(os);
164 Color &&operator<<(Color &&os,
const T &x)
167 return std::move(os);
std::ostream & os()
Return current output stream.
Definition: Color.h:113
Color(std::ostream &os, enum C c=DEFAULT) noexcept
New Color stream (into os) using color c.
Definition: Color.h:52
Color(std::ostream &os, unsigned char r, unsigned char g, unsigned char b) noexcept
New Color stream (into os) using an RGB color.
Definition: Color.h:79
static void forceColorValue(bool value)
If forceColor(true) was called, use of colors is bound to value.
Definition: Color.h:107
C
Predefined colors.
Definition: Color.h:21
Color(unsigned char r, unsigned char g, unsigned char b) noexcept
New Color stream (stdout) using an RGB color.
Definition: Color.h:69
static void forceColor(bool force)
Force color value (see forceColorValue())
Definition: Color.h:102
Colorized output.
Definition: Color.h:18
Ctrl
Controls for Color.
Definition: Color.h:36
void ctrl(Ctrl ctrl)
Controls the stream behavior.
Definition: Color.h:119
Color(enum C c=DEFAULT) noexcept
New Color stream (stdout) using color c.
Definition: Color.h:45