Přeskočit na obsah

ANSI escape kódy

ANSI escape kód je krátká posloupnost znaků, kterou program vypíše, aby řekl terminálu, aby udělal něco jiného než tyto znaky zobrazit — vypíšete slovo červeně, posunete kurzor nahoru o dva řádky, vymažete obrazovku. Terminál posloupnost pohltí a vykoná ji, proto se log plný těchto kódů v editoru zobrazuje jako šum.

Každý kód níže začíná escape bytem a — až na jednu výjimku — otevírací závorkou. Sloupec parametr uvádí část mezi závorkou a koncovým písmenem, což je to, co skládáte v kódu; první sloupec ukazuje celou posloupnost tak, jak byste ji napsali v shellu.

Podpora se liší mezi terminály a tato stránka to uvádí tam, kde na tom záleží. Osm základních barev a tučné písmo fungují všude; blikání, dvojité podtržení a true color ne.

Anatomie sekvence

6

Každý kód na této stránce má stejný tvar: escape byte, otevírací závorka, parametry a jedno písmeno, které říká, co s nimi dělat.

SekvenceParametrÚčinek
\e0x1BEscape byte, kterým začíná každá sekvenceV shellu se píše \e, v C \033, ve většině jazyků \x1b a v JSON a Javě \u001b.
\e[CSIControl Sequence Introducer — otevírá příkazovaný příkaz
\e[<n>mmSelect Graphic Rendition: vše barvy a styly končí m
\e[1;4;31m1;4;31Několik parametrů najednou, oddělené středníkyTučné, podtržené a červené v jedné sekvenci — kratší než tři samostatné a se stejným účinkem.
\e[0m0Obnoví všechny atributy na výchozí nastavení termináluVypíšete jej na konci barevného výstupu. Program, který jej vynechá, ponechá uživateli barevný prompt.
\e]8;;URL\e\\text\e]8;;\e\\OSC 8Klikatelný hypertextový odkaz v terminálech, které jej podporujíJedná se o OSC sekvenci, nikoli CSI, a končí ji ESC \ místo písmena.

Atributy textu

14

Podpora je nerovnoměrná mimo první pět. Blikání je téměř všude ignorováno a několik terminálů vykresluje slabé a kurzívu stejně.

SekvenceParametrÚčinek
\e[1m1Tučné nebo jasné
\e[2m2Slabé
\e[3m3Kurzíva
\e[4m4Podtržení
\e[5m5BlikáníRozšířeně se ignoruje; moderní terminály jej vykreslují jako běžný text.
\e[7m7Reverse: zaměňuje popředí a pozadí
\e[8m8Skryté: text existuje, ale nevykresluje se
\e[9m9Přeškrtnutí
\e[21m21Dvojité podtrženíNěkteré terminály čtou 21 jako "vypnout tučné".
\e[22m22Normální intenzita: ruší tučné i slabé
\e[23m23Ruší kurzívu
\e[24m24Ruší podtržení
\e[27m27Ruší reverse
\e[29m29Ruší přeškrtnutí

Barva textu

17

Osm standardních barev a jejich jasné protějšky. Co čtenář vlastně vidí, je interpretace tématu jeho terminálu — "červená" je pozice v paletě, ne hex hodnota.

SekvenceParametrÚčinek
\e[30m30Černý text
\e[31m31Červený text
\e[32m32Zelený text
\e[33m33Žlutý text
\e[34m34Modrý text
\e[35m35Fialový text
\e[36m36Azurový text
\e[37m37Bílý text
\e[39m39Zpět na výchozí barvu textu
\e[90m90Jasný černý text
\e[91m91Jasný červený text
\e[92m92Jasný zelený text
\e[93m93Jasný žlutý text
\e[94m94Jasný modrý text
\e[95m95Jasný fialový text
\e[96m96Jasný azurový text
\e[97m97Jasný bílý text

Barva pozadí

17

Stejná paleta posunutá o deset. Barevný kód pozadí nastaví buňku za textem a zůstává v platnosti, dokud není zrušen.

SekvenceParametrÚčinek
\e[40m40Černé pozadí
\e[41m41Červené pozadí
\e[42m42Zelené pozadí
\e[43m43Žluté pozadí
\e[44m44Modré pozadí
\e[45m45Fialové pozadí
\e[46m46Azurové pozadí
\e[47m47Bílé pozadí
\e[49m49Zpět na výchozí pozadí
\e[100m100Jasné černé pozadí
\e[101m101Jasné červené pozadí
\e[102m102Jasné zelené pozadí
\e[103m103Jasné žluté pozadí
\e[104m104Jasné modré pozadí
\e[105m105Jasné fialové pozadí
\e[106m106Jasné azurové pozadí
\e[107m107Jasné bílé pozadí

256 barev a true color

4

Dvě rozšíření stejného mechanismu SGR. Obě jsou široce, ale ne všeobecně podporovány; terminál, který jim nerozumí, obvykle sekvenci ignoruje místo její reprodukce.

SekvenceParametrÚčinek
\e[38;5;<n>m38;5;nText v paletě barvy n, 0–2550–15 je šestnáctka výše, 16–231 je krychle barev 6×6×6, 232–255 je stupnice šedi.
\e[48;5;<n>m48;5;nPozadí v paletě barvy n, 0–255
\e[38;2;<r>;<g>;<b>m38;2;r;g;bText v přesné 24bitové barvě
\e[48;2;<r>;<g>;<b>m48;2;r;g;bPozadí v přesné 24bitové barvě

Pohyb kurzoru

11

Pohyby neposunují obsah a nezalamují: kurzor už nahoru obrazovky ignoruje požadavek jít výš.

SekvenceParametrÚčinek
\e[<n>AANahoru o n řádků
\e[<n>BBDolů o n řádků
\e[<n>CCVpravo o n sloupců
\e[<n>DDVlevo o n sloupců
\e[<n>EEO n řádků dolů, na začátek řádky
\e[<n>FFO n řádků nahoru, na začátek řádky
\e[<n>GGNa sloupec n v aktuálním řádku
\e[<row>;<col>HHNa absolutní řádek a sloupec, počítáno od 1
\e[ssZapamatuje si polohu kurzoru
\e[uuVrátí se na zapamatovanou polohu
\e[6n6nZeptá se terminálu, kde je kurzorTerminál odpovídá na standardní vstup jako \e[<řádek>;<sloupec>R — jediná sekvence zde, která vrací odpověď.

Mazání

7

Mazání zapisuje mezery s aktuální barvou pozadí; kurzorem nepohybuje.

SekvenceParametrÚčinek
\e[0J0JVymaže od kurzoru do konce obrazovky
\e[1J1JVymaže od začátku obrazovky po kurzor
\e[2J2JVymaže celou obrazovkuKurzor zůstane, kde byl — proto se obvykle kombinuje s \e[H.
\e[3J3JVymaže také zásobník posuvů
\e[0K0KVymaže od kurzoru do konce řádky
\e[1K1KVymaže od začátku řádky po kurzor
\e[2K2KVymaže celý řádek\r\e[2K je obvyklý způsob, jak překreslit řádek s průběhem na místě.

Režimy terminálu

8

Soukromé režimy, označené otazníkem. Mění chování terminálu, nikoli vzhled jednoho textu, a každý musí být vypnut před ukončením programu.

SekvenceParametrÚčinek
\e[?25l?25lSkryje kurzor
\e[?25h?25hZobrazí kurzor
\e[?1049h?1049hPřepne na alternativní obrazovkuTo, co používá celoobrazovkový program, aby história shellu pod ním přežila.
\e[?1049l?1049lPřepne zpět na hlavní obrazovku
\e[?7h?7hZalomí dlouhé řádky na pravém okraji
\e[?7l?7lNechá dlouhé řádky přetéci přes pravý okraj
\e[?2004h?2004hZapne bracketed pasteVložený text přijde zabalený v \e[200~ a \e[201~, aby shell poznal psaní od vkládání.
\e[?2004l?2004lVypne bracketed paste

Časté dotazy

Proč zůstane výstup barevný poté, co program skončí?
Protože jej nic nevrátilo. Barevný kód zůstává platný, dokud jej nenahradí jiný, takže program, který skončí uprostřed barevného kódu, zanechá uživateli barevný prompt. Před ukončením vypíšte \e[0m — včetně cesty pro chyby, na kterou se lidé obvykle zapomenou.
Jaký je rozdíl mezi \e, \033 a \x1b?
Žádný. Všechny tři jsou stejný byte, 0x1B, zapsaný tak, jak jej daný jazyk píše: \e v bash a zsh, \033 v C a v echo -e, \x1b v Pythonu, Go, Rustu a JavaScriptu, \u001b tam, kde je povolený pouze Unicode escape, jako v JSON a Javě.
Jak je odstraním z logovacího souboru?
Vložte jej do ANSI stripper nástroje na této stránce. Odstraní barvy, kurzor a režimní sekvence a může také barvy převést na HTML nebo Markdown místo jejich zahazování, což je užitečné, když byl bod logu právě zvýraznění.
Měl bych barvy kódovat přímo nebo použít knihovnu?
U čehokoliv delšího než pár řádků použijte knihovnu — ověří, zda je výstup vůbec terminál. Barevné kódy zapsané do rúry nebo souboru skončí v souboru, a právě tak logy buildů získají šum.
Je tučné totéž jako jasné?
Historicky ano a na některých terminálech stále. Kód 1 byl definován jako tučný, ale mnoho terminálů jej implementovalo přepnutím na jasnou polovinu palety, takže tučná červená a jasná červená se mohou vykreslovat stejně. Rozsah 90–97 existuje právě proto, abyste mohli požádat o jasné bez tučného.