おそらく最も簡単なチェック方法は次のとおりです。
isatty(fileno(STDOUT))
1
これは、標準出力が任意の種類の端末に送信されている場合に返されます。実際には、どの端末もVT100カラーコードをサポートまたは無視します。特定の非常に珍しいハードウェア端末に出力することを期待しない限り、terminfoを調べる必要はありません。(そのほとんどは何十年もの間作られていません。)
色を出力するには、(拡張された)SGRシーケンスを使用します。
"\x1b[%dm"
ここで、%d
は一般的にサポートされている色の次の値の1つです。
0: reset colors/style
1: bold
4: underline
30 - 37: black, red, green, yellow, blue, magenta, cyan, and white text
40 - 47: black, red, green, yellow, blue, magenta, cyan, and white background
より多くの値がありますが、これらは最も広くサポートされている値です。繰り返しになりますが、terminfoを調べることは、これらの制御コードにはほとんど不要です。その塩に値するすべてのソフトウェア端末がそれらをサポート(または無視)するからです。
複数の属性を一度に変更する必要がある場合は、セミコロンで区切って一度にすべてを指定できます。たとえば、次のシーケンスでは、緑色の背景に太字のマゼンタのテキストで眼球を焦がします。
"\x1b[1;35;42m"