16 kolorów w ZShell

11

Wydaje mi się, że mogę wywoływać 8 kolorów w moim wierszu polecenia zshell.

Przykład:

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

Działa w porządku. Jednak,

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

Nie działa Zasadniczo nie występuje żadna z „jasnych” odmian kolorów.

Po przeprowadzeniu pewnych badań odkryłem, że kolory zsh są wywoływane przez „kolory” setopt.

robić

echo ${(o)color}

daje ten wynik:

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

Jak widać, dostępnych jest tylko 8 standardowych kolorów. Próbowałem użyć wariantów „bg-”, które również pozostawiają wydruk jako domyślny kolor tekstu.

Każda pomoc, którą możesz udzielić, będzie bardzo mile widziana. Mógłbym oczywiście użyć jednego z normalnych kolorów, ale wtedy niczego się nie nauczę!

Tammer Ibrahim
źródło

Odpowiedzi:

9

Jakiego emulatora terminala używasz? Możesz sprawdzić liczbę obsługiwanych kolorów, uruchamiając echotc Co. Na przykład moje urxvtobsługuje 88 kolorów, ale xtermobsługuje tylko 8, a jasne odmiany nie są uwzględnione.

Jeśli go uruchomię, urxvtdostanę:

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

Źródła: man zshall

Mischa Arefiev
źródło
4

Wszystkie „kolory”, o których mówisz, są po prostu sekwencjami ucieczki w formie \e[{color_code}m. Funkcja Zsh colorsnie robi nic więcej niż dodanie kilku zmiennych tablic asocjacyjnych zsh mapujących czytelne dla człowieka nazwy kolorów na końcowe sekwencje specjalne. W ten sposób możesz użyć bezpośrednio

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

lub wypróbuj odpowiedź @Mischa Arefiev, jest bardziej czytelna. Zauważ, że sekwencje specjalne działają w dowolnej powłoce, podczas gdy konstrukcje takie jak %F{54}...działają tylko w Zsh.

ZyX
źródło