检查我的终端模拟器支持多少种颜色

Ame*_*ina 23 terminal-emulator

有没有可靠的方法来检查我的终端模拟器支持多少种颜色?

如果echo $TERMprints xterm,这是否明确告诉我我的终端模拟器支持多少种颜色?我怎样才能可靠地检查这些信息?

Gil*_*il' 24

的值$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
Run Code Online (Sandbox Code Playgroud)

在流行的终端中,xterm和基于VTE库的终端(Gnome-terminal、Terminator、Xfce4-terminal等)都支持这种控制序列;rxvt、konsole、screen 和 tmux 没有。

我不知道更直接的方法。

  • @l0b0 `tput colors` 查询 terminfo 数据库。很有可能你有`TERM=xterm`。Xterm 可以支持至少 2、8、16、88 或 256 种颜色,具体取决于版本以及编译和运行时选项,但 terminfo 数据库只能存储一个值。您可以设置例如`TERM=xterm+256color`,但是当您登录到在其termcap/terminfo 数据库中没有此条目的机器时,您会很恼火。 (6认同)
  • 很好,谢谢!这是一个 [脚本来确定您的 XTerm *实际* 支持多少种颜色](https://github.com/l0b0/xterm-color-count)。 (6认同)
  • 谢谢@吉尔斯。这看起来很棒。请问 `read -d $'\a' -s -t 1` 的作用是什么? (2认同)
  • @intrpc 读取输入直到第一个 `\a`(钟形字符),不回显输入,超时为 1 秒。 (2认同)
  • @l0b0 您的管道显然与终端无关。您需要打印到终端(`printf ... >/dev/tty`),然后从终端读取(`read ... </dev/tty`)。Xterm 响应`OSC 4;……; ? BEL` 序列通过注入击键。 (2认同)

小智 13

您可以使用

$ tput colors
Run Code Online (Sandbox Code Playgroud)

在我的 debian install tput 是ncurses-bin默认安装的包的一部分。

  • 这只会告知您的终端通过“TERM”*向环境*报告*了多少颜色,而不是在给定适当的“TERM”的情况下,它实际上可以*支持*多少种颜色 (8认同)

小智 12

有一个 perl 脚本256colors2.pl,它将在您的终端上显示所有颜色。

  • 谷歌代码离线,这似乎是另一种选择:https://gist.github.com/hSATAC/1095100 (4认同)