Ga naar inhoud

ANSI-escape codes

Een ANSI-escapecode is een korte reeks tekens die een programma afdrukt om de terminal iets anders te laten doen dan die tekens weergeven — volgende woorden rood maken, cursor twee regels omhoog verplaatsen, scherm wissen. De terminal verwerkt de reeks en voert deze uit, daarom ziet een logbestand vol ermee eruit als ruis als je het in een editor opent.

Elke code hieronder begint met de escape-byte en, met één uitzondering, een openingshaakje. De parameterkolom geeft het gedeelte tussen het haakje en de laatste letter aan, dit is wat je in code samenstelt; de eerste kolom toont de volledige reeks zoals je deze in een shell zou schrijven.

Ondersteuning verschilt per terminal, en deze pagina vermeldt het waar relevant. De acht basiskleuren en vet werken overal; knipperend, dubbel onderstrepen en true color niet.

Anatomie van een reeks

6

Elke code op deze pagina heeft dezelfde vorm: de escape-byte, openingshaakje, parameters en één letter die zegt wat ermee te doen.

ReeksParameterEffect
\e0x1BDe escape-byte die elke reeks startGeschreven als \e in een shell, \033 in C, \x1b in meeste talen en \u001b in JSON en Java.
\e[CSIControl Sequence Introducer — opent een geparameteriseerde opdracht
\e[<n>mmSelect Graphic Rendition: alles kleur en stijl eindigt in m
\e[1;4;31m1;4;31Meerdere parameters tegelijk, gescheiden door puntkomma'sVet, onderstreept en rood in één reeks — korter dan drie aparte en identiek in effect.
\e[0m0Wist elk attribuut terug naar terminal standaardGeef dit af aan het einde van gekleurde uitvoer. Een programma dat afsluit zonder dit laat de gebruiker met een gekleurde prompt.
\e]8;;URL\e\\text\e]8;;\e\\OSC 8Een klikbare hyperlink, in terminals die dit ondersteunenEen OSC-reeks in plaats van CSI, en beëindigd door ESC \ in plaats van een letter.

Tekstatributen

14

Ondersteuning is ongelijk onder de eerste vijf. Knipperend wordt bijna overal genegeerd, en enkele terminals renderen zwak en cursief identiek.

ReeksParameterEffect
\e[1m1Vet of helder
\e[2m2Zwak
\e[3m3Cursief
\e[4m4Onderstreping
\e[5m5KnipperendVeel genegeerd; de meeste moderne terminals renderen het als gewone tekst.
\e[7m7Omgekeerd: wisselt voor- en achtergrond
\e[8m8Verborgen: tekst is er maar wordt niet getekend
\e[9m9Doorgehaald
\e[21m21Dubbel onderstrepenSommige terminals lezen 21 als 'vet uit'.
\e[22m22Normale intensiteit: annuleert vet en zwak
\e[23m23Cursief annuleren
\e[24m24Onderstreping annuleren
\e[27m27Omkering annuleren
\e[29m29Doorhaling annuleren

Tekstkleur

17

De acht standaardkleuren en hun heldere tegenhangers. Wat de lezer werkelijk ziet is de terminal-thema interpretatie ervan — 'rood' is een plek in een palet, geen hexwaarde.

ReeksParameterEffect
\e[30m30Zwarte tekst
\e[31m31Rode tekst
\e[32m32Groene tekst
\e[33m33Gele tekst
\e[34m34Blauwe tekst
\e[35m35Magenta tekst
\e[36m36Cyaan tekst
\e[37m37Witte tekst
\e[39m39Terug naar standaard tekstkleur
\e[90m90Helder zwarte tekst
\e[91m91Helder rode tekst
\e[92m92Helder groene tekst
\e[93m93Helder gele tekst
\e[94m94Helder blauwe tekst
\e[95m95Helder magenta tekst
\e[96m96Helder cyaan tekst
\e[97m97Helder witte tekst

Achtergrondkleur

17

Dezelfde palet verschoven met tien. Een achtergrondcode stelt de cel achter de tekst in en blijft van kracht tot deze gereset wordt.

ReeksParameterEffect
\e[40m40Zwarte achtergrond
\e[41m41Rode achtergrond
\e[42m42Groene achtergrond
\e[43m43Gele achtergrond
\e[44m44Blauwe achtergrond
\e[45m45Magenta achtergrond
\e[46m46Cyaan achtergrond
\e[47m47Witte achtergrond
\e[49m49Terug naar standaard achtergrond
\e[100m100Helder zwarte achtergrond
\e[101m101Helder rode achtergrond
\e[102m102Helder groene achtergrond
\e[103m103Helder gele achtergrond
\e[104m104Helder blauwe achtergrond
\e[105m105Helder magenta achtergrond
\e[106m106Helder cyaan achtergrond
\e[107m107Helder witte achtergrond

256 kleuren en true color

4

Twee uitbreidingen van hetzelfde SGR-mechanisme. Beide worden veel maar niet universeel ondersteund; een terminal die deze niet begrijpt negeert meestal de reeks in plaats van deze af te drukken.

ReeksParameterEffect
\e[38;5;<n>m38;5;nTekst in paletkleur n, 0–2550–15 zijn de zestien hierboven, 16–231 een 6×6×6-kleurkubus, 232–255 een grijsschaal-helling.
\e[48;5;<n>m48;5;nAchtergrond in paletkleur n, 0–255
\e[38;2;<r>;<g>;<b>m38;2;r;g;bTekst in een exacte 24-bits kleur
\e[48;2;<r>;<g>;<b>m48;2;r;g;bAchtergrond in een exacte 24-bits kleur

Cursorbeweging

11

Bewegingen schuiven niet en breken niet: een cursor al bovenaan het scherm negeert een verzoek omhoog te gaan.

ReeksParameterEffect
\e[<n>AAOmhoog n rijen
\e[<n>BBOmlaag n rijen
\e[<n>CCRechts n kolommen
\e[<n>DDLinks n kolommen
\e[<n>EEOmlaag n rijen, naar het start van de regel
\e[<n>FFOmhoog n rijen, naar het start van de regel
\e[<n>GGNaar kolom n van huidige rij
\e[<row>;<col>HHNaar absolute rij en kolom, geteld vanaf 1
\e[ssHerinnert de cursorpositie
\e[uuTeruggaan naar herinnerde positie
\e[6n6nVraag terminal waar cursor isTerminal reageert op stdin als \e[<rij>;<kolom>R — de enige reeks hier die een antwoord geeft.

Wissen

7

Wissen schrijft spaties met huidige achtergrondkleur; het beweegt de cursor niet.

ReeksParameterEffect
\e[0J0JWis van cursor tot einde scherm
\e[1J1JWis van schermbegin tot cursor
\e[2J2JWis heel schermCursor blijft waar hij was, daarom meestal gecombineerd met \e[H.
\e[3J3JWis ook scrollback-buffer
\e[0K0KWis van cursor tot regelende
\e[1K1KWis van regelstart tot cursor
\e[2K2KWis hele regel\r\e[2K is gebruikelijk om een voortgangslijn ter plekke opnieuw te tekenen.

Terminalmodi

8

Privé-modi, gemarkeerd door vraagteken. Zij veranderen hoe terminal zich gedraagt in plaats van hoe één stuk tekst eruitziet, en elk moet terug uit voordat programma eindigt.

ReeksParameterEffect
\e[?25l?25lVerberg cursor
\e[?25h?25hToon cursor
\e[?1049h?1049hSchakel naar alternatief schermWat volledig scherm programma gebruikt zodat shell-scrollback eronder blijft.
\e[?1049l?1049lTeruggaan naar hoofdscherm
\e[?7h?7hLange regels breken aan rechterkant
\e[?7l?7lLange regels doorlopen aan rechterkant
\e[?2004h?2004hBracketed paste inschakelenGeplakte tekst komt omwikkeld in \e[200~ en \e[201~, zodat shell typing van plakken onderscheidt.
\e[?2004l?2004lBracketed paste uitschakelen

FAQ

Waarom blijft mijn output gekleurd nadat het programma eindigt?
Omdat niets het reset. Een kleurcode blijft van kracht tot een ander het vervangt, dus een programma dat halverwege een kleur eindigt laat de shell een gekleurde prompt achter. Druk \e[0m af voordat je afsluit — ook op het foutpad, dat is waar mensen het vergeten.
Wat is het verschil tussen \e, \033 en \x1b?
Niets. Alle drie zijn dezelfde byte, 0x1B, geschreven op de manier van een bepaalde taal: \e in bash en zsh, \033 in C en in echo -e, \x1b in Python, Go, Rust en JavaScript, \u001b waar alleen Unicode-escape is toegestaan, zoals JSON en Java.
Hoe verwijder ik deze uit een logbestand?
Plak het in de ANSI-stripper op deze site. Dit verwijdert kleur-, cursor- en modusreeksen en kan de kleuren ook naar HTML of Markdown omzetten in plaats van ze weg te gooien, wat je wilt als het punt van het logboek de markering was.
Moet ik kleuren hardcoden of een bibliotheek gebruiken?
Voor meer dan een paar regels gebruik je een bibliotheek — het controleert of de uitvoer überhaupt een terminal is. Kleurcodes geschreven naar een pijp of bestand terechten in het bestand, en zo krijgen build-logboeken hun ruis.
Is vet hetzelfde als helder?
Historisch ja, en op sommige terminals nog steeds. Code 1 was gedefinieerd als vet, maar veel terminals implementeerden het door over te schakelen naar het heldere deel van het palet, dus vet rood en helder rood kunnen identiek weergeven. Het bereik 90–97 bestaat zodat je helder kunt vragen zonder vet te vragen.