我正在创建自定义点文件(.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 位的方法是转到:
- 优先;
- 设置;
- 选择配色方案;
- 高级选项卡。
- 然后将“声明终端为”设置为 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 色终端类型(不确定如何)