Preskoči na sadržaj

ANSI escape kodovi

ANSI escape kod je kratka sekvenca znakova koju program ispisuje kako bi rekao terminalu da napravi nešto umjesto da prikaže te znakove — oboji sljedeće riječi crvenom, pomakni kursor gore dva reda, očisti ekran. Terminal progluta sekvencu i izvršava je, što je zašto log pun njih izgleda kao šum kad ga otvorite u editoru.

Svaki kod ispod počinje escape bajtom i, s jednom iznimkom, otvarajućom zagradnom zagradom. Stupac parametra daje dio između zagrade i završnog slova, što je ono što sastavite u kodu; prvi stupac prikazuje cijelu sekvencu kao što biste je napisali u shell-u.

Podrška se razlikuje između terminala i ova stranica to navodi gdje je važno. Osam osnovnih boja i masno funkcioniraju svugdje; blinkanje, dvostruko podvučeno i true color ne.

Anatomija sekvence

6

Svaki kod na ovoj stranici ima isti oblik: escape bajt, otvarajuća zagrada, parametri i jedno slovo koje kaže što s njima.

SekvencaParametarUčinak
\e0x1BEscape bajt koji počinje svaku sekvencuNapisan \e u shell-u, \033 u C, \x1b u većini jezika i \u001b u JSON i Java.
\e[CSIControl Sequence Introducer — otvara parametriziranu naredbu
\e[<n>mmSelect Graphic Rendition: sve boje i stil završavaju s m
\e[1;4;31m1;4;31Nekoliko parametara odjednom, odvojenih točka-zarezimaMasno, podvučeno i crveno u jednoj sekvenci — kraće od tri odvojena i identičnog učinka.
\e[0m0Briše svaki atribut natrag na zadanu postavku terminalaIspišite to na kraju obojane izlaza. Program koji izlazi bez toga ostavi korisniku obojani prompt.
\e]8;;URL\e\\text\e]8;;\e\\OSC 8Klikljiva hiperveza, u terminalima koji je podržavajuOSC sekvenca, a ne CSI, i završna je s ESC \ umjesto slova.

Atributi teksta

14

Podrška je neravnomjerna ispod prva pet. Blinkanje se gotovo svugdje ignorira, a nekoliko terminala prikazuje dim i italic identično.

SekvencaParametarUčinak
\e[1m1Masno ili sjajno
\e[2m2Prigušeno
\e[3m3Kurziv
\e[4m4Podvučeno
\e[5m5BlinkanjeČesto se ignorira; većina modernih terminala ga prikazuje kao obični tekst.
\e[7m7Obrnuto: zamjenjuje prednji plan i pozadinu
\e[8m8Skriveno: tekst je tamo ali se ne crta
\e[9m9Precrtano
\e[21m21Dvostruko podvučenoNeki terminali čitaju 21 kao „isključi masno”.
\e[22m22Normalna intenzitet: poništava masno i dim
\e[23m23Poništava italic
\e[24m24Poništava podvučeno
\e[27m27Poništava obrnuto
\e[29m29Poništava precrtano

Boja teksta

17

Osam standardnih boja i njihove sjajne kolege. Ono što čitač zapravo vidi je njegov terminal tema — „crvena” je slot u paleti, ne hex vrijednost.

SekvencaParametarUčinak
\e[30m30Crni tekst
\e[31m31Crveni tekst
\e[32m32Zeleni tekst
\e[33m33Žuti tekst
\e[34m34Plavi tekst
\e[35m35Ljubičasti tekst
\e[36m36Azurni tekst
\e[37m37Bijeli tekst
\e[39m39Natrag na zadanu boju teksta
\e[90m90Sjajni crni tekst
\e[91m91Sjajni crveni tekst
\e[92m92Sjajni zeleni tekst
\e[93m93Sjajni žuti tekst
\e[94m94Sjajni plavi tekst
\e[95m95Sjajni ljubičasti tekst
\e[96m96Sjajni azurni tekst
\e[97m97Sjajni bijeli tekst

Boja pozadine

17

Ista paleta pomaknuta za deset. Kod pozadine postavlja ćeliju iza teksta i ostaje aktivna dok se ne resetira.

SekvencaParametarUčinak
\e[40m40Crna pozadina
\e[41m41Crvena pozadina
\e[42m42Zelena pozadina
\e[43m43Žuta pozadina
\e[44m44Plava pozadina
\e[45m45Ljubičasta pozadina
\e[46m46Azurna pozadina
\e[47m47Bijela pozadina
\e[49m49Natrag na zadanu pozadinu
\e[100m100Sjajni crna pozadina
\e[101m101Sjajni crvena pozadina
\e[102m102Sjajni zelena pozadina
\e[103m103Sjajni žuta pozadina
\e[104m104Sjajni plava pozadina
\e[105m105Sjajni ljubičasta pozadina
\e[106m106Sjajni azurna pozadina
\e[107m107Sjajni bijela pozadina

256 boja i true color

4

Dva proširenja istog SGR mehanizma. Oboje su široko, ali ne univerzalno podržavana; terminal koji ih ne razumije obično ignora sekvencu umjesto da je ispis.

SekvencaParametarUčinak
\e[38;5;<n>m38;5;nTekst u boji palete n, 0–2550–15 su šesnaestka gore, 16–231 6×6×6 boja kocka, 232–255 skala sive.
\e[48;5;<n>m48;5;nPozadina u boji palete n, 0–255
\e[38;2;<r>;<g>;<b>m38;2;r;g;bTekst u točnoj 24-bitnoj boji
\e[48;2;<r>;<g>;<b>m48;2;r;g;bPozadina u točnoj 24-bitnoj boji

Pomicanje kursora

11

Pomaci se ne skroliraju i ne omotavaju: kursor koji je već na vrhu ekrana ignora zahtjev da ide gore.

SekvencaParametarUčinak
\e[<n>AAGore za n redaka
\e[<n>BBDolje za n redaka
\e[<n>CCDesno za n stupaca
\e[<n>DDLijevo za n stupaca
\e[<n>EEDolje za n redaka, na početak reda
\e[<n>FFGore za n redaka, na početak reda
\e[<n>GGNa stupac n trenutnog reda
\e[<row>;<col>HHNa apsolutni red i stupac, brojano od 1
\e[ssZapamti poziciju kursora
\e[uuVrati se na zapamćenu poziciju
\e[6n6nPitaj terminal gdje je kursorTerminal odgovara na standardni unos kao \e[<red>;<stupac>R — jedina sekvenca ovdje koja daje odgovor.

Brisanje

7

Brisanje piše razmake s trenutnom bojom pozadine; ne pomiče kursor.

SekvencaParametarUčinak
\e[0J0JObriši od kursora do kraja ekrana
\e[1J1JObriši od početka ekrana do kursora
\e[2J2JObriši cijeli ekranKursor ostaje gdje je bio — zato se obično kombinira s \e[H.
\e[3J3JObriši i buffer za nazad
\e[0K0KObriši od kursora do kraja reda
\e[1K1KObriši od početka reda do kursora
\e[2K2KObriši cijeli red\r\e[2K je uobičajeni način da se redira redak s napredkom na mjestu.

Terminalni modovi

8

Privatni modovi, označeni s upitnik. Mijenjaju kako terminal funkcionira umjesto kako jedan komad teksta izgleda, i svaki se od njih mora vratiti prije nego što se program završi.

SekvencaParametarUčinak
\e[?25l?25lSakrij kursor
\e[?25h?25hPrikaži kursor
\e[?1049h?1049hPrebaci na alternativni ekranOno što koristi program u cijelom ekranu kako bi buffer shell-a ispod njega preživi.
\e[?1049l?1049lPrebaci natrag na glavni ekran
\e[?7h?7hOmotaj duge redake na desnom rubu
\e[?7l?7lNeka dugi redaci padaju sa desnog ruba
\e[?2004h?2004hUključi bracketed pasteZalijepljeni tekst dolazi obmotan u \e[200~ i \e[201~, tako da shell može razlikovati pisanje od lijepljenja.
\e[?2004l?2004lIsključi bracketed paste

FAQ

Zašto ostaje izlaz obojan nakon što se program završi?
Jer ga nešto nije resetiralo. Kod boje ostaje aktivna dok je drugi ne zamijeni, tako da program koji izlazi usred boje daje shell-u obojani prompt. Ispišite \e[0m prije izlaska — uključujući stazu greške, što je dio koji se najčešće zaboravlja.
Koja je razlika između \e, \033 i \x1b?
Nema razlike. Sva tri su isti bajt, 0x1B, napisan na način kako ga određeni jezik piše: \e u bash-u i zsh, \033 u C i u echo -e, \x1b u Python-u, Go, Rust-u i JavaScript-u, \u001b gdje je samo Unicode escape dozvoljeno, kao što su JSON i Java.
Kako ih skidam iz log datoteke?
Zalijepite je u ANSI stripper na ovoj stranici. Uklanja boje, kursor i sekvencu modusa i može i pretvoriti boje u HTML ili Markdown umjesto da ih baci, što je ono što trebate ako je zvučanja bila poanta loga.
Trebam li hardkodirati boje ili koristiti biblioteku?
Za bilo što više od nekoliko redaka, koristite biblioteku — provjerit će je li izlaz uopće terminal. Kodovi boje napisani u cijev ili datoteku završe u datoteci, što je kako build logovi dobivaju svoj šum.
Je li masno isto kao sjajno?
Povijesno da, a na nekim terminalima još. Kod 1 je definiran kao masno, ali mnogi terminali su ga implementirali prebacivanjem na sjajni dio palete, pa masna crvena i sjaja crvena mogu izgledati identično. Raspon 90–97 postoji tako da možete tražiti sjajno bez traženjem masnog.