用于自定义我的提示的 solarized 主题的 ANSI 颜色代码

ANSI color code of solarized theme to customize my prompt

我正在使用 ANSI colors 来美化我的提示。

我正在使用 solarized color pallet

要获取颜色,我目前正在使用以下函数在颜色旁边生成 ANSI 颜色代码。

function colors() {
  for color in {000..255}; do
    print -P "$color: %F{$color} Foreground %f%K{$color} Background %k"
    # Use `print -P` instead of `echo` if you want to use color.
  done
}

然后我手动将它们与曝光后的颜色托盘进行比较。然后我获取它的 ANSI 代码并在我的提示中使用。例如:

prompt='%F{002}[%2~]%f$(git_super_status)%(?.%F{033}√.%F{124}✕%?)%F{033}$ %f'

有什么方法可以更准确的得到晒版色盘的ANSI色码?

由于您已经在终端仿真器中定义了调色板,因此您可以使用 ANSI 3/4-bit color codes 3\[...m 而不是 zsh 的 promt 扩展 print -P '%F{...}'。这样,您将始终使用调色板中的颜色,即使您更改了调色板。此外,颜色也适用于任何其他 shell 而不仅仅是 zsh.

例子

PS1=$'3[31mThis is the same red as in your solarized palette3[0m'

使用颜色代码打印调色板

echo 'use 3[CODEm Text 3[0m to set text color'
for i in {0..7}; do
  for j in "3$i" "9$i"; do
    printf '3[%sm Code %s ' "$j" "$j"
  done
  printf '3[0m\n'
done

如果你不关心可移植性,想使用zsh的%F语法,那么你可以使用代码%F{1}%F{15}(你已经打印出来了)脚本,但被忽略了,因为有比这些更多的颜色。

硬编码颜色

如前所述,以上颜色代码使用终端模拟器中的调色板。如果无论终端模拟器设置如何,你总是想要相同的颜色,那么你可以在 zsh 中使用 6 位十六进制颜色代码:

print -P '%F{#dc322f} This is always the red from the solarized palette'

Wikipedia lists the hex color codes of the solarized palette.