16 цветов в ZShell

11

Кажется, я могу только вызвать 8 цветов в моей подсказке zshell.

Пример:

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

Работает отлично. Однако,

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

Не работает В принципе, ни один из «ярких» цветовых вариаций не появляется.

Проведя некоторое исследование, я обнаружил, что цвета zsh называются setopt «colors».

дела

echo ${(o)color}

дает такой вывод:

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

Как видите, доступны только 8 стандартных цветов. Я попытался использовать варианты "bg-", которые также оставляют вывод в качестве цвета текста по умолчанию.

Любая помощь, которую вы можете оказать, будет принята с благодарностью. Я мог бы, конечно, просто использовать один из нормальных цветов, но тогда я бы ничему не научился!

Таммер Ибрагим
источник

Ответы:

9

Какой эмулятор терминала вы используете? Вы можете проверить количество поддерживаемых цветов, запустив echotc Co. Например, мой urxvtподдерживает 88 цветов, но xtermподдерживает только 8, и яркие вариации не включены.

Если я запускаю его, urxvtя получаю:

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

Источники: man zshall

Миша арефьев
источник
4

Все «цвета», о которых вы говорите, являются просто escape-последовательностями в форме \e[{color_code}m. Функция Zsh colorsне делает ничего, кроме добавления нескольких переменных ассоциативного массива zsh, отображающих понятные человеку названия цветов, в конечные escape-последовательности. Таким образом, вы можете использовать напрямую

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

или попробуйте ответ @Mischa Arefiev, он более читабелен. Обратите внимание, что escape-последовательности работают в любой оболочке, в то время как конструкции %F{54}...работают только в zsh.

ZYX
источник