setf
ограничено только 8 цветами. setaf
Можно установить до 256 цветов.
(вся следующая информация будет относиться к urxvt, так как это мой терминал, но информация будет похожа, если не такая же, как другие терминалы)
И то, setf
и другое setaf
предоставляют другой escape-код. Вы можете просмотреть это в следующем:
# tput setf 2 | xxd
0000000: 1b5b 3332 6d .[32m
# tput setaf 2 | xxd
0000000: 1b5b 3338 3b35 3b32 6d .[38;5;2m
Со urxvt(7)
страницы моего руководства:
"ESC [ Pm m"
Character Attributes (SGR)
...
Pm = 30 / 40 fg/bg Black
Pm = 31 / 41 fg/bg Red
Pm = 32 / 42 fg/bg Green
Pm = 33 / 43 fg/bg Yellow
Pm = 34 / 44 fg/bg Blue
Pm = 35 / 45 fg/bg Magenta
Pm = 36 / 46 fg/bg Cyan
Pm = 37 / 47 fg/bg White
Pm = 38;5 / 48;5 set fg/bg to colour #m (ISO 8613-6)
Таким образом, из вышеприведенного xxd
вывода видно, что tput setf 2
используется тот Pm = 32
, который установит цвет на зеленый. tput setaf 2
с другой стороны, использует Pm = 38;5
, который получает представляет цветовой код, определенный в ISO 8613-6 (также зеленый).
В ISO 8613-6 цвета 0x00-0x07 такие же, как стандартные цвета, а 0x08 - 0x0f - стандартные «жирные» цвета. Как только вы получите 0x10-0xff, вы получите новые цвета.
Украдено из википедии :
0x00-0x07: standard colors (as in ESC [ 30..37 m)
0x08-0x0f: high intensity colors (as in ESC [ 90..97 m)
0x10-0xe7: 6*6*6=216 colors: 16 + 36*r + 6*g + b (0≤r,g,b≤5)
0xe8-0xff: grayscale from black to white in 24 steps
terminfo(5)
man-страницу, которая идет сncurses
подробностями.