代码之家  ›  专栏  ›  技术社区  ›  Ahmad Ismail

ANSI颜色代码的太阳能主题,以自定义我的提示

  •  0
  • Ahmad Ismail  · 技术社区  · 6 年前

    我正在使用 ANSI colors

    我正在使用 solarized color pallet .

    enter image description here

    为了得到颜色,我正在做的是使用下面的函数来生成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色码?

    0 回复  |  直到 6 年前
        1
  •  1
  •   Socowi    6 年前

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

    例子

    PS1=$'\033[31mThis is the same red as in your solarized palette\033[0m'
    

    使用颜色代码打印调色板

    echo 'use \033[CODEm Text \033[0m to set text color'
    for i in {0..7}; do
      for j in "3$i" "9$i"; do
        printf '\033[%sm Code %s ' "$j" "$j"
      done
      printf '\033[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.