Ugrás a tartalomhoz

ANSI escape kódok

Az ANSI escape kód a terminálnak szóló karakterek rövid sorozata, amely a karakterek megjelenítésétől eltérő tevékenységre utasítja a terminált — szövegeket pirosra színezni, a kurzort két sorral feljebb mozgatni, képernyőt törlni. A terminál felfogja a sorozatot és végrehajtja, ezért az ilyen kódokkal teli naplófile csacskaságnak tűnik egy szerkesztőben.

Az alábbi minden kód escape bájttal kezdődik és — egy kivétellel — nyitó zárójellel. A parameter oszlop a zárójelként és végső betűként közötti részt adja meg, amely az a rész, amit a kódban összeállít; az első oszlop a teljes sorozatot mutatja, ahogy azt egy shellben írná.

A támogatás terminálonként eltérő, ezt az oldal megjegyzi, ahol fontos. A nyolc alapszín és félkövér mindenhol működik; a villogás, kettős aláhúzás és igazi szín nem.

A sorozat anatómiája

6

Ezen az oldalon minden kód azonos szerkezetű: escape bájt, nyitó zárójelként, paraméterek és egy betű, amely meghatározza, mit kell tenni velük.

SorozatParaméterHatás
\e0x1BAz escape bájt, amely minden sorozatot indítEgy shellben \e-ként írva, C-ben \033-as, legtöbb nyelvben \x1b és JSON-ban, Java-ban \u001b.
\e[CSIControl Sequence Introducer — paraméteres parancsot nyit meg
\e[<n>mmSelect Graphic Rendition: minden szín és stílus m-nel ér véget
\e[1;4;31m1;4;31Több paraméter egyszerre, pontosvesszővel elválasztvaFélkövér, aláhúzott és piros egy sorozatban — rövidebb, mint három különálló, és azonos hatással.
\e[0m0Visszaállítja az összes attribútumot a terminál alapértelmezéséreAdja ki ezt a színes kimenet végén. Az azt kihagyó program a felhasználónak színes promptot hagy.
\e]8;;URL\e\\text\e]8;;\e\\OSC 8Kattintható hiperhivatkozás a támogató terminálok eseténOSC sorozat, nem CSI, és ESC \ végződéssel, nem betűvel.

Szövegattribútumok

14

Az első öt alatt támogatott; villogás szinte sehol nem működik, és néhány terminál homályos és dőlt szöveget azonosan jeleníti meg.

SorozatParaméterHatás
\e[1m1Félkövér vagy fényes
\e[2m2Homályos
\e[3m3Dőlt
\e[4m4Aláhúzás
\e[5m5VillogásNagyrészt figyelmen kívül hagyjuk; a modern terminálok egyszerű szövegként jeleníti meg.
\e[7m7Fordított: felcseréli az előteret és a hátteret
\e[8m8Rejtett: szöveg létezik, de nem rajzolódik meg
\e[9m9Áthúzás
\e[21m21Kettős aláhúzásNéhány terminál a 21-et „félkövér kikapcsolása”-ként olvassa.
\e[22m22Normál intenzitás: feloldja félkövér és homályos
\e[23m23Dőlt kikapcsolása
\e[24m24Aláhúzás kikapcsolása
\e[27m27Fordított kikapcsolása
\e[29m29Áthúzás kikapcsolása

Szövegszín

17

A nyolc standard szín és a fényes párjaik. Az olvasó valójában a terminál témájának értelmezését látja — a „piros” a paletta egy pozíciója, nem egy hex érték.

SorozatParaméterHatás
\e[30m30Fekete szöveg
\e[31m31Piros szöveg
\e[32m32Zöld szöveg
\e[33m33Sárga szöveg
\e[34m34Kék szöveg
\e[35m35Bíborpiros szöveg
\e[36m36Cián szöveg
\e[37m37Fehér szöveg
\e[39m39Vissza az alapértelmezett szövegszínre
\e[90m90Fényes fekete szöveg
\e[91m91Fényes piros szöveg
\e[92m92Fényes zöld szöveg
\e[93m93Fényes sárga szöveg
\e[94m94Fényes kék szöveg
\e[95m95Fényes bíborpiros szöveg
\e[96m96Fényes cián szöveg
\e[97m97Fényes fehér szöveg

Háttérszín

17

Ugyanaz a paleta tízzel eltolva. A háttér kód beállítja a szöveg mögötti cellát és addig érvényes, amíg vissza nem állítják.

SorozatParaméterHatás
\e[40m40Fekete háttér
\e[41m41Piros háttér
\e[42m42Zöld háttér
\e[43m43Sárga háttér
\e[44m44Kék háttér
\e[45m45Bíborpiros háttér
\e[46m46Cián háttér
\e[47m47Fehér háttér
\e[49m49Vissza az alapértelmezett hátérre
\e[100m100Fényes fekete háttér
\e[101m101Fényes piros háttér
\e[102m102Fényes zöld háttér
\e[103m103Fényes sárga háttér
\e[104m104Fényes kék háttér
\e[105m105Fényes bíborpiros háttér
\e[106m106Fényes cián háttér
\e[107m107Fényes fehér háttér

256 szín és igazi szín

4

Az SGR mechanizmus két kiterjesztése. Mindkettő széles, de nem univerzálisan támogatott; egy terminál, amely nem érti, általában figyelmen kívül hagyja a sorozatot ahelyett, hogy kinyomtatná.

SorozatParaméterHatás
\e[38;5;<n>m38;5;nSzöveg a paletta n szín, 0–2550–15 a fenti tizenhat, 16–231 egy 6×6×6 szín kocka, 232–255 egy szürke skála.
\e[48;5;<n>m48;5;nHáttér a paletta n szín, 0–255
\e[38;2;<r>;<g>;<b>m38;2;r;g;bSzöveg egy pontos 24 bites szín
\e[48;2;<r>;<g>;<b>m48;2;r;g;bHáttér egy pontos 24 bites szín

Kurzormozgás

11

A mozgatások nem görgetnek és nem törik le: egy, a képernyő teteje felé már lévő kurzor felfelé haladó kérést figyelmen kívül hagy.

SorozatParaméterHatás
\e[<n>AAFel n sorral
\e[<n>BBLe n sorral
\e[<n>CCJobbra n oszloppal
\e[<n>DDBalra n oszloppal
\e[<n>EELe n sorral, a sor elejére
\e[<n>FFFel n sorral, a sor elejére
\e[<n>GGAz aktuális sor n oszlopára
\e[<row>;<col>HHAbszolút sor és oszlop, 1-től számítva
\e[ssMegjegyzi a kurzor pozícióját
\e[uuVisszatér a megjegyzett pozícióra
\e[6n6nMegkérdezi a terminált, hol van a kurzorA terminál a standard bemenetre válaszol \e[<sor>;<oszlop>R-ként — az egyetlen sorozat itt, amely választ ad.

Törlés

7

A törlés szóközt ír az aktuális háttérszínnel; nem mozgatja a kurzort.

SorozatParaméterHatás
\e[0J0JTörlés a kurzortól a képernyő végéig
\e[1J1JTörlés a képernyő elejétől a kurzorig
\e[2J2JA teljes képernyő törléseA kurzor marad ahol volt — ezért szokásosan a \e[H-val kombinálva.
\e[3J3JA görgetési történet törlésével is
\e[0K0KTörlés a kurzortól a sor végéig
\e[1K1KTörlés a sor elejétől a kurzorig
\e[2K2KA teljes sor törlése\r\e[2K a szokásos módja egy haladó sor újrarajzolásának a helyén.

Terminál módok

8

Privát módok, kérdőjellel jelölve. Megváltoztatják a terminál viselkedését, nem egy szöveges darab kinézetét, és mindegyiket vissza kell állítani a program kilépése előtt.

SorozatParaméterHatás
\e[?25l?25lRejtse el a kurzort
\e[?25h?25hMutassa meg a kurzort
\e[?1049h?1049hVáltás az alternatív képernyőreEzt a teljes képernyős program használja, hogy a héj görgetési előzménye alatt maradjon.
\e[?1049l?1049lVáltás vissza a fő képernyőre
\e[?7h?7hHosszú sorok becsomagolása a jobb szélénél
\e[?7l?7lHagyja hosszú sorokat futni a jobb szélén
\e[?2004h?2004hBekacsolt beillesztés bekapcsolásaA beillesztett szöveg \e[200~ és \e[201~ közül érkezik, így a héj meg tudja különböztetni a gépelést az illesztésektől.
\e[?2004l?2004lBekacsolt beillesztés kikapcsolása

Gyakori kérdések

Miért marad a kimenet színes a program befejeződése után?
Mert semmi nem állította vissza. A szín kód addig érvényes, amíg egy másik nem helyettesíti, így egy szín közepén kilépő program a felhasználónak színes promptot hagy. Nyomtassa ki a \e[0m értéket a kilépés előtt — a hibaútra is, amit gyakran elfelejtik.
Mi a különbség a \e, \033 és \x1b között?
Nincs. Mind a három ugyanaz a bájt, 0x1B, az adott nyelv írásmódjában: \e a bashben és zshben, \033 a C-ben és az echo -e-ben, \x1b a Pythonban, Go-ban, Rustban és JavaScriptben, \u001b ahol csak Unicode escape engedélyezett, például JSON és Java.
Hogyan távolíthatom el ezeket a naplófájlból?
Illessze be az ANSI eltávolító eszközbe ezen az oldalon. Eltávolítja a szín-, kurzor- és módsorozatokat, és szín helyett HTML vagy Markdown formátumba is konvertálhatja, amit akkor szeretne, ha a napló fénypontja volt.
Hardkódozzam a színeket vagy könyvtárat használjak?
Néhány sornál többhez könyvtárat használjon — ellenőrzi, hogy a kimenet terminál-e. A csatornára vagy fájlra írt szín kódok benne maradnak a fájlban, így ez az, hogyan kerülnek a csacskaságok az összeállítási naplók közé.
Azonos a félkövér és a fényes?
Történetileg igen, és néhány terminálban még ma is. Az 1. kód félkövérként lett meghatározva, de sok terminál a paletta fényes felére váltva valósította meg, így a félkövér piros és a fényes piros azonos módon jelenítheti meg. A 90–97 tartomány azért létezik, hogy fényt kérhess félkövér nélkül.