检查终端仿真器支持多少种颜色


Answers:


20

的值$TERM不会提供有关支持的颜色数量的太多信息。许多终端将自己广告为xterm,并且可能支持任意数量的颜色(2、8、16、88和256是常见值)。

您可以使用OSC 4 ; c ; ? BEL 控制序列查询每种颜色的值。如果c支持颜色编号,并且如果终端了解此控制顺序,则终端将使用颜色值进行答复。如果不支持色号,或者如果终端不理解该控制顺序,则终端什么也不回答。这是一个bash / zsh代码片段,用于查询是否支持颜色42(如有必要,重定向至终端)。

printf '\e]4;%d;?\a' 42
if read -d $'\a' -s -t 1; then … # color 42 is supported

在流行的终端中,xterm和基于VTE库的终端(Gnome终端,Terminator,Xfce4终端等)都支持此控制序列。rxvt,konsole,screen和tmux不支持。

我不知道更直接的方法。


谢谢@吉尔斯。这看起来很棒。请问是什么read -d $'\a' -s -t 1
Amelio Vazquez-Reina

1
@intrpc读取输入直到第一个\a(响铃字符),而不回显输入,并且超时为1秒。
吉尔(Gilles)'所以

5
@ l0b0 tput colors查询terminfo数据库。你有机会TERM=xterm。Xterm可以支持至少2、8、16、88或256种颜色,具体取决于版本以及编译和运行时选项,但是terminfo数据库只能存储一个值。您可以设置eg TERM=xterm+256color,但是登录到在termcap / terminfo数据库中没有此条目的机器时,您会感到恼火。
吉尔(Gilles)“所以

2
@ l0b0您的管道显然与终端无关。您需要打印到终端(printf … >/dev/tty),然后从终端(read … </dev/tty)阅读。Xterm OSC 4; …; ? BEL通过注入击键来响应序列。
吉尔(Gilles)'所以

5


9

您可以使用

$ tput colors

在我的debian安装程序中,tput是ncurses-bin默认安装的软件包的一部分。


6
这只会告知您的终端通过以下方式向环境报告TERM了多少种颜色,而不是在适当的情况下它实际上可以支持多少种颜色TERM
MestreLion 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.