FreeToGenerate.com

Rend une sortie de terminal collée, décode chacune de ses séquences d’échappement et nomme la norme dont vient chaque code — car ils viennent de trois. Rien n’est envoyé.

Collez n’importe quoi contenant des séquences d’échappement : un log de build, un git diff, la sortie colorée de tests. Rien ne quitte votre navigateur.

Essayez :

Ce que cela donne

PASS  src/parse.test.ts
FAIL  src/render.test.ts
  3 passed, 1 failed

Les seize premières couleurs sont celles que fixe le thème de votre terminal : ceci montre donc un jeu courant, pas la réponse. À partir de 16, tout est fixé par l’arithmétique et exact.

Les codes qu’elle contient

CodeDéfini parSignifie
1ECMA-48gras
32ECMA-48vert
0ECMA-48tout réinitialiser
31ECMA-48rouge
38ISO 8613-6couleur d’avant-plan étendue
2ECMA-48atténué

Ce qu’il faut savoir de cette sortie

  • Les codes 38, 48 et 58 viennent d’ISO 8613-6, pas d’ECMA-48. xterm les décrit comme marqués dans la cinquième édition d’ECMA-48 comme réservés à une normalisation future : les codes derrière toute couleur 256 et toute couleur vraie sont donc, dans la norme que tout le monde cite, réservés plutôt que définis.

  • Cette couleur étendue emploie des points-virgules entre ses sous-paramètres. La référence d’xterm appelle cela la forme héritée et le deux-points la forme standard — mais le point-virgule est ce qu’émet chaque outil, et ce que les moteurs de rendu répandus savent lire.

Construisez-en une, dans les deux écritures

