为 iTerm.app 和 Terminal.app 创建点文件 — 如何检测 256 色支持?

为 iTerm.app 和 Terminal.app 创建点文件 — 如何检测 256 色支持?

我正在创建自定义点文件(.bash_profile及类似的)以供 OS X 的 Terminal.app 和 iTerm.app 使用。

我想根据活动应用程序是否支持 256 色有条件地配置一些设置。(iTerm.app 支持它,但 Terminal.app 不支持。)这可以使用语句if(伪代码)来实现:

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

终端.app:

$ echo $TERM_PROGRAM
Apple_Terminal

因此现在我使用以下检查:

if [ $TERM_PROGRAM == "iTerm.app" ]; then
  # Groovy 256-color stuff
fi

不过,我还是想知道是否有可能检测活动应用程序中可用颜色的数量。我试过了,tput colors但似乎没用,因为 Terminal.app 撒谎并返回256

答案1

可以通过 TERM 变量来实现。通常,它会被设置为“xterm”,但在 256 色终端中,您可以将其设置为“xterm-256color”。terminfo 数据库有一个合适的条目,许多程序在看到“xterm-256color”时会自动切换到 256 色模式。

(Terminal.app 真的不支持 256 色吗?)

答案2

我认为我遇到了一些相同的问题,并且强制将 terminal.app 变为 8 位的方法是转到:

  1. 优先;
  2. 设置;
  3. 选择配色方案;
  4. 高级选项卡。
  5. 然后将“声明终端为”设置为 xterm-color,而不是xterm-256color

答案3

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

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 色终端类型(不确定如何)

相关内容