setf
está limitado a apenas 8 cores. setaf
pode configurar até 256 cores.
(todas as informações a seguir serão específicas para o urxvt, já que este é o meu terminal, mas as informações serão semelhantes, se não as mesmas, a outros terminais)
Tanto setf
como setaf
fornecem um código de escape diferente. Você pode ver isso da seguinte maneira:
# tput setf 2 | xxd
0000000: 1b5b 3332 6d .[32m
# tput setaf 2 | xxd
0000000: 1b5b 3338 3b35 3b32 6d .[38;5;2m
Da minha página de urxvt(7)
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)
Assim, da saída xxd
acima, podemos ver que tput setf 2
usa o Pm = 32
, que definirá a cor como verde. tput setaf 2
por outro lado usa Pm = 38;5
, que gets representa o código de cores definido na ISO 8613-6 (também verde).
Na ISO 8613-6, as cores 0x00-0x07 são iguais às cores padrão e 0x08 - 0x0f são as cores "negrito" padrão. Quando chegar em 0x10-0xff, você obtém novas cores.
Roubado de 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