我想修改一个程序,使其自动检测终端是否支持彩色功能,这样当我从不支持彩色的终端(比如在(X)Emacs的M-x shell中)运行该程序时,颜色会自动关闭。
我不想硬编码程序来检测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.
$
这是次优解决方案。