У команды tput
есть два различных параметра для установки цвета, setf
и setaf
все же оба они, кажется, прекрасно работают на моем компьютере:
$ tput setf 2 && echo 'Hello world!'
$ tput setaf 2 && echo 'Hello world!'
Кажется, есть похожая двойственность с setb
и setab
.
В чем разница между двумя вариантами?
terminfo(5)
man-страницу, которая идет сncurses
подробностями.Ответы:
setf
ограничено только 8 цветами.setaf
Можно установить до 256 цветов.(вся следующая информация будет относиться к urxvt, так как это мой терминал, но информация будет похожа, если не такая же, как другие терминалы)
И то,
setf
и другоеsetaf
предоставляют другой escape-код. Вы можете просмотреть это в следующем:Со
urxvt(7)
страницы моего руководства:Таким образом, из вышеприведенного
xxd
вывода видно, чтоtput setf 2
используется тотPm = 32
, который установит цвет на зеленый.tput setaf 2
с другой стороны, используетPm = 38;5
, который получает представляет цветовой код, определенный в ISO 8613-6 (также зеленый).В ISO 8613-6 цвета 0x00-0x07 такие же, как стандартные цвета, а 0x08 - 0x0f - стандартные «жирные» цвета. Как только вы получите 0x10-0xff, вы получите новые цвета.
Украдено из википедии :
источник
tput
однако, по- видимому, не использует доступные диапазоны цветовой последовательности ANSI. По любомуn > 7
,tput setaf n
никак не влияет на текст в моем терминале.tput setf 2
иtput setaf 2
являются одновременно.[32m
.Из руководства:
man 5 terminfo
Таким образом, ответ таков : setaf означает установить приоритет ANSI , т.е. использовать escape-последовательности ANSI, а setf означает установить приоритет (используя некоторые escape-последовательности, отличные от ANSI).
источник
Два набора возможностей используют различный порядок для красного / синего в списке цветов ANSI.
Как уже отмечалось, это объясняется на странице руководства ncurses terminfo . Немного истории:
setf/setb
.Sf/Sb
коды вместоsetaf/setab
(иAF/AB
для termcap) - но использовали escape-последовательности ANSI (которые работают с termcap) вместо того, чтобы использовать правильные возможности с возможностями ANSI.ANSI
setaf/setab
были добавлены довольно поздно в истории terminfo, так как вы можете вывести их положение в списке строк возможностей . Имейте в виду, что они были добавлены поэтапно в течение нескольких лет, и некоторые системы отличались (у ncurses есть несколько примеров, например,Caps.hpux
чтобы позволить ему быть скомпилированным для соответствия этим системам). Это объясняло небольшое количество полезных описаний терминалов, которые можно было бы использовать для справки.При этом тот факт, что существующие
setf/setb
строки не соответствуют порядку ANSI, не был сразу замечен, что привело к некоторым исправлениям в 1998 году и часто задаваемым вопросам. Почему красный / синий взаимозаменяемы? ,Хотя было возможно расширить последовательность из 8 цветов ANSI до 16 цветов (предполагая, что цвета 8-15 были более яркими версиями 0-7), не было веской причины для изобретения схемы, которая бы расширяла
setf/setb
первые 16 цветов.источник