16 couleurs en ZShell

11

Il me semble que je ne peux appeler que 8 couleurs dans mon invite zshell.

Exemple:

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

Fonctionne bien. cependant,

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

Ça ne marche pas. Fondamentalement, aucune des variations de couleurs "vives" n'apparaît.

Après avoir fait quelques recherches, j'ai trouvé que les couleurs de zsh sont appelées par le setopt "colors".

Faire

echo ${(o)color}

donne cette sortie:

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

Comme vous pouvez le voir, seules les 8 couleurs standard sont disponibles. J'ai essayé d'utiliser les variantes "bg-", qui laissent également la sortie comme couleur de texte par défaut.

Toute aide que vous pourrez apporter sera grandement appréciée. Je pourrais bien sûr utiliser une des couleurs normales, mais je n'apprendrais rien!

Tammer Ibrahim
la source

Réponses:

9

Quel émulateur de terminal utilisez-vous? Vous pouvez vérifier le nombre de couleurs prises en charge en exécutant echotc Co. Par exemple, mon urxvtsupporte 88 couleurs, mais xtermne prend en charge que 8, et les variations lumineuses ne sont pas incluses.

Si je l'exécute, urxvtj'obtiens:

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

Sources: man zshall

Mischa Arefiev
la source
4

Toutes les «couleurs» dont vous parlez ne sont que des séquences d'échappement sous une forme \e[{color_code}m. La fonction Zsh colorsne fait rien de plus que l'ajout de quelques variables de tableau associatif zsh mappant les noms de couleurs lisibles par l'homme aux séquences d'échappement terminales. Ainsi, vous pouvez soit utiliser directement

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

ou essayez la réponse de @Mischa Arefiev, elle est plus lisible. Notez que les séquences d'échappement fonctionnent dans n'importe quel shell, tandis que les constructions comme %F{54}...ne fonctionnent que dans zsh.

ZyX
la source