如何在终端中使用 256 色作为背景色

400*_*Cat 9 colors zsh terminal gnome-terminator ansi

我知道如何在终端中为文本使用 256 种颜色:

printf "\033[38;5;196mhello\n"
Run Code Online (Sandbox Code Playgroud)

但是对于背景颜色,我似乎仅限于基本的8种颜色,即:

printf "\033[41mhello\n"
Run Code Online (Sandbox Code Playgroud)

我怎样才能使用 256 色作为背景色?

我的意思是,终端已经知道颜色,所以应该是可能的。但是语法是什么?

如果相关,我将terminator用作我的终端模拟器和zsh我的外壳。

Sté*_*las 10

在 中zsh,您不需要对转义序列进行硬编码,因为它具有多种设置背景和前景色的内置方法。

您可以使用echoti setafset终端aNSI foreground颜色echoti setab设置background一个(setaf并且setab是相应的名称tERM iNFO能力)

假设您的终端支持 256 种颜色(就像基于 VTE 的颜色,例如您的 gnome-terminator 所做的那样)并且$TERM正确设置为一个值,该值标识具有正确转义序列的 terminfo 条目,它应该可以工作。

$ echoti setab 196 | sed -n l
\033[48;5;196m$
Run Code Online (Sandbox Code Playgroud)

或者您可以使用带有print -P%参数扩展标志的提示扩展和:

$ print -rP '%K{196}' | sed -n l
\033[48;5;196m$
Run Code Online (Sandbox Code Playgroud)

(这里sed -n l用于显示正在发送的相应转义序列,$只是为了显示行结束的位置,它不是输出的一部分,\033是 GNUsedl命令对 ESC 字符的表示(ASCII 中的八进制 033 字节值) )

某些终端(包括基于 VTE 的终端,例如 gnome-terminator)也支持 RGB 规范。在那些上,你可以做

$ print -rP '%K{#ffffff}' | sed -n l
\033[48;2;255;255;255m$
Run Code Online (Sandbox Code Playgroud)

(此处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$
Run Code Online (Sandbox Code Playgroud)

(这里我的 256 色终端上的颜色 231 是最接近亮白色的颜色,它实际上是亮白色)。

如果您有权访问 X11rgb.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}
Run Code Online (Sandbox Code Playgroud)

(类似 Debian 的系统/etc/X11/rgb.txt作为x11-common软件包的一部分)。

做这样的事情:

print -r "$X11_bg[dark olive green]text$X11_bg[default]"
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅:

  • man 5 terminfo
  • info zsh echoti
  • info zsh print
  • info zsh "Prompt Expansion"
  • info zsh "The zsh/nearcolor Module"

(请注意,在某些系统上,您需要安装一个zsh-doc包或等效项才能使info页面可用)。


use*_*777 6

printf "\033[48;5;226mhello\e[m\n"

printf "\033[48;2;255;255;0mhello\e[m\n"

较旧版本的 VTE 库(例如 Debian 10 上的 Terminator 1.91 使用的 libvte-2.91)不支持第二种 (RGB) 形式的更标准变体(在 之后包含未使用的“色彩空间标识符” 2)。


归档时间:

查看次数:

2204 次

最近记录:

5 年,1 月 前