粗体字体 (ANSI: CSI 1 m
) 的效果似乎取决于终端仿真器。例如,在不同的终端模拟器上运行以下脚本
#!/bin/sh
echo "TERM = $TERM"
for mode in 0 2 1 '1;2'; do
printf '\033[%s;38;5;%dm\033[48;5;%dm%s\033[0m\n' "$mode" 0 15 "testing ($mode)"
done
给出以下输出
在测试的终端仿真器中,只能xterm
正确呈现粗体文本(模式=1)。其他终端仿真器似乎为粗体字体选择了更亮的颜色(通常也将其与粗体字体结合使用)。奇怪的是,st
当给定参数时,会产生正确着色的粗体文本1;2
,对应于bold;faint
.
认为也许这些终端仿真器期望粗体字体的不同控制序列,我检查了terminfo
,但发现一致
$ for term in xterm-256color st-256color rxvt-unicode-256color tmux-256color; do printf "%-24s" "$term"; TERM=$term tput bold | cat -v; echo; done
xterm-256color ^[[1m
st-256color ^[[1m
rxvt-unicode-256color ^[[1m
tmux-256color ^[[1m
这就引出了一个问题,哪些终端仿真器参数控制粗体字体的效果?如何防止转向更亮的颜色?这可以通过Xresources
或terminfo
定制来解决吗?(顺便说一句,是否有对应的参数vim
?它表现出类似的行为,不一定对应于运行它的终端仿真器的行为。)