use*_*441 2 terminal tmux escape-characters
如果我希望ANSI颜色0
为红色,在urxvt
终端中,我需要将序列传递\e]4;0;red\a
给后者:
printf '\e]4;0;red\a'
Run Code Online (Sandbox Code Playgroud)
我在这里找到了一般语法:
OSC 4 ; c ; spec BEL
Run Code Online (Sandbox Code Playgroud)
inside tmux
,它不起作用,可能是因为它tmux
在终端之前被消耗了。因此,我需要通过此处找到的另一个序列来保护它:
printf '\ePtmux;\e\e]4;0;red\a\e\\'
Run Code Online (Sandbox Code Playgroud)
现在,如果我想对文本应用一种样式,例如给它加下划线,我是在里面还是在外面tmux
都没有关系。同样的顺序似乎总是有效:
printf '\e[4m underline \e[0m'
Run Code Online (Sandbox Code Playgroud)
我想也许可以解释这种差异,因为我已经在~/.tmux.conf
. 特别是,我设置了terminal-overrides
添加和设置非官方 terminfo 扩展Ss
并Se
更改内部光标形状的选项,tmux
如man tmux
(部分TERMINFO EXTENSIONS
)中所述:
set-option -as terminal-overrides ',*:Ss=\E[%p1%d q:Se=\E[2 q'
Run Code Online (Sandbox Code Playgroud)
但是当我尝试对里面的文本应用样式时tmux
,我在没有任何配置的情况下启动了后者:
tmux -Ltest -f/dev/null
Run Code Online (Sandbox Code Playgroud)
在里面tmux
,为什么不需要\e[4m underline \e[0m
像 for 那样保护序列\e]4;0;red\a
?
tmux
不是 XTerm(即使您在 XTerm 中使用它)。它在您碰巧使用的任何终端之上充当自己的终端仿真器(当然还有多路复用器)。您链接的页面是 XTerm 控制序列,它(虽然非常有用)并不适用于现有的每个终端。对于screen
,在线手册页screen(1)
列出了它接受的控制序列。 tmux(1)
不包含类似的部分,但在tools/ansicode.txt
.
在任何情况下,用于设置文本属性的 SGR 序列比“操作系统命令”更受支持,例如用于更改调色板的命令。从同一个链接页面:
CSI Pm m 字符属性 (SGR)
- Ps = 0 -> 正常(默认)。
- Ps = 1 -> 粗体。
- Ps = 2 -> 微弱,强度降低 (ISO 6429)。
- Ps = 3 -> 斜体 (ISO 6429)。
- Ps = 4 -> 下划线
- Ps = 5 -> Blink(在 X11R6 xterm 中显示为粗体)。
- Ps = 7 -> 逆。
- Ps = 8 -> 不可见,即隐藏(VT300)。
- Ps = 9 -> 划掉的字符 (ISO 6429)。
- Ps = 2 1 -> 双下划线 (ISO 6429)。
- Ps = 2 2 -> 正常(既不粗也不淡)。
- Ps = 2 3 -> 非斜体 (ISO 6429)。
- Ps = 2 4 -> 没有下划线。
- Ps = 2 5 -> 稳定(不闪烁)。
- Ps = 2 7 -> 正(非反)。
- Ps = 2 8 -> 可见,即未隐藏(VT300)。
- Ps = 2 9 -> 未划掉 (ISO 6429)。
- Ps = 3 0 -> 将前景色设置为黑色。
- Ps = 3 1 -> 将前景色设置为红色。
- Ps = 3 2 -> 将前景色设置为绿色。
- Ps = 3 3 -> 将前景色设置为黄色。
- Ps = 3 4 -> 将前景色设置为蓝色。
- Ps = 3 5 -> 将前景色设置为洋红色。
- Ps = 3 6 -> 将前景色设置为青色。
- Ps = 3 7 -> 将前景色设置为白色。
- Ps = 3 9 -> 将前景色设置为默认(原始)。
- Ps = 4 0 -> 将背景颜色设置为黑色。
- Ps = 4 1 -> 将背景颜色设置为红色。
- Ps = 4 2 -> 将背景颜色设置为绿色。
- Ps = 4 3 -> 将背景颜色设置为黄色。
- Ps = 4 4 -> 将背景颜色设置为蓝色。
- Ps = 4 5 -> 将背景颜色设置为洋红色。
- Ps = 4 6 -> 将背景颜色设置为青色。
- Ps = 4 7 -> 将背景颜色设置为白色。
- Ps = 4 9 -> 将背景颜色设置为默认(原始)。
(我有一种感觉Pm应该是Ps来匹配项目。)
这是有道理的 tmux
直接支持这些,因为它们经常被应用程序使用,而用户可能会因缺乏支持而感到沮丧。
可能还值得注意的是,Linux 控制台使用不同的转义序列将调色板索引 0 设置为 red: \033]P0ff0000\033\\
。通常它是OSC P n rr gg bb ST
其中n
是调色板指数(十六进制),并rr gg bb
是颜色(也十六进制)。