Terminal

為什麼不需要轉義序列以將樣式應用於 tmux 內終端中的文本?

  • February 13, 2018

如果我希望 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更改內部游標的形狀,tmuxman 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顏色(也是十六進制)的位置。

引用自:https://unix.stackexchange.com/questions/423679