如何在終端中使用 256 色作為背景色
我知道如何在終端中使用 256 色文本:
printf "\033[38;5;196mhello\n"
但是對於背景顏色,我似乎僅限於基本的 8 種顏色,即:
printf "\033[41mhello\n"
如何也使用 256 色作為背景色?
我的意思是,終端已經知道顏色,所以應該是可能的。但是語法是什麼?
如果它是相關的,我將
terminator
用作我的終端模擬器和zsh
我的外殼。
在
zsh
中,您不需要對轉義序列進行硬編碼,因為它具有多種設置背景和前景色的內置方法。您可以使用
echoti setaf
終端set
nsia
oregroundf
顏色並echoti setab
設置背景顏色b
(setaf
並且setab
是相應t
ermi
nfo 功能的名稱)假設您的終端支持 256 種顏色(就像基於 VTE 的顏色,例如您的 gnome-terminator 所做的那樣)並且
$TERM
正確設置為一個值,該值可以辨識具有正確轉義序列的 terminfo 條目,它應該可以工作。$ echoti setab 196 | sed -n l \033[48;5;196m$
或者,您可以使用帶有
print -P
或%
參數擴展標誌的提示擴展,並且:$ print -rP '%K{196}' | sed -n l \033[48;5;196m$
(此處
sed -n l
用於顯示正在發送的相應轉義序列,$
只是顯示行結束的位置,它不是輸出的一部分,是\033
GNU命令對 ESC 字元的表示(ASCII 中的八進制 033 字節值) )sed``l
某些終端(包括基於 VTE 的終端,例如您的 gnome-terminator)也支持 RGB 規範。在那些上,你可以做
$ print -rP '%K{#ffffff}' | sed -n l \033[48;2;255;255;255m$
(這裡
fffffff
是亮白色,因為這是ff
所有紅色、綠色和藍色分量的最大值)。在這種情況下,zsh
硬編碼 xterm 樣式的序列(參見那裡的背景),因為沒有相應的 terminfo 功能。雖然不是標準的,但它是目前在現代 FLOSS 終端仿真器中得到最廣泛支持的。
%K
設置背景顏色,%F
用於前景。%k
/%f
恢復預設顏色。對於不支持但支持 88 或 256 調色板的終端,
zsh
還有一個zsh/nearcolor
模組可以讓您獲得最接近該 RGB 規範的顏色:$ zmodload zsh/nearcolor $ echoti colors 256 $ print -rP '%K{#ffffff}' | sed -n l \033[48;5;231m$
(這裡我的 256 色終端上的 231 色是最接近亮白色的,它實際上是亮白色)。
如果您有權訪問 X11
rgb.txt
文件,您還可以為每個X11 顏色名稱定義關聯數組,例如:typeset -A X11_bg X11_fg while read -r r g b c; do [[ $r = [0-9]* ]] || continue printf -v hex %02x $r $g $b X11_fg[$c]=${(%):-%F{#$hex}} X11_bg[$c]=${(%):-%K{#$hex}} done < /etc/X11/rgb.txt X11_bg[default]=${(%):-%k} X11_fg[default]=${(%):-%f}
(類 Debian 系統
/etc/X11/rgb.txt
作為x11-common
軟體包的一部分)。執行以下操作:
print -r "$X11_bg[dark olive green]text$X11_bg[default]"
有關更多詳細資訊,請參閱:
man 5 terminfo
info zsh echoti
info zsh print
info zsh "Prompt Expansion"
info zsh "The zsh/nearcolor Module"
(請注意,在某些系統上,您需要安裝
zsh-doc
軟體包或等效程序才能使info
頁面可用)。