El comando tput
tiene dos opciones diferentes para configurar el color setf
y setaf
, sin embargo, ambas parecen funcionar bien en mi computadora:
$ tput setf 2 && echo 'Hello world!'
$ tput setaf 2 && echo 'Hello world!'
Parece haber una dualidad similar con setb
y setab
.
¿Cuál es la diferencia entre las dos opciones?
terminfo(5)
página del manual que viene conncurses
para más detalles.Respuestas:
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
ysetaf
proporcionan un código de escape diferente. Puede ver esto en lo siguiente:Desde mi
urxvt(7)
página de manual:Por lo tanto, a partir del
xxd
resultado anterior , podemos ver quetput setf 2
usa elPm = 32
, que establecerá el color en verde.tput setaf 2
por otro lado usaPm = 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 :
fuente
tput
Sin embargo, no parece utilizar realmente los rangos de secuencia de colores ANSI disponibles. Para cualquieran > 7
,tput setaf n
no tiene ningún efecto en el texto en mi terminal.tput setf 2
ytput setaf 2
son ambas.[32m
.Del manual:
man 5 terminfo
Entonces la respuesta es: setaf significa Establecer primer plano ANSI , es decir, usar secuencias de escape ANSI, y setf significa Establecer primer plano (usando algunas secuencias de escape distintas de ANSI).
fuente
Los dos conjuntos de capacidades utilizan un orden diferente para el rojo / azul en la lista de colores ANSI.
Como se señaló, se explica en la página del manual de ncurses terminfo . Algo de historia:
setf/setb
.Sf/Sb
códigos correspondientes en lugar desetaf/setab
(yAF/AB
para termcap), pero usando las secuencias de escape ANSI (que funcionan con termcap) en lugar de usar las capacidades correctas con las capacidades ANSI.Los ANSI
setaf/setab
se agregaron bastante tarde en la historia de terminfo, como se puede deducir de su posición en la lista de cadenas de capacidades . Tenga en cuenta que se agregaron por etapas durante algunos años, y algunos sistemas difirieron (ncurses tiene algunos ejemplos comoCaps.hpux
permitir que se compile para que coincida con esos sistemas). Eso explica el pequeño número de descripciones de terminales útiles que podrían usarse como referencia.Con todo eso,
setf/setb
no se notó de inmediato el hecho de que las cadenas existentes no coincidían con el orden ANSI, lo que condujo a algunas correcciones en 1998 , y las preguntas frecuentes ¿Por qué se intercambian rojo / azul? .Si bien fue posible extender la secuencia ANSI de 8 colores a 16 colores (suponiendo que los colores 8-15 fueran versiones más brillantes de 0-7), no había una buena razón para inventar un esquema que se extendiera más
setf/setb
allá de los primeros 16 colores.fuente