setf
est limité à seulement 8 couleurs. setaf
peut définir jusqu'à 256 couleurs.
(toutes les informations suivantes seront spécifiques à urxvt, car il s'agit de mon terminal, mais les informations seront similaires, sinon identiques, aux autres terminaux)
Les deux setf
et setaf
fournir un code d'échappement différent. Vous pouvez le voir de la manière suivante:
# tput setf 2 | xxd
0000000: 1b5b 3332 6d .[32m
# tput setaf 2 | xxd
0000000: 1b5b 3338 3b35 3b32 6d .[38;5;2m
Depuis ma urxvt(7)
page de manuel:
"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)
Ainsi, à partir de la xxd
sortie ci-dessus , nous pouvons voir que tput setf 2
utilise le Pm = 32
, qui mettra la couleur au vert. tput setaf 2
d'autre part utilise le Pm = 38;5
, qui représente le code couleur défini dans ISO 8613-6 (également vert).
Dans ISO 8613-6, les couleurs 0x00-0x07 sont les mêmes que les couleurs standard, et 0x08 - 0x0f sont les couleurs "gras" standard. Une fois arrivé à 0x10-0xff, vous obtenez de nouvelles couleurs.
Volé sur wikipedia :
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)
page de manuel fournie avecncurses
pour plus de détails.