16 cores no ZShell

11

Eu só consigo chamar 8 cores no prompt do zshell.

Exemplo:

PROMPT="[%n@%{$fg[magenta]%}%m%{$reset_color%} %.]
%# "

Funciona bem. Contudo,

PROMPT="[%n@%{$fg[brmagenta]%}%m%{$reset_color%} %.]
%# "

Não funciona Basicamente, nenhuma das variações de cores "brilhantes" aparece.

Depois de fazer algumas pesquisas, descobri que as cores do zsh são chamadas pelo conjunto de "cores".

fazendo

echo ${(o)color}

produz esta saída:

00 01 02 03 04 05 07 08 22 23 24 25 27 28 30 30 30 30 31 31 32 32 33 33 34 34 35 35 36 36
37 37 39 39 40 40 41 42 43 44 45 46 47 49 bg-black bg-blue bg-cyan bg-default bg-green
bg-magenta bg-red bg-white bg-yellow black blink blue bold conceal cyan default faint green
magenta no-blink no-conceal no-reverse no-standout no-underline none normal red reverse
standout underline white yellow

Como você pode ver, apenas as 8 cores padrão estão disponíveis. Eu tentei usar as variantes "bg-", que também deixam a saída como a cor do texto padrão.

Qualquer ajuda que você puder fornecer será muito apreciada. É claro que eu poderia usar apenas uma das cores normais, mas não aprenderia nada!

Tammer Ibrahim
fonte

Respostas:

9

Qual emulador de terminal você está usando? Você pode verificar o número de cores suportadas executando echotc Co. Por exemplo, meu urxvtsuporta 88 cores, mas xtermsuporta apenas 8, e variações brilhantes não estão incluídas.

Se eu executá-lo urxvt, recebo:

# Dark magenta/violet:
PS1="[%F{34}%n%F{reset}@%F{magenta}%m%F{reset} %.] " 
# Bright Thistle purple:
PS1="[%F{54}%n%F{reset}@%F{magenta}%m%F{reset} %.] "

Fontes: man zshall

Mischa Arefiev
fonte
4

Todas as "cores" de que você está falando são apenas seqüências de escape em um formulário \e[{color_code}m. A função Zsh colorsnada mais faz do que adicionar algumas variáveis ​​de matriz associativas zsh que mapeiam nomes de cores legíveis por humanos para seqüências de escape terminais. Assim, você pode usar diretamente

PS1=%{$'\e[54m'%}...

ou experimente a resposta de @Mischa Arefiev, é mais legível. Observe que as seqüências de escape funcionam em qualquer shell, enquanto construções como %F{54}...funcionam apenas no zsh.

ZyX
fonte