Pages

lundi 9 juin 2014

256 couleurs et plus dans la console

Note: ajout à la fin concernant le TrueColor.

J'ai récemment appris l'existence de 256 couleurs dans la console. À chaque fois que je cherche des infos sur les couleurs je tombe toujours sur les trucs basiques.

Mais récemment j'ai vu un peu trop de couleurs sur un screen. Ce qui m'a dirigé sur un dépôt contenant un $LS_COLORS particulièrement fourni.

En fait, il s'avère qu'en rajoutant extended dans la recherche "color shell" on puisse trouver quelque(s) ressource(s). J'aurais bien voulu y penser la semaine dernière, ça m'aurait évité de comprendre par tâtonnement...

Comme le lien ci-dessus est très bien expliqué je ne fais ici qu'un condensé. Je passe également sous silence les 8 et 16 couleurs.

Utilisation

<Esc>[FormatColorm

Le caractère <Esc> est obtenu avec les séquences suivantes:

  • \e
  • \033
  • \x1B

(Pour bash et echo, utiliser l'option -e pour interpréter les séquences backslashés.)

FormatColor correspond à la couleur de texte, de fond ou l'effet. Plusieurs peuvent être mis en les séparant par des ';'. L'ordre n'a pas d'importance.

CouleurTexteFond
Noir 30 40
Rouge 31 41
Vert 32 42
Jaune 33 43
Bleu 34 44
Magenta 35 45
Cyan 36 46
Gris clair 37 47

Les couleurs précédentes peuvent être configurées sur certains shells.

EffetCodeCode annulation
normal0
gras121
italique323
souligné424
clignotant525
inversé727
Couleur supplémentaire en 16 couleurs (si supporté)
CouleurTexteFond
Gris foncé 90 40
Rouge clair 91 101
Vert clair 92 102
Jaune clair 93 103
Bleu clair 94 104
Magenta clair 95 105
Cyan clair 96 106
Blanc 97 107

Couleur étendue avec X allant de 0 à 255 inclus:

  • Texte: 38;5;X
  • Fond: 48;5;X

Par contre, outre le fait que les couleurs étendues ne fonctionnent pas partout, elles peuvent allègrement pourrir le rendu. Pour retrouver un rendu normal: `tput reset`. À essayer sur les tty, c'est marrant ^^.

Le bout de code ci-dessous permet de visualiser la palette de couleur.

for m in 38 48 ; do
  n=0
  for l in {0..31} ; do
    for c in {0..7} ; do
      echo -ne "\033[$m;5;$n;1m$n\e[0m\t"
      ((++n))
    done
    echo
  done
done

TrueColor

La console supporte aussi les couleurs hexadécimal.

  • \e[48;2;$r;$g;${b}m pour le fond
  • \e[38;2;$r;$g;${b}m pour le texte

$r, $g et $b sont des valeurs allants de 0 à 255. Encore une fois, les effets comme gras, italique, etc, peuvent être ajoutés (echo -e '\e[38;2;205;110;0;3mplop' pour un texte couleur cuivre et italique).

1 commentaire:

Unknown a dit…

Récemment j'ai justement ajouté dans WeeChat le support des couleurs "ANSI" pour le résultat de commandes externes exécutées avec /exec (uniquement dans la version de dev).
La fonction de conversion peut convertir vers les couleurs internes WeeChat, ou bien les couleurs IRC (pour envoyer à quelqu'un via IRC).
Sinon WeeChat supporte 256 couleurs depuis plusieurs années, et c'est plus sympa que les 8 ou 16 couleurs de base du terminal :)