Deux-points : ce que la référence appelle standard
\e[1;38:2::255:135:0m
Points-virgules : ce qu’émettent les outils
\e[1;38;2;255;135;0m

La même couleur écrite comme le fait la référence et comme le fait tout le reste. Aucune n’est fautive ; elles ne sont simplement pas interchangeables, et l’une des deux ne survivra pas au moteur de rendu où vous la collerez.

Les 55 codes

CodeDéfini parSignifie
0ECMA-48tout réinitialiser
1ECMA-48gras
2ECMA-48atténué
3ECMA-48italique
4ECMA-48souligné
5ECMA-48clignotant
6ECMA-48clignotement rapide
7ECMA-48intervertir avant-plan et fond
8ECMA-48masquer
9ECMA-48barré
21ECMA-48souligné double
22ECMA-48ni gras ni atténué
23ECMA-48non italique
24ECMA-48non souligné
25ECMA-48non clignotant
27ECMA-48non interverti
28ECMA-48non masqué
29ECMA-48non barré
30ECMA-48noir
31ECMA-48rouge
32ECMA-48vert
33ECMA-48jaune
34ECMA-48bleu
35ECMA-48magenta
36ECMA-48cyan
37ECMA-48blanc
38ISO 8613-6couleur d’avant-plan étendue
39ECMA-48couleur d’avant-plan par défaut
40ECMA-48noir
41ECMA-48rouge
42ECMA-48vert
43ECMA-48jaune
44ECMA-48bleu
45ECMA-48magenta
46ECMA-48cyan
47ECMA-48blanc
48ISO 8613-6couleur de fond étendue
49ECMA-48couleur de fond par défaut
58ISO 8613-6couleur de soulignement étendue
90aixtermnoir vif
91aixtermrouge vif
92aixtermvert vif
93aixtermjaune vif
94aixtermbleu vif
95aixtermmagenta vif
96aixtermcyan vif
97aixtermblanc vif
100aixtermnoir vif
101aixtermrouge vif
102aixtermvert vif
103aixtermjaune vif
104aixtermbleu vif
105aixtermmagenta vif
106aixtermcyan vif
107aixtermblanc vif

55 / 55 affichés

Regroupés par la norme qui définit chacun, la colonne que tout tableau publié aplatit.

Tout ceci s’exécute dans votre navigateur. Rien n’est envoyé.

Aussi disponible en : English · Español · Português · العربية

Codes d’échappement ANSI : ce que fait chacun, et quelle norme le définit

Collez une sortie colorée pour la voir rendue et expliquée, ou composez une séquence et regardez diverger les deux écritures d’une même couleur.

Ce que sont les codes d’échappement ANSI

Une séquence d’échappement est une suite de caractères ordinaires que le terminal lit comme une instruction au lieu de l’afficher. Presque toutes celles que l’on rencontre commencent par le caractère d’échappement suivi d’un crochet ouvrant, puis quelques nombres, puis une lettre qui dit ce que ces nombres voulaient dire. Quand cette lettre finale est m, la séquence est SGR — Select Graphic Rendition — et les nombres sont les codes de couleur et d’attribut que tout le monde appelle codes de couleur ANSI.

Le mécanisme est simple et à état : un code active quelque chose, et cela reste actif jusqu’à ce qu’un autre le désactive. C’est pourquoi oublier la réinitialisation à la fin d’une chaîne colorée laisse le reste de l’invite de la mauvaise couleur, et pourquoi ces codes s’écrivent presque toujours par paires.

Ce qui n’est pas simple, c’est leur provenance. Tout ce qui se publie à leur sujet les présente en un seul tableau plat, et ce sont trois normes sous une même syntaxe. Les couleurs et attributs ordinaires relèvent d’ECMA-48. Les couleurs vives sont une extension de l’aixterm d’IBM. Les codes 256 couleurs et couleur vraie viennent d’ISO 8613-6, et la référence d’xterm les décrit comme marqués dans la cinquième édition d’ECMA-48 comme réservés à une normalisation future : les deux codes auxquels on recourt le plus sont donc, dans la norme que tout le monde cite à leur sujet, réservés plutôt que définis.

Comment s’en servir

  1. Collez une sortie de terminal, ou prenez un exemple. Les exemples couvrent un log de build, la même couleur écrite de façon standard, des vives face à des ordinaires, une séquence entièrement portable, et une comportant deux défauts.
  2. Lisez l’aperçu et le tableau des codes. L’aperçu montre ce qu’un terminal dessinerait. En dessous, chaque code SGR trouvé est listé avec la norme qui le définit et ce qu’il signifie, et les remarques expliquent ce qu’il faut savoir de ce que vous avez collé.
  3. Composez-en une et comparez les écritures. Activez gras, italique et souligné, choisissez une couleur, et la même instruction apparaît deux fois : une fois avec des deux-points, une fois avec des points-virgules. Elles veulent dire la même chose et ne sont pas interchangeables.

Le séparateur que personne n’écrit de façon standard

Les codes de couleur étendue prennent des sous-paramètres : 38 annonce une couleur d’avant-plan, puis 5 et un index dans la palette de 256, ou 2 et trois valeurs de canal pour la couleur vraie. La référence d’xterm écrit ces sous-paramètres séparés par des deux-points, et indique clairement qu’elle admet aussi bien les deux-points, qu’elle qualifie de standard, que les points-virgules, qu’elle qualifie d’hérités. Tous les tutoriels, toutes les bibliothèques et tous les outils émettent la forme à points-virgules.

Ce n’est pas affaire de goût, et le coût retombe sur celle que vous choisissez. En lisant le code des deux moteurs de rendu JavaScript les plus employés pour cela, tous deux découpent les paramètres au seul point-virgule — l’un par un découpage direct, l’autre en rognant les points-virgules finaux puis en découpant de même — et aucun ne contient de deux-points où que ce soit dans son traitement des paramètres. L’écriture que la référence qualifie de standard est donc exactement celle que ces bibliothèques laissent tomber en silence : la couleur disparaît et le texte s’affiche sans style, sans la moindre erreur nulle part.

Il y a une seconde victime sur la même ligne. La forme à deux-points de la couleur vraie porte un identifiant d’espace colorimétrique avant la valeur de rouge, habituellement écrit vide, de sorte que l’écriture complète comporte un trou qui ressemble à une faute de frappe. La forme à points-virgules n’a aucune place pour ce champ, et c’est pourquoi presque personne ne sait qu’il existe.

Le résumé honnête est qu’aucune écriture n’est à la fois standard et largement prise en charge, et c’est pourquoi cette page vous dit quel compromis fait votre séquence plutôt que de désigner l’une des deux comme la bonne. Si vous écrivez pour un terminal, la forme à points-virgules est celle qu’attendent les terminaux. Si vous écrivez pour une spécification, la forme à deux-points est celle qu’elle énonce.

Ce que cette page ne peut pas vous dire

Les seize premières couleurs ne sont fixées par rien. Les codes 30 à 37 nomment une couleur, pas une valeur : à quoi ressemble réellement le rouge dépend du thème du terminal de celui qui regarde, et la même sortie donne deux images différentes dans deux fenêtres voisines. L’aperçu emploie ici un jeu courant pour qu’il y ait quelque chose à voir : c’est une démonstration, pas une réponse. À partir de l’index 16, c’est l’inverse — le cube de 216 couleurs et la rampe de 24 gris sont définis par l’arithmétique, donc exacts.

La formule sur la réservation en vue d’une normalisation future est la caractérisation d’ECMA-48 par xterm, non une citation d’ECMA-48. ECMA-48 est publiée sous forme de PDF qui a résisté à l’extraction de texte à chaque tentative faite ici : plutôt que de paraphraser un document qui n’a pas pu être lu, l’attribution reste là où elle est vérifiable, auprès de la référence qui avance l’affirmation.

Seul SGR est interprété. Une séquence qui déplace le curseur, efface l’écran ou fixe le titre de la fenêtre est reconnue, signalée, puis laissée telle quelle : la rendre reviendrait à simuler un terminal entier plutôt qu’à expliquer un code de couleur. Les séquences qui ne commencent pas par le couple échappement et crochet — les anciens contrôles à un seul caractère, et les commandes au système d’exploitation qui fixent un titre — sortent de ce que ceci lit.

Enfin, ceci décrit ce que signifient les codes, non ce qu’en fait votre terminal. Le clignotement est presque partout ignoré. L’atténué est ignoré par les uns et rendu comme une couleur plus terne par les autres. Le souligné double est inégal. Un terminal a le droit de ne rien faire d’un code qu’il n’implémente pas, et la plupart font discrètement exactement cela.

Pourquoi est-ce gratuit ?

Analyser des séquences d’échappement relève du traitement de chaînes, et cela s’exécute dans votre navigateur. Aucun serveur n’intervient : il n’y a donc rien à facturer ni de compte à créer.

Rien n’est envoyé, ce qui compte ici plus qu’ailleurs : une sortie de terminal collée contient souvent des chemins, des noms de machines et, à l’occasion, un jeton. Rechargez la page et elle aura tout oublié.