Je suis en train de coloriser mon terminal PS1
.
Je règle des variables de couleur en utilisant tput
; par exemple, voici le violet:
PURPLE=$(tput setaf 125)
Question:
Comment trouver les codes de couleurs (par exemple 125
) d'autres couleurs?
Existe-t-il un guide de couleurs / aide-mémoire quelque part?
Je ne sais pas ce que 125
c'est… Y a-t-il un moyen de prendre une couleur hexadécimale et de la convertir en un nombre setaf
utilisable?
Réponses:
Le nombre de couleurs disponibles pour tput est donné par
tput colors
.Pour voir les 8 couleurs de base (telles qu’utilisées
setf
dans les terminaux urxvt etsetaf
xterm):Et généralement nommé comme ceci:
Pour voir les 256 couleurs étendues (utilisées par
setaf
dans urxvt):Si vous voulez des nombres et une sortie ordonnée:
Les 16 millions de couleurs nécessitent un peu de code (certaines consoles ne peuvent pas le montrer).
La base est:
fb
estfront/back
ou3/4
.Un simple test de la capacité de votre console à présenter autant de couleurs est le suivant:
Il présentera une ligne rouge avec un très petit changement de ton de gauche à droite. Si cette petite modification est visible, votre console est capable de 16 millions de couleurs.
Chacune
r
,g
etb
correspond à une valeur comprise entre 0 et 255 pour les couleurs RVB (rouge, vert et bleu).Si votre type de console supporte cela, ce code créera une table de couleurs:
Pour convertir une valeur de couleur hexadécimale en un indice de couleur (le plus proche) compris entre 0 et 255:
Utilisez-le comme:
Pour trouver le numéro de couleur utilisé dans le format de couleurs HTML :
Utilisez-le comme ("basique" est les 16 premières couleurs, "couleur" est le groupe principal, "gris" est les dernières couleurs grises):
la source
fromhex
. Merci encore! Aussi, j'ai ajouté un chèque pour le#
. Retour d'information?hex=${1#"#"}
. Il n’enlèvera rien si$1
n’a pas d’a#
, et le supprime s’il existe. Voir mon code mis à jour.\e[0;%s8;2;%s;%s;%sm
ne me donne pas 16 millions de couleurs, mais uniquement la couleur de la palette de 240 couleurs la plus proche de la RVB demandée.La réponse courte est que vous pouvez trouver sur le Web des tables de couleurs et les faire correspondre au numéro de couleur.
La réponse longue est que le mappage correct dépend du terminal -
Le
125
est un paramètre pour une séquence d'échappement appeléesetaf
dans la description du terminal.tput
n'attache aucune signification particulière au nombre. Cela dépend en fait de l'émulateur de terminal particulier.Il y a quelque temps, l'ANSI avait défini des codes pour 8 couleurs et il existait deux systèmes de numérotation. Les deux sont vus dans certaines descriptions de terminal comme les paires
setf/setb
ousetaf/setab
. Puisque ce dernier a la connotation de "couleurs ANSI", vous verrez qu'il est utilisé plus souvent. L'ancien (setf / setb) changeait l'ordre du rouge / bleu comme indiqué dans la FAQ ncurses Pourquoi les couleurs rouge / bleu sont-elles échangées? , mais dans les deux cas, le schéma a été établi pour ne numéroter que les couleurs. Il n'y a pas de relation prédéfinie entre ces numéros et le contenu RVB.Pour les émulateurs de terminal spécifiques, il existe des palettes de couleurs prédéfinies qui peuvent être énumérées assez facilement - et peuvent être programmées à l'aide de ces séquences d'échappement. Il n'y a pas de normes pertinentes, et vous verrez des différences entre les émulateurs de terminaux, comme indiqué dans la FAQ de xterm. Je n'aime pas cette nuance de bleu .
Cependant, la convention est souvent confondue avec les normes. Lors du développement de xterm au cours des 20 dernières années, il a incorporé les couleurs ANSI (8), adapté la
aixterm
fonctionnalité (16) couleurs, ajouté des extensions pour les couleurs 88 et 256 couleurs. Une grande partie de celle-ci a été adoptée par d'autres développeurs pour différents émulateurs de terminaux. Ceci est résumé dans la FAQ de xterm Pourquoi ne pas associer "xterm" à "xterm-256color"? .Le code source xterm comprend des scripts permettant de démontrer les couleurs, par exemple, en utilisant les mêmes séquences d'échappement que celles
tput
utilisées.Vous pouvez également trouver cette question / réponse utile: Valeurs RVB des couleurs de l’indice de couleurs étendu Ansi (17-255)
la source
L'
tput
utilitaire utilise une table de conversion de 256 couleurs pour imprimer des séquences d'échappement ANSI 8 bits (en commençant par Escet[
) qui utilise les fonctionnalités du terminal . Ces séquences de contrôle peuvent donc être interprétées en tant que couleurs. Ce sont des ensembles prédéfinis de 256 couleurs couramment utilisées sur les cartes graphiques.Pour imprimer toutes les 256 couleurs du terminal, essayez la ligne suivante:
Astuce: Ajouter
| column
à la liste des colonnes.Cette table de recherche de 256 couleurs peut également être trouvée sur la page Wikipedia comme suit:
la source
Avec zsh et dans une
xterm
borne -comme (xterm
et desvte
terminaux à base commegnome-terminal
,xfce4-terminal
... au moins), vous pouvez le faire:L'équivalent bash:
(vous voulez que la séquence d'échappement interroge la couleur à envoyer après que la discipline de terminal
echo
est désactivée (avec-s
) sinon la réponse serait affichée par la discipline de ligne la moitié du temps, d'où son envoi dans le cadre de l'read
invite (var?prompt
en zsh comme en ksh,-p prompt
en bash)).pour obtenir la définition de la couleur 125 (ici une spécification RVB, chaque nombre représentant l’intensité des composantes Rouge, Vert et Bleu sous forme de nombre hexadécimal compris entre 0 et FFFF).
Vous pouvez faire la même chose pour les 16 premières couleurs avec la
xtermcontrol
commande:la source
tput colors
ne signale que8
si le terminal est capable de présenter 256 couleurs. En outre, xterm-color (Konsole)tput colors
ne signale8
que si ce terminal est tout à fait capable de présenter 16 millions de couleurs (et toutes les 256 couleurs bien sûr). Et non, pas de tmux ou d’écran qui puisse "colorer" :-) (changer) les résultats (j’étais au courant de ce détail). En bref: votre code peut échouer sur certains terminaux / consoles.Couleurs ANSI sur terme de console
Selon le protocole utilisé par votre console, la séquence peut être:
\e[38;5;XXXm
ou\e[3XXXm
oùXXX
correspond au numéro ansi.Pour vous assurer d'utiliser la bonne séquence ANSI, vous devez utiliser
tput
.En ce qui concerne le code d'échappement ANSI de Wikipedia , j'ai écrit ceci:
Pourrait rendre quelque chose comme:
... Ensuite, parce que je déteste courir plus de 200 fourches dans un petit script, j'ai écrit ceci:
Avec seulement 1 fourchette! Même résultat, mais beaucoup plus rapide!
la source