为 iTerm.app 和 Terminal.app —创建dotfiles如何检测 256个颜色支持?

分享于 

3分钟阅读

电脑

  繁體 雙語

问题:

我正在创建用于与x 和 iTerm.app. 操作系统 Terminal.app 一起使用的定制 dotfiles ( .bash_profile 和类似)

根据活动应用程序是否支持 256个颜色或者不支持,我想有条件地配置一些设置。 如果使用 if 语句( 伪代码),则 Terminal.app 不支持这里功能,但使用语句则可能会出现这种情况:


if 256_COLOR_SUPPORT; then


 # Make use of all available colors (iTerm.app)


else


 # Fall back to 16-color mode (Terminal.app)


fi



问题是我不知道如何编写 if 语句的条件。

因此我的问题是:是否可以检测 256色支持? 如果是这样?

我发现了如何检测当前的终端应用程序:

iTerm.app:


$ echo $TERM_PROGRAM


iTerm.app



Terminal.app:


$ echo $TERM_PROGRAM


Apple_Terminal



现在,我正在使用以下检查:


if [ $TERM_PROGRAM =="iTerm.app" ]; then


 # Groovy 256-color stuff


fi



我仍然想知道是否可以检测活动应用程序中可以用颜色的数量。 我试过 tput colors,但因为 Terminal.app lies,返回 256


回答 1:

可以通过变量变量来完成。 通常将它设置为"xterm",但是在 256-color 终端中,你可以将它设置为"xterm-256color"。 ,数据库有适当的项目,当它们看到"xterm-256color"时,许多程序自动 switch 到 256-color 模式。

( Terminal.app 真的没有 256色支持)?


回答 2:

我有一点相同的问题,以及强制 Terminal.app 进入 8位的方法是:

  • 首选项;
  • 设置;
  • 选取颜色方案;
  • 高级选项卡。
  • 然后将"将终端声明为"设置为xterm颜色而不是 xterm-256color

回答 3:

tput colors 返回当前终端类型支持的colous数:


matt@dell:~$ tput colors


8



这样你就可以将它捕获到一个变量中:


COLORS=$(tput colors)



并将该变量与已知/预期值进行比较


if [ $COLORS -eq 256 ]; then


. . . do your 256 colour stuff


else


. . . just 16 or 8 colours (16 is 8 colours in normal and bright mode)


fi



更新

你的更新发生在我写那个答案的时候。

你应该强制 Terminal.app 使用 8色终端类型( 不确定如何)



COL  SUP  color  TERM  Detect  终端  
相关文章