為什麼不需要轉義序列以將樣式應用於 tmux 內終端中的文本?
如果我希望 ANSI 顏色
0
為紅色,在urxvt
終端中,我需要將序列傳遞\e]4;0;red\a
給後者:printf '\e]4;0;red\a'
我在這裡找到了一般語法:
OSC 4 ; c ; spec BEL
在裡面
tmux
,它不起作用,可能是因為它tmux
在終端之前被消耗掉了。所以,我需要通過這裡找到的另一個序列來保護它:printf '\ePtmux;\e\e]4;0;red\a\e\\'
現在,如果我想對文本應用一種樣式,例如給它加下劃線,我是在裡面還是在外面
tmux
都沒有關係。相同的順序似乎總是有效:printf '\e[4m underline \e[0m'
我認為也許可以解釋這種差異,因為我在
~/.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'
但是當我嘗試對裡面的文本應用樣式時
tmux
,我在沒有任何配置的情況下啟動了後者:tmux -Ltest -f/dev/null
在裡面
tmux
,你為什麼不需要\e[4m underline \e[0m
像你需要的那樣保護序列\e]4;0;red\a
?
tmux
不是 XTerm(即使您在 XTerm 中使用它)。它在您碰巧使用的任何終端之上充當自己的終端仿真器(當然還有多路復用器)。您連結的頁面是 XTerm 控制序列,它(雖然非常有用)並不適用於現有的每個終端。對於screen
,線上手冊頁screen(1)
列出了它接受的控制序列。tmux(1)
不包含類似的部分,但有一個 1984 年對終端的各種控制序列的舊描述,至少反映了其作者幾年前的目標,儘管沒有嚴格記錄其目前行為是什麼,在其原始碼中tools/ansicode.txt
。在任何情況下,用於設置文本屬性的 SGR 序列比“作業系統命令”得到更普遍的支持,例如用於更改調色板的命令。從同一個連結頁面:
CSI Pm m 字元屬性 (SGR)
- Ps = 0 -> 正常(預設)。
- Ps = 1 -> 粗體。
- Ps = 2 -> 微弱,強度降低 (ISO 6429)。
- Ps = 3 -> 斜體 (ISO 6429)。
- Ps = 4 -> 下劃線
- Ps = 5 -> 閃爍(在 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
顏色(也是十六進制)的位置。