setf
è limitato a soli 8 colori. setaf
può impostare fino a 256 colori.
(tutte le seguenti informazioni saranno specifiche di urxvt, poiché quello è il mio terminale, ma le informazioni saranno simili, se non uguali, ad altri terminali)
Entrambi setf
e setaf
forniscono un codice di escape diverso. Puoi visualizzarlo come segue:
# tput setf 2 | xxd
0000000: 1b5b 3332 6d .[32m
# tput setaf 2 | xxd
0000000: 1b5b 3338 3b35 3b32 6d .[38;5;2m
Dalla mia urxvt(7)
pagina man:
"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)
Quindi xxd
, dall'output sopra , possiamo vedere che tput setf 2
usa il Pm = 32
, che imposterà il colore su verde. tput setaf 2
d'altra parte usa il Pm = 38;5
, che ottiene rappresenta il codice colore definito in ISO 8613-6 (anche verde).
In ISO 8613-6, i colori 0x00-0x07 sono gli stessi dei colori standard e 0x08 - 0x0f sono i colori standard "grassetto". Quando arrivi a 0x10-0xff ottieni nuovi colori.
Rubato da 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)
pagina man che viene fornitancurses
per i dettagli.