您的终端是否支持 88 色或 256 色模式?如果是这样,您可能应该使用 TERM 值,例如xterm-88color
orxterm-256color
而不是 plain xterm
。
inkpot特别声明不支持仅支持 8/16 色的终端。从墨罐源的顶部:
" This should work in the GUI, rxvt-unicode (88 colour mode) and xterm (256
" colour mode). It won't work in 8/16 colour terminals.
设置语法着色的代码假定如果终端不支持 88 色,那么它必须支持 256 色。它不会尝试为 8 种颜色的情况(例如 when TERM=xterm
)提供备用值。如果终端似乎没有适当的颜色支持,如果inkpot发出错误消息(并且没有修改颜色设置)也许会很好。
您看到的控制序列是由于尝试为该类型终端可接受的输入 0-7 范围之外的颜色编号生成 8 色终端颜色控制序列。因此,这些序列可能无效,但它们也不是完全有意的(因为inkpot假设支持 256 色,但xterm
terminfo 条目只知道如何处理基本的 8 色支持)。
例如,inkpotNormal
在 88 色终端上将语法前景色设置为 79;对于非 88 色终端(即 256 色终端,也适用于您的 8-color xterm
),这被转换为 231。
当您尝试使用 格式化此超出范围的颜色编号时TERM=xterm
,您会得到^[[3231m
您找到的结果:
% tput -T xterm setaf 231 | od -a
0000000 esc [ 3 2 3 1 m
0000007
(即在和231
之间插入)^[[3
m
如果你使用xterm-256color
,你会得到一个更正常的结果:
% tput -T xterm-256color setaf 231 | od -a
0000000 esc [ 3 8 ; 5 ; 2 3 1 m
0000013
(即在和231
之间插入)^[[38;5;
m
类似地,Normal
语法 88-color background color of 80 被转换为 256-color 值 232 并产生错误^[[4232m
序列 for xterm
(但会产生更合理^[[48;5;232m
的 under xterm-256color
)。