端末がカラー対応かどうかを自動的に検出するようにプログラムを変更したいので、カラー対応でない端末(たとえば(X)EmacsのMxシェル)内からプログラムを実行すると、カラーが自動的にオフになります。
TERM = {emacs、dumb}を検出するようにプログラムをハードコーディングしたくありません。
termcap / terminfoがこれを助けることができるはずだと思っていますが、これまでのところ、この(n)cursesをまとめることができました-コードのスニペットを使用して、ターミナルが見つからない場合はひどく失敗します:
#include <stdlib.h>
#include <curses.h>
int main(void) {
int colors=0;
initscr();
start_color();
colors=has_colors() ? 1 : 0;
endwin();
printf(colors ? "YES\n" : "NO\n");
exit(0);
}
つまり、私はこれを取得します:
$ gcc -Wall -lncurses -o hep hep.c
$ echo $TERM
xterm
$ ./hep
YES
$ export TERM=dumb
$ ./hep
NO
$ export TERM=emacs
$ ./hep
Error opening terminal: emacs.
$
これは...次善です。