Preskoči na vsebino

ANSI escape kode

ANSI escape koda je kratko zaporedje znakov, ki ga program izpiše, da terminalski veli narediti kaj drugega, kot le prikazati te znake — naslednjo besedilo obarvati rdeče, kurzor premakniti dve vrstici navzgor, počistiti zaslon. Terminal zaporedje požre in ga izvršit, zato se dnevnik poln njih v urejevalniku bere kot šum.

Vsaka koda spodaj se začne z escape bajtom in — z eno izjemo — z odpirajočo oglatim oklepajem. Stolpec parametrov daje del med oglatim oklepajem in zadnjim znakom, to je del, ki ga sestavljate v kodi; prvi stolpec prikazuje celotno zaporedje tako, kot bi ga napisali v lupini.

Podpora se med terminali razlikuje in ta stran to, kjer je pomembno, navaja. Osem osnovnih barv in krepko delujejo povsod; utripanje, dvojna podčrtanost in true color pa ne.

Anatomija zaporedja

6

Vsaka koda na tej strani ima isto obliko: escape bajt, odpirajočo oglatim oklepajem, parametre in eno črko, ki pove kaj z njimi.

ZaporedjeParameterUčinek
\e0x1BEscape bajt, ki se vsakega zaporedja začneV lupini se piše \e, v C \033, v večini jezikov \x1b in v JSON ter Javi \u001b.
\e[CSIControl Sequence Introducer — odpre parameteriziran ukaz
\e[<n>mmSelect Graphic Rendition: vse barve in stil se končajo z m
\e[1;4;31m1;4;31Več parametrov naenkrat, ločenih z podpičjiKrepko, podčrtano in rdeče v enem zaporedju — krajše od treh ločenih in enak učinek.
\e[0m0Počisti vso nastavitev v privzeto terminalskoIzpišite ga na koncu obarvane rezultate. Program, ki ga izpusti, pusti uporabnika pozivko obarvano.
\e]8;;URL\e\\text\e]8;;\e\\OSC 8Klikljivi hiperpovezava v terminalih, ki jo podpirajoOSC zaporedje, ne CSI, in ga konča ESC \ namesto črke.

Atributi besedila

14

Podpora je neenakomerna pod prvimi petimi. Utripanje je skoraj povsod ignorirano in nekaj terminalov prikazuje zatemnitev in poševno enako.

ZaporedjeParameterUčinek
\e[1m1Krepko ali svetlo
\e[2m2Zatemnjena
\e[3m3Poševna
\e[4m4Podčrtano
\e[5m5UtripanjeNavadno se ignorirano; moderni terminali ga prikažejo kot navadno besedilo.
\e[7m7Obratna: zamenja ospredje in ozadje
\e[8m8Skrito: besedilo je tam vendar se ne nariše
\e[9m9Prečrtano
\e[21m21Dvojna podčrtanostNekateri terminali berejo 21 kot »prekliči krepko«.
\e[22m22Običajna intenzivnost: prekliči krepko in zatemnitev
\e[23m23Prekliči poševno
\e[24m24Prekliči podčrtanost
\e[27m27Prekliči obratno
\e[29m29Prekliči prečrtanost

Barva besedila

17

Osem osnovnih barv in njihove svetle niti. To, kar bralec dejansko vidi, je interpretacija svojega teme terminalska — »rdeča« je položaj v paleti, ne heksadecimalna vrednost.

ZaporedjeParameterUčinek
\e[30m30Črno besedilo
\e[31m31Rdeče besedilo
\e[32m32Zeleno besedilo
\e[33m33Rumeno besedilo
\e[34m34Modro besedilo
\e[35m35Magenčno besedilo
\e[36m36Ciansko besedilo
\e[37m37Belo besedilo
\e[39m39Nazaj na privzeto barvo besedila
\e[90m90Svetlo črno besedilo
\e[91m91Svetlo rdeče besedilo
\e[92m92Svetlo zeleno besedilo
\e[93m93Svetlo rumeno besedilo
\e[94m94Svetlo modro besedilo
\e[95m95Svetlo magenčno besedilo
\e[96m96Svetlo ciansko besedilo
\e[97m97Svetlo belo besedilo

Barva ozadja

17

Ista paleta premaknjena za deset. Koda ozadja postavi celico za besedilom in velja, dokler je ne resetiraš.

ZaporedjeParameterUčinek
\e[40m40Črno ozadje
\e[41m41Rdeče ozadje
\e[42m42Zeleno ozadje
\e[43m43Rumeno ozadje
\e[44m44Modro ozadje
\e[45m45Magenčno ozadje
\e[46m46Ciansko ozadje
\e[47m47Belo ozadje
\e[49m49Nazaj na privzeto ozadje
\e[100m100Svetlo črno ozadje
\e[101m101Svetlo rdeče ozadje
\e[102m102Svetlo zeleno ozadje
\e[103m103Svetlo rumeno ozadje
\e[104m104Svetlo modro ozadje
\e[105m105Svetlo magenčno ozadje
\e[106m106Svetlo ciansko ozadje
\e[107m107Svetlo belo ozadje

256 barv in true color

4

Dve razširitvi istega SGR mehanizma. Obe sta široko vendar ne univerzalno podprti; terminal, ki ju ne razume, zaporedje navadno ignorirano namesto da ga izpiše.

ZaporedjeParameterUčinek
\e[38;5;<n>m38;5;nBesedilo v barvi palete n, 0–2550–15 je šestnajstica zgoraj, 16–231 barvna kocka 6×6×6, 232–255 lestvica sivega.
\e[48;5;<n>m48;5;nOzadje v barvi palete n, 0–255
\e[38;2;<r>;<g>;<b>m38;2;r;g;bBesedilo v natančni 24-bitni barvi
\e[48;2;<r>;<g>;<b>m48;2;r;g;bOzadje v natančni 24-bitni barvi

Premikanje kurzorja

11

Premiki se ne pomikajo niti se ne lomijo: kurzor že na vrhu zaslona ignorira zahtevo za gor.

ZaporedjeParameterUčinek
\e[<n>AANavzgor za n vrstic
\e[<n>BBNavzdol za n vrstic
\e[<n>CCDesno za n stolpcev
\e[<n>DDLevo za n stolpcev
\e[<n>EENavzdol za n vrstic, na začetek vrstice
\e[<n>FFNavzgor za n vrstic, na začetek vrstice
\e[<n>GGNa stolpec n v trenutni vrstici
\e[<row>;<col>HHNa absolutno vrstico in stolpec, šteto od 1
\e[ssZapomni si položaj kurzorja
\e[uuPojdi nazaj na zapomnjeni položaj
\e[6n6nVprašaj terminal, kje je kurzorTerminal odgovori na standardni vhod kot \e[<vrstica>;<stolpec>R — edino zaporedje tu, ki vrne odgovor.

Brisanje

7

Brisanje zapiše prostore s trenutno barvo ozadja; kurzor se ne premakne.

ZaporedjeParameterUčinek
\e[0J0JObriši od kurzorja do konca zaslona
\e[1J1JObriši od začetka zaslona do kurzorja
\e[2J2JObriši celoten zaslonKurzor ostane, kjer je bil — zato se navadno kombinira s \e[H.
\e[3J3JObriši tudi pomnjenje drsenja
\e[0K0KObriši od kurzorja do konca vrstice
\e[1K1KObriši od začetka vrstice do kurzorja
\e[2K2KObriši celotno vrstico\r\e[2K je običajen način za risanje napredka na mestu.

Terminalski načini

8

Zasebni načini, označeni z vprašajem. Spremenijo kako se terminal obnaša, ne kako en kos besedila izgleda, in vsak ga je treba pred izidom programa izklopiti.

ZaporedjeParameterUčinek
\e[?25l?25lSkrij kurzor
\e[?25h?25hPokaži kurzor
\e[?1049h?1049hPreklopi na nadomestni zaslonTo, kar polnozaslonski program uporabi, da zgodovina lupine pod njim preživi.
\e[?1049l?1049lPreklopi nazaj na glavno zaslonskega
\e[?7h?7hLomi dolge vrstice na desnem robu
\e[?7l?7lPusti dolge vrstice, da tečejo čez desno robove
\e[?2004h?2004hPreslišaj obriski lepkaPrilepljeno besedilo pride ovito v \e[200~ in \e[201~, tako da lupina razlikuje tipkanje od lepljenja.
\e[?2004l?2004lIzključi obriski lepka

FAQ

Zakaj ostane izhod obarvano tudi po koncu programa?
Ker ga nič ni resetiralo. Koda barve velja, dokler jo ne zamenja druga, zato program, ki se konča sredi barve, pusti lupini obarvano pozivko. Pred izhod izpišite \e[0m — tudi na poti napake, ki jo čisto pozabijo.
Kakšna je razlika med \e, \033 in \x1b?
Nič. Vsi trije so isti bajt 0x1B, napisan na način, kako ga ta jezik piše: \e v bashi in zsh, \033 v C in v echo -e, \x1b v Pythonu, Go, Rustu in JavaScriptu, \u001b tam, kjer je dovoljen le Unicode escape, kot v JSON in Javi.
Kako jih iz dnevniške datoteke odstranim?
Prilepite jo v orodje za brisanje ANSI kod na tej strani. Odstrani zaporedje za barvo, kurzor in način in lahko barve namesto brisanja pretvori v HTML ali Markdown — kar želite, če je bila svetloba smisla dnevnika.
Ali naj barve vpišem direktno ali uporabim knjižnico?
Za kaj daljšega kot nekaj vrstic uporabite knjižnico — preveri, ali je izhod sploh terminal. Kode barv zapisane v cev ali datoteko v njej ostanejo, in ravno tako se v dnevnike gradnje dobi šum.
Je krepko enako kot svetlo?
Zgodovinsko ja, in na nekaterih terminalih še vedno. Koda 1 je bila definirana kot krepko, vendar so jo mnogi terminali spremenili s preklopom na svetlo polovico palete, zato sta lahko krepka rdeča in svetla rdeča videti enako. Obseg 90–97 obstaja, da lahko zaprosite svetlo brez krepke.