c++の機能で実現するのではなく、ターミナル(コンソール)にエスケープシーケンスを送りつけて実現する。
エスケープ文字は“\033”(8進数表示)または“\x1b”(16進数表示)で表されるものである。
std::cout << "\033[31m aho \033[m" << std::endl;
のようにすると aho が赤文字になる。 最後の“\033[m” は指定の解除。
実はコンソールのSGR(Select Graphic Rendition)コマンドというものらしい。
文法的には “ESC[○○m”というような形でグラフィック系の指定を行う。
○○の部分が、例えば30番台は文字色が 30:black, 31:red, 32:green, 33:yellow, 34:blue, 35:magenta, 36:cyan, 37:white となる。
40番台は背景色が同様に変わる。
その他、
などがある。
複数組み合わせは“;” で区切って、例えば“\033[1;4;31;42m” だと 太字-下線-赤文字-緑背景 とできる。