setf
está limitado a solo 8 colores. setaf
Puede configurar hasta 256 colores.
(toda la siguiente información será específica de urxvt, ya que es mi terminal, pero la información será similar, si no la misma, que otras terminales)
Ambos setf
y setaf
proporcionan un código de escape diferente. Puede ver esto en lo siguiente:
# tput setf 2 | xxd
0000000: 1b5b 3332 6d .[32m
# tput setaf 2 | xxd
0000000: 1b5b 3338 3b35 3b32 6d .[38;5;2m
Desde mi urxvt(7)
página de manual:
"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)
Por lo tanto, a partir del xxd
resultado anterior , podemos ver que tput setf 2
usa el Pm = 32
, que establecerá el color en verde. tput setaf 2
por otro lado usa Pm = 38;5
, que representa el código de color definido en ISO 8613-6 (también verde).
En ISO 8613-6, los colores 0x00-0x07 son los mismos que los colores estándar, y 0x08 - 0x0f son los colores estándar "negrita". Una vez que llegue a 0x10-0xff obtendrá nuevos colores.
Robado 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
terminfo(5)
página del manual que viene conncurses
para más detalles.