Я нахожусь в процессе окраски моего терминала PS1
.
Я устанавливаю переменные цвета, используя tput
; например, вот фиолетовый:
PURPLE=$(tput setaf 125)
Вопрос:
Как мне найти цветовые коды (например 125
) других цветов?
Есть ли где-нибудь руководство по таблице цветов / шпаргалка?
Я просто не уверен, что 125
... Есть ли способ взять шестнадцатеричный цвет и преобразовать его в число, которое setaf
можно использовать?
Ответы:
Количество цветов, доступных для tput, определяется как
tput colors
.Чтобы увидеть 8 основных цветов (используемых
setf
терминалом urxvt и терминаломsetaf
xterm):И обычно называется так:
Чтобы увидеть расширенные 256 цветов (как используется
setaf
в urxvt):Если вам нужны цифры и упорядоченный вывод:
16 миллионов цветов требуют совсем немного кода (некоторые консоли не могут показать это).
Основы это:
fb
этоfront/back
или3/4
.Простой тест способности вашей консоли представить так много цветов:
Он будет отображать красную линию с очень небольшим изменением тона слева направо. Если это небольшое изменение видно, ваша консоль способна отображать 16 миллионов цветов.
Каждый
r
,g
иb
является значением от 0 до 255 для RGB (красный, зеленый, синий).Если ваш тип консоли поддерживает это, этот код создаст таблицу цветов:
Чтобы преобразовать шестнадцатеричное значение цвета в (ближайший) 0-255 цветовой индекс:
Используйте это как:
Чтобы найти номер цвета, используемый в формате цветов HTML :
Используйте его как («основной» - первые 16 цветов, «цвет» - основная группа, «серый» - последние серые цвета):
источник
fromhex
. Еще раз спасибо! Также я добавил чек на#
. Обратная связь?hex=${1#"#"}
. Он ничего$1
не удалит, если у него нет#
, и удалит его, если он существует. Смотрите мой обновленный код.\e[0;%s8;2;%s;%s;%sm
мне не дают 16M цветов, только цвет в палитре 240, который ближе всего к запрашиваемому rgb.Краткий ответ: вы можете найти в Интернете таблицы цветов и сопоставить их с номером цвета.
Длинный ответ заключается в том, что правильное отображение зависит от терминала -
125
Является параметром для управляющей последовательности , указанной какsetaf
в терминальном описании.tput
не придает особого значения числу. Это на самом деле зависит от конкретного эмулятора терминала.Некоторое время назад ANSI определила коды для 8 цветов, и было две схемы для их нумерации. Эти два видны в некоторых терминальных описаниях как пары
setf/setb
илиsetaf/setab
. Поскольку последний имеет значение «цвета ANSI», вы увидите, что он используется чаще. Первый (setf / setb) изменил порядок для красного / синего, как отмечено в FAQ по ncurses. Почему красный / синий взаимозаменяемы? , но в любом случае схема была создана для нумерации цветов. Нет предопределенной связи между этими числами и контентом RGB.Для конкретных эмуляторов терминала существуют предопределенные цветовые палитры, которые можно легко перечислить - и которые можно запрограммировать с помощью этих escape-последовательностей. Там нет ни одного соответствующих стандартов, и вы увидите разницу между эмуляторов терминала, как отмечено в XTERM FAQ Мне не нравится , что оттенок синего .
Однако соглашение часто путают со стандартами. В развитие xterm за последние 20 лет он включил цвета ANSI (8), адаптировал
aixterm
функцию (16) цветов, добавил расширения для 88- и 256 цветов. Многое из этого было принято другими разработчиками для различных эмуляторов терминала. Это кратко изложено в FAQ по xterm. Почему бы не сделать «xterm» приравненным к «xterm-256color»? ,Исходный код xterm включает в себя сценарии для демонстрации цветов, например, с использованием тех же escape-последовательностей, которые
tput
будут использоваться.Вам также может пригодиться этот вопрос / ответ: значения RGB цветов в расширенном индексе цветов Ansi (17-255)
источник
tput
Утилита использует справочную таблицу 256 цветов для печати 8-битных ANSI управляющие последовательности (начиная с Escи[
) , что делает использование возможностей терминала , так что эти управляющие последовательности могут быть интерпретированы как цвета. Это предопределенный набор из 256 цветов, обычно используемых в графических картах.Чтобы напечатать все 256 цветов в терминале, попробуйте следующий однострочный:
Подсказка: добавить
| column
в список столбцов .Эту 256-цветную таблицу поиска можно также найти на странице Википедии следующим образом:
источник
С zsh и в
xterm
терминале -подобного терминала (xterm
иvte
терминалах -подобного типаgnome-terminal
,xfce4-terminal
как минимум ...) вы можете сделать:Эквивалент bash:
(вы хотите, чтобы escape-последовательность запрашивала цвет для отправки после
echo
отключения терминальной дисциплины (с-s
), в противном случае ответ будет отображаться строковой дисциплиной половину времени, следовательно, отправка его как частиread
запроса (var?prompt
в zsh) как в кш,-p prompt
в баш)).чтобы получить определение цвета 125 (здесь в качестве спецификации RGB, каждое число представляет собой интенсивность красного, зеленого и синего компонентов в виде шестнадцатеричного числа от 0 до FFFF).
Вы можете сделать то же самое для первых 16 цветов с помощью
xtermcontrol
команды:источник
tput colors
отчеты только в8
том случае, если терминал способен отображать 256 цветов. Кроме того, xterm-color (Konsole)tput colors
сообщает только о8
том, что этот терминал полностью способен отображать 16 миллионов цветов (и, конечно, все 256 цветов). И нет, нет tmux или экрана, который может «покрасить» :-) (изменить то есть) результаты (я знал об этой детали). Вкратце: ваш код может не работать в некоторых терминалах / консолях.ANSI Colours на консольном сроке
В зависимости от того, какой протокол используется вашей консолью, последовательность может быть:
\e[38;5;XXXm
или\e[3XXXm
гдеXXX
соответствует номеру ANSI.Чтобы убедиться, что вы используете правильную последовательность ANSI, вы должны использовать
tput
.Что касается кода ESC Википедии , я написал это:
Может сделать что-то вроде:
... Затем, поскольку я ненавижу запуск более 200 вилок в небольшом сценарии, я написал это:
Только с 1 вилкой! Тот же результат, но намного быстрее!
источник