
Le plan maître ANSI pour le stylage du texte de terminal et la composition des couleurs
- 1 juin 2026
- 9 mins de lecture
- Débogage et troubleshooting , Qualité logicielle
Table des matières
Dans mon guide de base sur les couleurs ANSI, j’utilisais un modèle simple :
1\x1b[<style>;<text_color>;<bg_color>m
Dès que vous commencez à utiliser des couleurs étendues, comme \x1b[38;5;67m ou des valeurs RGB complètes, vous remarquez que ce modèle à “cases fixes” ne fonctionne plus.
C’est parce que les terminaux n’interprètent pas ces séquences comme des positions fixes. Ils traitent plutôt une séquence de paramètres, un paramètre après l’autre.
Ce mécanisme s’appelle Select Graphic Rendition (SGR).
Ce modèle permet de combiner styles, couleurs 256, et RGB TrueColor dans une seule séquence.
Modèle de paramètres SGR
La forme générale est :
\x1b[ <param> ; <param> ; <param> ... m
└─┬─┘ └──────────────┬──────────────┘└┬┘
Préfixe | octet final
|
zéro ou plusieurs paramètres numériques séparés par des points-virgules (vide = 0)
Le préfixe \x1b[ signale le début de la séquence.
Il est composé du caractère ESC (ASCII 27, représenté par \x1b) suivi de [, ce qui forme ensemble le Control Sequence Introducer (CSI).
L’octet final m indique que les paramètres concernent le style du texte.
Tout ce qui se trouve entre [ et m est interprété comme une liste de paramètres numériques, séparés par des points-virgules.
Le terminal les lit de gauche à droite, en combinant leurs effets dans un seul état de style. Les paramètres suivants écrasent les précédents lorsqu’ils modifient le même attribut. Cela rend SGR flexible dans l’ordre pour les paramètres indépendants, mais strictement séquentiel pour les instructions multi-parties comme les modes couleur.
La majorité des usages réels se répartissent en quatre catégories pratiques :
1-9→ Paramètres de style du texte (gras, faible, italique, etc.)Couleur de premier plan (texte) → Définit la couleur du texte via trois niveaux :
30–37,90–97→ Paramètres 16 couleurs standard38;5;<n>(38suivi de5puis d’un identifiant de couleur) → Palette 256 couleurs (mode 8 bits)38;2;<r>;<g>;<b>(38suivi de2puis de 3 paramètres RGB) → Palette TrueColor RGB (mode 24 bits)
Couleur d’arrière-plan → Définit le fond du texte via trois niveaux :
40–47,100–107→ Paramètres 16 couleurs standard48;5;<n>(48suivi de5puis d’un identifiant de couleur) → Palette 256 couleurs (mode 8 bits)48;2;<r>;<g>;<b>(48suivi de2puis de 3 paramètres RGB) → Palette TrueColor RGB (mode 24 bits)
Si vous avez besoin de la spécification complète, y compris les paramètres rares ou peu utilisés, la documentation des séquences de contrôle xterm est l’une des références les plus complètes et les plus utilisées.
Tip
Règles d’ordre des paramètres vs regroupement
Le terminal n’impose pas un ordre fixe pour les attributs indépendants.
Tant que vos paramètres n’entrent pas en conflit direct, ils peuvent être réordonnés librement. Tous les exemples suivants produisent exactement le même résultat (texte gras rouge sur fond bleu) :
\x1b[1;31;44m(style en premier)\x1b[44;31;1m(fond en premier)\x1b[31;1;44m(couleur en premier)
Cependant, il existe une exception stricte à cette flexibilité :
👉 Les paramètres multi-parties doivent rester groupés et dans le bon ordre.
Par exemple :
38;5;<n>(mode 256 couleurs)38;2;<r>;<g>;<b>(mode RGB)
Ils sont interprétés comme des instructions uniques avec sous-paramètres. Les séparer ou les réordonner casse la séquence.
Notes de compatibilité des terminaux
Tous les terminaux n’implémentent pas SGR de manière cohérente :
- Certains ignorent
italique (3)ouclignotement (5)(ex : PowerShell Windows ancien). gras (1)peut s’afficher comme une couleur plus lumineuse au lieu d’un poids de police plus fort (ex : anciens consoles Windows).- TrueColor (
38;2) n’est pas garanti sur les anciens environnements.
Ces différences viennent des variations entre émulateurs de terminal et leur niveau de support ANSI.
Si vous écrivez des outils CLI, supposez toujours un support partiel et testez sur :
- terminaux compatibles xterm
- Terminal macOS / iTerm2
- Windows Terminal / console héritée
Pour la portabilité, privilégiez :
- modes 16 couleurs ou 256 couleurs
- réinitialisations explicites (
0,22,24, etc.)
Warning
Dans certains environnements de programmation, le caractère ESC utilisé dans les séquences ANSI n’est pas écrit sous forme d’échappement littéral \x1b.
Il peut être généré explicitement comme une valeur de caractère.
Par exemple :
- PowerShell Windows n’interprète pas
\x1bdans les chaînes. Utilisez$([char]27)à la place. - C et Bash peuvent aussi utiliser
\033(octal) ou\e(fréquent dans les scripts shell). - JavaScript peut utiliser
\u001b(Unicode).
Cela impacte la construction des séquences ANSI dans le code, mais pas leur interprétation par le terminal une fois émises.
Le rendu ANSI dépend toujours de l’émulateur de terminal, et les anciens terminaux peuvent avoir un support limité ou inexistant des séquences SGR.
1. Commande de réinitialisation globale
Le paramètre le plus critique de tout le système SGR est le numéro 0.
Ce code ne modifie pas un style spécifique ; il efface complètement l’état de rendu interne du terminal.
0: Réinitialisation / Normal — supprime instantanément toutes les couleurs de premier plan, arrière-plans, graisses de texte et décorations, et restaure le profil par défaut du terminal.
Notez qu’une séquence sans paramètre (\x1b[m) équivaut à utiliser uniquement 0 (\x1b[0m).
Warning
Règle cruciale : l’écrasement de gauche à droite
Comme le terminal lit les paramètres séquentiellement de gauche à droite, la position de 0 change tout :
- Reset sûr + style :
\x1b[0;1;31mefface d’abord l’état précédent, puis applique du texte rouge gras. - Reset destructeur :
\x1b[1;31;0mactive gras et rouge, puis exécute immédiatement0, ce qui annule tout et produit du texte brut.
Note : 0 réinitialise tous les attributs, mais les codes individuels (22, 24, etc.) sont souvent plus sûrs si vous voulez préserver certaines propriétés.
2. Paramètres de style du texte (poids et effets)
Ces valeurs à un seul chiffre modifient l’apparence structurelle de la police. Vous pouvez les placer n’importe où dans la séquence.
| Valeur | Effet de style | Contexte technique |
|---|---|---|
1 | Gras | Augmente le poids ou l’intensité |
2 | Faible / atténué | Diminue l’intensité ; utile pour logs secondaires |
3 | Italique | Incline le texte (nécessite une police supportant l’italique) |
4 | Souligné | Ajoute une ligne sous le texte |
5 | Clignotement lent | Fait clignoter le texte (moins de 150 fois/minute) |
7 | Inversé / négatif | Inverse la couleur du texte et du fond |
8 | Masqué / caché | Cache le texte (utile pour mots de passe ou spoilers) |
9 | Barré | Trace une ligne au milieu du texte |
Vous pouvez facilement combiner les styles :
1\x1b[1;3;4m
donnera un texte gras, italique et souligné*.
Cependant, attention aux combinaisons modifiant l’intensité.
Par exemple, 2 (atténué) combiné avec 5 (clignotement) échoue souvent.
Les terminaux donnent généralement priorité à 2, ce qui désactive le clignotement.
Réinitialisations ciblées :
Pour désactiver un style sans tout réinitialiser (0), le standard SGR fournit des codes dédiés :
22: intensité normale (désactive gras1et atténué2)23: désactive italique (3)24: désactive soulignement (4)29: désactive barré (9)
3. Paramètres de couleur de premier plan et d’arrière-plan
3.1. Paramètres 16 couleurs standard
Ces codes donnent accès rapidement à la palette système par défaut du terminal.
Couleurs standard :
30–37: couleurs de texte (premier plan)40–47: couleurs de fond
Couleurs haute intensité (extensions aixterm) : Bien que non présentes dans le standard d’origine, ces extensions sont largement supportées.
90–97: couleurs de texte brillantes100–107: couleurs de fond brillantes
3.2. Palette 256 couleurs (mode 8 bits)
Pour accéder à davantage de nuances, vous devez indiquer au terminal que vous entrez dans un mode palette étendue via l’identifiant 5.
Cela consomme exactement trois paramètres :
- Couleur de texte :
38;5;<color_id> - Couleur de fond :
48;5;<color_id>
Répartition des identifiants de couleur (0 à 255)
0–15: couleurs système standard16–231: cube RGB 6×6×6 (216 nuances)232–255: dégradé de gris progressif du sombre au quasi-blanc
Voir la documentation de la palette 256 couleurs pour la répartition complète.
Décodage par le terminal :
\x1b[38;5;67m
| | └── 67 : récupère la couleur ID 67 (teinte bleu ardoise)
| └── 5 : active le mode couleur 8 bits
└── 38 : cible le premier plan (texte)
3.3. Palette TrueColor RGB (mode 24 bits)
Si vous développez un outil CLI moderne et avez besoin d’une précision absolue des couleurs pour respecter une charte graphique, vous pouvez fournir directement des canaux RGB bruts. Cela utilise l’identifiant de mode 2 et consomme cinq paramètres :
- Couleur de texte :
38;2;<r>;<g>;<b> - Couleur de fond :
48;2;<r>;<g>;<b>
Chaque paramètre <r>, <g>, <b> accepte une valeur de 0 à 255.
\x1b[38;2;255;100;0m
| | └── 255;100;0 : rouge pur (255), vert moyen (100), bleu nul (0)
| └── 2 : mode couleur 24 bits TrueColor
└── 38 : cible le premier plan (texte)
Voir le sélecteur de couleurs RGB pour référence.
Combinaison et chaînage de séquences complexes
Les paramètres SGR étant interprétés comme une seule séquence, vous pouvez combiner styles, couleurs de texte et d’arrière-plan dans un seul tag d’ouverture.
Modèle pratique : wrapper de style sécurisé
Un modèle courant dans les outils CLI est :
1\x1b[0;<styles>mVotre texte\x1b[0m
Cela garantit :
- aucune fuite de style depuis une sortie précédente
- aucune propagation vers le shell
Exemple
1\x1b[1;4;38;2;255;100;0;48;5;235m
Lecture de gauche à droite :
1;4;→ active gras et souligné38;2;255;100;0;→ définit une couleur de texte orange en TrueColor48;5;235→ définit un fond gris foncé via la palette 256 couleurs (index 235)
Bulletin d'information
Abonnez-vous à notre bulletin d'information et restez informé(e).
Erreur fréquente
1\x1b[31mErreur:
Sans réinitialisation, tout le texte suivant sera coloré.
Terminez toujours avec :
1\x1b[31mErreur:\x1b[0m
L’état SGR persiste jusqu’à modification explicite. Réinitialisez toujours (\x1b[0m) pour éviter les fuites de style.


