La commande tput
a deux options différentes pour définir la couleur, setf
et setaf
pourtant, les deux semblent fonctionner très bien sur mon ordinateur:
$ tput setf 2 && echo 'Hello world!'
$ tput setaf 2 && echo 'Hello world!'
Il semble y avoir une dualité similaire avec setb
et setab
.
Quelle est la différence entre les deux options?
terminfo(5)
page de manuel fournie avecncurses
pour plus de détails.Réponses:
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
etsetaf
fournir un code d'échappement différent. Vous pouvez le voir de la manière suivante:Depuis ma
urxvt(7)
page de manuel:Ainsi, à partir de la
xxd
sortie ci-dessus , nous pouvons voir quetput setf 2
utilise lePm = 32
, qui mettra la couleur au vert.tput setaf 2
d'autre part utilise lePm = 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 :
la source
tput
ne semble pas utiliser réellement les plages de séquences de couleurs ANSI disponibles, cependant. Pour toutn > 7
,tput setaf n
n'a aucun effet sur le texte de mon terminal.tput setf 2
ettput setaf 2
sont les deux.[32m
.Du manuel:
man 5 terminfo
Donc, la réponse est: setaf signifie Set ANSI foreground , c'est-à-dire utiliser des séquences d'échappement ANSI, et setf signifie Set Foreground (en utilisant des séquences d'échappement autres que ANSI).
la source
Les deux ensembles de capacités utilisent un ordre différent pour le rouge / bleu dans la liste des couleurs ANSI.
Comme indiqué, il est expliqué dans la page de manuel ncurses terminfo . Un peu d'histoire:
setf/setb
.Sf/Sb
codes correspondants plutôt quesetaf/setab
(etAF/AB
pour termcap) - mais en utilisant les séquences d'échappement ANSI (qui fonctionnent avec termcap) plutôt que d'utiliser les capacités correctes avec les capacités ANSI.Les ANSI
setaf/setab
ont été ajoutés assez tard dans l'histoire de terminfo, comme vous pouvez le déduire de leur position dans la liste des chaînes de capacités . Gardez à l'esprit que ceux-ci ont été ajoutés par étapes sur quelques années et que certains systèmes différaient (ncurses a quelques exemplesCaps.hpux
pour permettre de le compiler pour correspondre à ces systèmes). Cela explique le petit nombre de descriptions de terminaux utiles qui peuvent être utilisées comme référence.Avec tout cela, le fait que les
setf/setb
chaînes existantes ne correspondent pas à l'ordre ANSI n'a pas été immédiatement remarqué, ce qui a conduit à quelques correctifs en 1998 , et à la FAQ Pourquoi les rouges / bleus sont-ils interchangés? .S'il était possible d'étendre la séquence ANSI 8 couleurs à 16 couleurs (en supposant que les couleurs 8-15 étaient des versions plus lumineuses de 0-7), il n'y avait aucune bonne raison pour inventer un schéma pour s'étendre au-
setf/setb
delà des 16 premières couleurs.la source