support true color

In order to use true color with Powerlevel10k you need ZSH >= 5.7 and a terminal that supports true
color. Here's how you can check whether you are covered.

    if autoload -U is-at-least && is-at-least 5.7; then
      echo "ZSH $ZSH_VERSION: supports true color"
    else
      echo "ZSH $ZSH_VERSION: does not support true color"
    fi

    if [[ $COLORTERM == (24bit|truecolor) || ${terminfo[colors]} -eq 16777216 ]]; then
      echo "Terminal supports true color"
    else
      echo "Terminal does not support true color"
    fi

To use true color with Powerlevel10k, use `#ffffff` format when specifying colors.

    POWERLEVEL9K_TIME_FOREGROUND='red'      # by name (type `getColorCode foreground` to list all)
    POWERLEVEL9K_TIME_BACKGROUND='001'      # by decimal code (usually 001 to 256)
    POWERLEVEL9K_TIME_BACKGROUND='#ff0000'  # by hex code (#000000 to #ffffff)

In order to be able to use the same configuration from a terminal without true color support,
add this to your ~/.zshrc:

    if [[ $COLORTERM != (24bit|truecolor) && ${terminfo[colors]} -ne 16777216 ]]; then
      zmodload zsh/nearcolor
    fi

When using a true color terminal, `#ffffff` will render as true color. When on an older terminal,
it'll render as the closest available color. Neat!

Fixes #62.
pull/70/head
romkatv 5 years ago
parent 96f5482a8d
commit 182f0f7162

@ -150,10 +150,11 @@ typeset -ga _P9K_RIGHT_JOIN=(1)
_p9k_color() {
local user_var=POWERLEVEL9K_${(U)${2}#prompt_}_${3}
local color=${${(P)user_var}:-${1}}
# Check if given value is already numerical.
if [[ $color == <-> ]]; then
if [[ $color == <-> ]]; then # decimal color code: 255
_P9K_RETVAL=${(l:3::0:)color}
else
elif [[ $color == '#'* ]]; then # hexademical color code: #ffffff
_P9K_RETVAL=$color
else # named color: red
# Strip prifixes if there are any.
_P9K_RETVAL=$__P9K_COLORS[${${${color#bg-}#fg-}#br}]
fi

Loading…
Cancel
Save