Hoppa till innehåll

ANSI escape koder

En ANSI escape kod är en kort sekvens av tecken som ett program skriver ut för att säga till terminalen att göra något annat än visa dessa tecken — färga nästa ord rött, flytta markören upp två rader, rensa skärmen. Terminalen absorberar sekvensen och utför den, vilket är varför en loggfil full av dem ser ut som bullriga tecken när du öppnar den i en editor.

Varje kod nedan börjar med escape-byten och, med ett undantag, en öppen parentes. Parameterkolumnen visar delen mellan parentesen och det avslutande brevet, vilket är det du samlar i kod; den första kolumnen visar hela sekvensen som du skulle skriva den i ett skal.

Stödet varierar beroende på terminal, och denna sida säger det där det spelar roll. De åtta grundfärgerna och fet stil fungerar överallt; blinkande, dubbelunderstruken och true color gör det inte.

Anatomi för en sekvens

6

Varje kod på denna sida har samma form: escape-byten, en öppen parentes, några parametrar och ett brev som säger vad du ska göra med dem.

SekvensParameterEffekt
\e0x1BEscape-byten som startar varje sekvensSkriven \e i ett skal, \033 i C, \x1b på de flesta språken och \u001b i JSON och Java.
\e[CSIControl Sequence Introducer — öppnar ett parametriserat kommando
\e[<n>mmSelect Graphic Rendition: allt om färg och stil slutar med m
\e[1;4;31m1;4;31Flera parametrar på en gång, åtskilda av semikolonFet, understruken och röd i en sekvens — kortare än tre separata och identisk effekt.
\e[0m0Rensar alla attribut tillbaka till terminalens standardSkicka detta vid slutet av färgad utmatning. Ett program som avslutas utan det lämnar användarens prompt färgad.
\e]8;;URL\e\\text\e]8;;\e\\OSC 8En klickbar hyperlänk i terminaler som stöder enEn OSC-sekvens snarare än en CSI, och avslutad av ESC \ istället för ett brev.

Textattribut

14

Stödet är ojämnt under de första fem. Blink ignoreras nästan överallt, och några terminaler visar dim och italic identiskt.

SekvensParameterEffekt
\e[1m1Fet eller ljus
\e[2m2Svag
\e[3m3Kursiv
\e[4m4Understruken
\e[5m5BlinkningAllmänt ignorerad; de flesta moderna terminaler visar det som vanlig text.
\e[7m7Omvänd: byter förgrund och bakgrund
\e[8m8Dold: texten är där men ritas inte
\e[9m9Genomstruken
\e[21m21DubbelunderstrukenVissa terminaler läser 21 som "fet av".
\e[22m22Normal intensitet: annullerar fet och svag
\e[23m23Annullerar kursiv
\e[24m24Annullerar understruken
\e[27m27Annullerar omvänd
\e[29m29Annullerar genomstruken

Textfärg

17

De åtta standardfärgerna och deras ljusa motsvarigheter. Vad läsaren faktiskt ser är sin terminals tolkning av var och en — "röd" är en plats i en palett, inte ett hexvärde.

SekvensParameterEffekt
\e[30m30Svart text
\e[31m31Röd text
\e[32m32Grön text
\e[33m33Gul text
\e[34m34Blå text
\e[35m35Magentaröd text
\e[36m36Cyan text
\e[37m37Vit text
\e[39m39Tillbaka till standard textfärg
\e[90m90Ljus svart text
\e[91m91Ljus röd text
\e[92m92Ljus grön text
\e[93m93Ljus gul text
\e[94m94Ljus blå text
\e[95m95Ljus magentaröd text
\e[96m96Ljus cyan text
\e[97m97Ljus vit text

Bakgrundsfärg

17

Samma palett skiftad med tio. En bakgrundskod ställer in cellen bakom texten och förblir i kraft tills den återställs.

SekvensParameterEffekt
\e[40m40Svart bakgrund
\e[41m41Röd bakgrund
\e[42m42Grön bakgrund
\e[43m43Gul bakgrund
\e[44m44Blå bakgrund
\e[45m45Magenta bakgrund
\e[46m46Cyan bakgrund
\e[47m47Vit bakgrund
\e[49m49Tillbaka till standard bakgrund
\e[100m100Ljus svart bakgrund
\e[101m101Ljus röd bakgrund
\e[102m102Ljus grön bakgrund
\e[103m103Ljus gul bakgrund
\e[104m104Ljus blå bakgrund
\e[105m105Ljus magenta bakgrund
\e[106m106Ljus cyan bakgrund
\e[107m107Ljus vit bakgrund

256 färger och true color

4

Två tillägg till samma SGR-mekanism. Båda är allmänt men inte universellt stödda; en terminal som inte förstår dem ignorerar vanligtvis sekvensen istället för att skriva ut den.

SekvensParameterEffekt
\e[38;5;<n>m38;5;nText i palett färg n, 0–2550–15 är de sexton ovan, 16–231 en 6×6×6 färgkub, 232–255 en gråskala ramp.
\e[48;5;<n>m48;5;nBakgrund i palett färg n, 0–255
\e[38;2;<r>;<g>;<b>m38;2;r;g;bText i en exakt 24-bitars färg
\e[48;2;<r>;<g>;<b>m48;2;r;g;bBakgrund i en exakt 24-bitars färg

Markörförflyttning

11

Förflyttningar bläddrar inte och radbryts inte: en markör redan högst upp på skärmen ignorerar en begäran att gå upp.

SekvensParameterEffekt
\e[<n>AAUpp n rader
\e[<n>BBNer n rader
\e[<n>CCHöger n kolumner
\e[<n>DDVänster n kolumner
\e[<n>EENer n rader, till radstarten
\e[<n>FFUpp n rader, till radstarten
\e[<n>GGTill kolumn n i den aktuella raden
\e[<row>;<col>HHTill en absolut rad och kolumn, räknat från 1
\e[ssKom ihåg markörpositionen
\e[uuGå tillbaka till den sparade positionen
\e[6n6nFråga terminalen var markören ärTerminalen svarar på standard input som \e[<rad>;<col>R — den enda sekvensen här som ger ett svar.

Radering

7

Radering skriver mellanslag med den aktuella bakgrundsfärgen; det rör inte markören.

SekvensParameterEffekt
\e[0J0JRensa från markören till skärmens slut
\e[1J1JRensa från skärmens början till markören
\e[2J2JRensa hela skärmenMarkören stannar där den var, varför detta vanligtvis kombineras med \e[H.
\e[3J3JRensa även rullningsbufferten
\e[0K0KRensa från markören till radens slut
\e[1K1KRensa från radens början till markören
\e[2K2KRensa hela raden\r\e[2K är det vanliga sättet att rita om en förloppsrad på plats.

Terminallägen

8

Privata lägen, markerade med ett frågetecken. De ändrar hur terminalen fungerar snarare än hur en textbit ser ut, och var och en måste stängas av innan programmet avslutas.

SekvensParameterEffekt
\e[?25l?25lGöm markören
\e[?25h?25hVisa markören
\e[?1049h?1049hByt till alternativ skärmDet som ett fullskärmssprogram använder så att skalets rulling överlevnad.
\e[?1049l?1049lVäxla tillbaka till huvudskärmen
\e[?7h?7hRadbryt långrader vid höger kant
\e[?7l?7lLåt långrader löpa av höger kant
\e[?2004h?2004hSlå på rad-inmatning med markörerInklistrad text anländer insvept i \e[200~ och \e[201~, så ett skal kan skilja skrift från inlimning.
\e[?2004l?2004lSlå av rad-inmatning med markörer

FAQ

Varför förblir min utmatning färgad efter att programmet avslutas?
Eftersom ingenting återställde den. En färgkod förblir i kraft tills en annan ersätter den, så ett program som avslutas mitt i en färg lämnar skalet en färgad prompt. Skriv ut \e[0m före avslutning — inklusive på felvägen, vilket folk ofta glömmer.
Vad är skillnaden mellan \e, \033 och \x1b?
Ingen. Alla tre är samma byte, 0x1B, skriven som ett särskilt språk stavade det: \e i bash och zsh, \033 i C och i echo -e, \x1b i Python, Go, Rust och JavaScript, \u001b där bara en Unicode escape är tillåten, såsom JSON och Java.
Hur tar jag bort dessa från en loggfil?
Klistra in den i ANSI-strippern på denna webbplats. Den tar bort färg-, markör- och lägessekvenser och kan också konvertera färgerna till HTML eller Markdown istället för att släppa dem, vilket är vad du vill om syftet med loggen var markeringen.
Ska jag hårdkoda färger eller använda ett bibliotek?
För något mer än ett par rader, använd ett bibliotek — det kontrollerar om utmatningen överhuvudtaget är en terminal. Färgkoder skrivna till ett rör eller en fil hamnar i filen, och det är hur byggloggar får sitt brus.
Är fet samma som ljus?
Historiskt ja, och på vissa terminaler fortfarande. Kod 1 definierades som fet, men många terminaler implementerade det genom att byta till den ljusa halvan av paletten istället, så fet röd och ljus röd kan se identiska ut. Intervallet 90–97 finns så du kan fråga efter ljus utan att fråga efter fet.