Aller au contenu

Codes d'échappement ANSI

Un code d'échappement ANSI est une courte séquence de caractères qu'un programme envoie au terminal pour lui ordonner quelque chose d'autre que d'afficher ces caractères — colorer le texte suivant en rouge, déplacer le curseur de deux lignes vers le haut, effacer l'écran. Le terminal absorbe la séquence et l'exécute, ce qui est pourquoi un fichier journal rempli de codes ressemble à du bruit quand vous l'ouvrez dans un éditeur.

Chaque code ci-dessous commence par l'octet d'échappement et, sauf exception, une accolade ouvrante. La colonne paramètre indique la partie entre l'accolade et la dernière lettre, c'est ce que vous assemblez dans le code ; la première colonne affiche la séquence complète comme vous l'écririez dans un shell.

Le support varie selon les terminaux, et cette page l'indique où c'est important. Les huit couleurs de base et le gras fonctionnent partout ; le clignotement, le double soulignement et true color ne fonctionnent pas.

Anatomie d'une séquence

6

Chaque code sur cette page a la même forme : l'octet d'échappement, une accolade ouvrante, des paramètres, et une lettre qui dit quoi en faire.

SéquenceParamètreEffet
\e0x1BL'octet d'échappement qui commence chaque séquenceÉcrit \e dans un shell, \033 en C, \x1b dans la plupart des langages et \u001b en JSON et Java.
\e[CSIControl Sequence Introducer — ouvre une commande paramétrée
\e[<n>mmSelect Graphic Rendition : tout ce qui concerne la couleur et le style finit par m
\e[1;4;31m1;4;31Plusieurs paramètres à la fois, séparés par des points-virgulesGras, souligné et rouge dans une seule séquence — plus court que trois séparées et effet identique.
\e[0m0Efface tous les attributs pour revenir au défaut du terminalÉmettez ceci à la fin de la sortie coloriée. Un programme qui s'arrête sans l'envoyer laisse l'invite de l'utilisateur coloriée.
\e]8;;URL\e\\text\e]8;;\e\\OSC 8Un lien hypertexte cliquable, dans les terminaux qui le supportentUne séquence OSC plutôt que CSI, et terminée par ESC \ au lieu d'une lettre.

Attributs de texte

14

Le support est inégal en dessous des cinq premiers. Le clignotement est ignoré presque partout, et quelques terminaux affichent le faiblissement et l'italique de la même façon.

SéquenceParamètreEffet
\e[1m1Gras ou brillant
\e[2m2Faible
\e[3m3Italique
\e[4m4Soulignement
\e[5m5ClignotementLargement ignoré ; la plupart des terminaux modernes l'affichent comme du texte normal.
\e[7m7Inverse : échange le premier plan et l'arrière-plan
\e[8m8Caché : le texte existe mais n'est pas dessiné
\e[9m9Barré
\e[21m21Double soulignementCertains terminaux lisent 21 comme « annuler gras ».
\e[22m22Intensité normale : annule gras et faible
\e[23m23Annule italique
\e[24m24Annule soulignement
\e[27m27Annule inverse
\e[29m29Annule barré

Couleur du texte

17

Les huit couleurs standard et leurs homologues brillants. Ce que le lecteur voit vraiment dépend du thème du terminal — « rouge » est une position dans une palette, pas une valeur hex.

SéquenceParamètreEffet
\e[30m30Texte noir
\e[31m31Texte rouge
\e[32m32Texte vert
\e[33m33Texte jaune
\e[34m34Texte bleu
\e[35m35Texte magenta
\e[36m36Texte cyan
\e[37m37Texte blanc
\e[39m39Retour à la couleur de texte par défaut
\e[90m90Texte noir brillant
\e[91m91Texte rouge brillant
\e[92m92Texte vert brillant
\e[93m93Texte jaune brillant
\e[94m94Texte bleu brillant
\e[95m95Texte magenta brillant
\e[96m96Texte cyan brillant
\e[97m97Texte blanc brillant

Couleur d'arrière-plan

17

Même palette décalée de dix. Un code d'arrière-plan colore la cellule derrière le texte et reste en vigueur jusqu'à réinitialisation.

SéquenceParamètreEffet
\e[40m40Arrière-plan noir
\e[41m41Arrière-plan rouge
\e[42m42Arrière-plan vert
\e[43m43Arrière-plan jaune
\e[44m44Arrière-plan bleu
\e[45m45Arrière-plan magenta
\e[46m46Arrière-plan cyan
\e[47m47Arrière-plan blanc
\e[49m49Retour à l'arrière-plan par défaut
\e[100m100Arrière-plan noir brillant
\e[101m101Arrière-plan rouge brillant
\e[102m102Arrière-plan vert brillant
\e[103m103Arrière-plan jaune brillant
\e[104m104Arrière-plan bleu brillant
\e[105m105Arrière-plan magenta brillant
\e[106m106Arrière-plan cyan brillant
\e[107m107Arrière-plan blanc brillant

256 couleurs et true color

4

Deux extensions du même mécanisme SGR. Les deux sont largement mais pas universellement supportées ; un terminal qui ne les comprend pas ignore généralement la séquence au lieu de l'imprimer.

SéquenceParamètreEffet
\e[38;5;<n>m38;5;nTexte en couleur palette n, 0–2550–15 sont les seize ci-dessus, 16–231 un cube couleur 6×6×6, 232–255 une rampe niveaux de gris.
\e[48;5;<n>m48;5;nArrière-plan en couleur palette n, 0–255
\e[38;2;<r>;<g>;<b>m38;2;r;g;bTexte en couleur 24-bit exacte
\e[48;2;<r>;<g>;<b>m48;2;r;g;bArrière-plan en couleur 24-bit exacte

Mouvements du curseur

11

Les mouvements ne font pas défiler et ne reviennent pas à la ligne : un curseur déjà en haut de l'écran ignore une demande d'aller plus haut.

SéquenceParamètreEffet
\e[<n>AAVers le haut de n lignes
\e[<n>BBVers le bas de n lignes
\e[<n>CCVers la droite de n colonnes
\e[<n>DDVers la gauche de n colonnes
\e[<n>EEVers le bas de n lignes, au début de la ligne
\e[<n>FFVers le haut de n lignes, au début de la ligne
\e[<n>GGÀ la colonne n de la ligne actuelle
\e[<row>;<col>HHÀ une ligne et colonne absolues, comptées à partir de 1
\e[ssMémorise la position du curseur
\e[uuRevient à la position mémorisée
\e[6n6nDemande au terminal où se trouve le curseurLe terminal répond sur l'entrée standard sous la forme \e[<ligne>;<col>R — la seule séquence ici qui produit une réponse.

Effaçage

7

L'effaçage écrit des espaces avec la couleur d'arrière-plan actuelle ; il ne déplace pas le curseur.

SéquenceParamètreEffet
\e[0J0JEfface du curseur à la fin de l'écran
\e[1J1JEfface du début de l'écran au curseur
\e[2J2JEfface tout l'écranLe curseur reste où il était, c'est pourquoi c'est généralement associé à \e[H.
\e[3J3JEfface aussi l'historique de défilement
\e[0K0KEfface du curseur à la fin de la ligne
\e[1K1KEfface du début de la ligne au curseur
\e[2K2KEfface toute la ligne\r\e[2K est le moyen habituel de redessiner une ligne de progression sur place.

Modes du terminal

8

Modes privés, marqués par un point d'interrogation. Ils changent le comportement du terminal plutôt que l'apparence d'un morceau de texte, et chacun doit être réactivé avant que le programme se termine.

SéquenceParamètreEffet
\e[?25l?25lCache le curseur
\e[?25h?25hAffiche le curseur
\e[?1049h?1049hBascule vers l'écran alternatifCe qu'un programme plein écran utilise pour que l'historique du shell survive en dessous.
\e[?1049l?1049lRevient à l'écran principal
\e[?7h?7hRevenir à la ligne pour les longues lignes au bord droit
\e[?7l?7lLaisse les longues lignes déborder au bord droit
\e[?2004h?2004hActive le collage entre crochetsLe texte collé arrive enveloppé dans \e[200~ et \e[201~, pour que le shell distingue la saisie du collage.
\e[?2004l?2004lDésactive le collage entre crochets

FAQ

Pourquoi ma sortie reste-t-elle coloriée après la fin du programme ?
Parce que rien ne l'a réinitialisée. Un code couleur reste en vigueur jusqu'à ce qu'un autre le remplace, donc un programme qui se termine au milieu d'une couleur laisse le shell avec une invite coloriée. Imprimez \e[0m avant de quitter — y compris sur le chemin d'erreur, qui est celui qu'on oublie.
Quelle est la différence entre \e, \033 et \x1b ?
Aucune. Tous les trois sont le même octet 0x1B, écrit à la manière d'un langage particulier : \e en bash et zsh, \033 en C et echo -e, \x1b en Python, Go, Rust et JavaScript, \u001b là où seul un échappement Unicode est autorisé, comme JSON et Java.
Comment les supprimer d'un fichier journal ?
Collez-le dans le supprimeur de codes ANSI sur ce site. Il supprime les séquences de couleur, curseur et mode, et peut aussi convertir les couleurs en HTML ou Markdown au lieu de les jeter, ce que vous voulez si l'intérêt du journal était la mise en évidence.
Dois-je coder les couleurs en dur ou utiliser une bibliothèque ?
Pour plus que quelques lignes, utilisez une bibliothèque — elle vérifie si la sortie est vraiment un terminal. Les codes couleur écrits dans un tuyau ou un fichier finissent dans le fichier, et c'est ainsi que les journaux de compilation acquièrent du bruit.
Le gras est-il la même chose que la couleur brillante ?
Historiquement oui, et sur certains terminaux toujours. Le code 1 a été défini comme gras, mais beaucoup de terminaux l'ont implémenté en passant à la moitié lumineuse de la palette, donc le rouge gras et le rouge brillant peuvent se ressembler. La plage 90–97 existe pour que vous puissiez demander la brillance sans demander le gras.