如果我希望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
?