16 cores no ZShell

9

Parece que só consigo chamar 8 cores no meu prompt do zshell.

Exemplo:

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

Funciona bem. No entanto,

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

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

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

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 de texto padrão.

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

    
por Tammer Ibrahim 21.02.2012 / 14:03

2 respostas

6

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

Se eu executar em urxvt , obtenho:

# 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

    
por 21.02.2012 / 18:18
3

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 colors não faz mais nada, adicionando algumas variáveis de matriz associativa zsh, mapeando nomes de cores legíveis para humanos às seqüências de escape de terminal. Assim você pode usar diretamente

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

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

    
por 22.02.2012 / 15:23