【发布时间】:2011-01-28 18:07:55
【问题描述】:
我想更改一个程序以自动检测终端是否具有颜色功能,因此当我从不支持颜色的终端(例如 (X)Emacs 中的 Mx shell)中运行所述程序时,颜色是自动关闭。
我不想硬编码程序来检测 TERM={emacs,dumb}。
我认为 termcap/terminfo 应该能够帮助解决这个问题,但到目前为止,我只设法拼凑了这个 (n)curses-using sn-p of code,当它不能时,它会严重失败找到终端:
#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.
$
这是……次优的。
【问题讨论】:
-
说到底你不能,因为你不知道终端是用什么样的CRT实现的。
-
我对终端(类型)是否说它具有颜色能力感兴趣 - 不是对从 CRT 发出的光的光谱进行分析 :-)
标签: unix terminal termcap terminfo