16 colores en ZShell

11

Parece que solo puedo llamar a 8 colores en mi indicador de zshell.

Ejemplo:

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

Funciona bien. Sin embargo,

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

No funciona Básicamente, no aparece ninguna de las variaciones de color "brillante".

Después de investigar un poco, descubrí que los colores de zsh son llamados por el setopt "colors".

haciendo

echo ${(o)color}

produce esta salida:

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 puede ver, solo están disponibles los 8 colores estándar. Intenté usar las variantes "bg-", que también dejan el resultado como el color de texto predeterminado.

Cualquier ayuda que puede proporcionar será muy apreciada. Por supuesto, podría usar uno de los colores normales, ¡pero no aprendería nada!

Tammer Ibrahim
fuente

Respuestas:

9

¿Qué emulador de terminal estás usando? Puede verificar la cantidad de colores admitidos ejecutando echotc Co. Por ejemplo, mi urxvtadmite 88 colores, pero xtermsolo admite 8, y no se incluyen variaciones brillantes.

Si lo ejecuto urxvtme sale:

# 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} %.] "

Fuentes: man zshall

Mischa Arefiev
fuente
4

Todos los "colores" de los que estás hablando son solo secuencias de escape en una forma \e[{color_code}m. La función Zsh colorsno hace nada más que agregar algunas variables de matriz asociativa zsh que mapean nombres de colores legibles por humanos a secuencias de escape de terminal. Por lo tanto, puede usar directamente

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

o pruebe la respuesta de @Mischa Arefiev, es más legible. Tenga en cuenta que las secuencias de escape funcionan en cualquier shell, mientras que las construcciones como %F{54}...funcionan solo en zsh.

ZyX
fuente