Únikový kód ANSI - ANSI escape code

ANSI X3.64 (ISO 6429)
Htop.png
Výstup htop -monitoru systému , aplikace ncurses (která používá SGR a další řídicí sekvence ANSI/ISO).
Standard
Klasifikace Řídicí kód založený na ISO/IEC 2022 a sada řídicí sekvence
Jiná související kódování Další standardy řídicí funkce: ITU T.101 , JIS X 0207 , ISO 6630 , DIN 31626 , ETS 300 706

Únikové sekvence ANSI jsou standardem pro pásmovou signalizaci pro ovládání umístění kurzoru, barvy, stylu písma a dalších možností na video textových terminálech a emulátorech terminálů . Do textu jsou vloženy určité sekvence bajtů , většina začíná únikovým znakem ASCII a závorkovým znakem. Terminál interpretuje tyto sekvence jako příkazy, nikoli jako text pro zobrazení doslovně.

Sekvence ANSI byly zavedeny v 70. letech minulého století, aby nahradily sekvence specifické pro prodejce, a začátkem 80. let se rozšířily na trhu počítačového vybavení. Používají se ve vývojových, vědeckých, komerčních textových aplikacích a také v systémech vývěsek, které nabízejí standardizované funkce.

Ačkoli hardwarové textové terminály jsou v 21. století stále vzácnější, relevance standardu ANSI přetrvává, protože velká většina terminálových emulátorů a příkazových konzolí interpretuje alespoň část standardu ANSI.

Dějiny

Téměř všichni výrobci video terminálů přidali únikové sekvence specifické pro dodavatele k provádění operací, jako je umístění kurzoru na libovolné pozice na obrazovce. Jedním z příkladů je terminál VT52 , který umožnil umístit kurzor na místo x, y na obrazovce odesláním ESCznaku, Yznaku a poté dvou znaků představujících číselné hodnoty rovnající se umístění x, y plus 32 (tedy počínaje znakem mezery ASCII a vyhýbáním se kontrolním znakům). Hazeltine 1500 měl podobnou funkci, vyvolána pomocí ~, DC1a X a Y pozice odděleny čárkou. Zatímco dva terminály měly v tomto ohledu identickou funkčnost, pro jejich vyvolání bylo nutné použít různé řídicí sekvence.

Protože se tyto sekvence lišily pro různé terminály, musely být vytvořeny propracované knihovny jako termcap („schopnosti terminálu“) a nástroje jako tput, aby programy mohly používat stejné API pro práci s jakýmkoli terminálem. Mnoho z těchto terminálů navíc vyžadovalo odesílání čísel (například řádků a sloupců) jako binárních hodnot znaků; pro některé programovací jazyky a pro systémy, které interně nepoužívaly ASCII, bylo často obtížné převést číslo na správný znak.

Standard ANSI se pokusil tyto problémy vyřešit vytvořením sady příkazů, kterou budou používat všechny terminály, a vyžadující přenos všech číselných informací jako čísel ASCII. První standard v řadě byl ECMA-48, přijatý v roce 1976. Šlo o pokračování série standardů kódování znaků, první z nich byl ECMA-6 z roku 1965, 7bitový standard, ze kterého pochází ISO 646 . Název „sekvence úniku ANSI“ pochází z roku 1979, kdy ANSI přijalo ANSI X3.64. Výbor ANSI X3L2 spolupracoval s výborem ECMA TC 1 na vytvoření téměř identických standardů. Tyto dvě normy byly sloučeny do mezinárodní normy ISO 6429. V roce 1994 ANSI svoji normu stáhla ve prospěch mezinárodní normy.

Terminál DEC VT100
Terminál pro zobrazení videa DEC VT100.

Prvním populárním video terminálem na podporu těchto sekvencí byl Digital VT100 , představený v roce 1978. Tento model byl na trhu velmi úspěšný, což vyvolalo řadu klonů VT100, mezi prvními a nejpopulárnějšími z nich byl mnohem dostupnější Zenith Z -19 v roce 1979. Mezi další patří Qume QVT-108, Televideo TVI-970, Wyse WY-99GT a také volitelné režimy „VT100“ nebo „VT103“ nebo „ANSI“ s různým stupněm kompatibility u mnoha dalších značek. Popularita těchto postupně vedla k tomu, že stále více softwaru (zejména systémů vývěsek a dalších online služeb ) předpokládalo, že únikové sekvence fungovaly, což vedlo k tomu, že je podporovaly téměř všechny nové terminály a programy emulátorů.

V roce 1981 byl ANSI X3.64 přijat pro použití ve vládě USA publikací FIPS 86. Později americká vláda přestala duplikovat průmyslové standardy, takže FIPS pub. 86 byl stažen.

ECMA-48 byl několikrát aktualizován a v současné době je v 5. vydání, od roku 1991. Je také přijat ISO a IEC jako standard ISO/IEC 6429 . Verze je přijata jako japonský průmyslový standard jako JIS X 0211 .

Související normy obsahují ITU T.61 , na Teletex standard, a ISO / IEC 8613 , v Architektura otevřených dokumentů normy (především ISO / IEC 8613-6 a ITU T.416). Tyto dva systémy sdílejí mnoho únikových kódů se systémem ANSI s rozšířením, které nemusí mít pro počítačové terminály smysl. Oba systémy se rychle přestaly používat, ale ECMA-48 označuje rozšíření v nich použitá jako vyhrazená.

Podpora platformy

Unixové systémy

Ačkoli knihovny typu termcap / terminfo byly primárně vyvíjeny na Unixu a pro něj, v polovině 80. let mohly programy běžící na operačních systémech podobných Unixu téměř vždy předpokládat, že používají terminál nebo emulátor podporující sekvence ANSI; to vedlo k rozšířenému používání ANSI programy běžícími na těchto platformách. Například mnoho her a skriptů prostředí Shell a nástroje, jako jsou seznamy barevných adresářů, přímo zapisují sekvence ANSI, a proto je nelze použít na terminálu, který je neinterpretuje. Mnoho programů, včetně textových editorů, jako jsou vi a GNU Emacs , používá termcap nebo terminfo nebo používá knihovny, jako jsou kletby, které používají termcap nebo terminfo, a tedy teoreticky podporují terminály jiné než ANSI, ale to je v dnešní době tak zřídka testováno, že jsou s těmito terminály pravděpodobně nebude fungovat .

Emulátor terminálu Xterm
Emulátor terminálu Xterm.

Terminálové emulátory pro komunikaci s místními programy i vzdálenými počítači a konzolí textového systému téměř vždy podporují únikové kódy ANSI. To zahrnuje emulátory terminálu, jako je xterm , rxvt , GNOME Terminal a Konsole na systémech s okenními systémy na bázi X11 nebo Wayland , a emulátory terminálu Terminal.app a jiných výrobců, jako je iTerm2 v systému macOS .

DOS, OS/2 a Windows

MS-DOS 1.x nepodporoval ANSI ani jiné únikové sekvence. Základní BIOS interpretoval pouze několik řídicích znaků ( BEL , CR , LF , BS ), takže bylo téměř nemožné provádět jakýkoli druh aplikace na celou obrazovku. Jakékoli efekty zobrazení musely být prováděny pomocí volání systému BIOS, která byla notoricky pomalá, nebo přímou manipulací s hardwarem IBM PC.

DOS 2.0 představil možnost přidat ovladač pro sekvence escape ANSI - na de facto standardní bytost ANSI.SYS , ale jiní, jako ANSI.COM , NANSI.SYS a ANSIPLUS.EXE se používají stejně (jsou výrazně rychlejší, protože obejít BIOS). Pomalost a skutečnost, že nebyl ve výchozím nastavení nainstalován, software zřídka využívají; místo toho aplikace nadále přímo manipulovaly s hardwarem, aby získaly potřebné zobrazení textu. Ovladače ANSI.SYS a podobné nadále fungovaly v systému Windows 9xWindows ME a v systémech odvozených z NT pro 16bitové starší programy prováděné pod NTVDM .

Mnoho klonů DOS bylo schopno interpretovat sekvence a nevyžadují načtení samostatného ovladače ANSI. PTS-DOS i Concurrent DOS , Multiuser DOS a REAL/32 mají vestavěnou podporu (plus řadu rozšíření). OS/2 měl příkaz ANSI, který tyto sekvence povolil.

Windows Console nepodporoval ANSI sekvence escape, ani Microsoft poskytnout jakýkoli způsob, který jim umožní. Některé náhrady nebo doplňky pro okna konzoly, jako je JP Software TCC (dříve 4NT), Michael J. Mefford je ANSI.COM Jason Hoodově ANSICON a Maximus5 je ConEmu interpretovány ANSI sekvence escape tištěné programy. Balíček Pythonu interně interpretovaný únikové sekvence ANSI v textu, který se tiskne, jejich překlad do volání pro manipulaci s pozicí barvy a kurzoru, aby bylo snazší přenášet kód Pythonu pomocí ANSI do Windows. Cygwin provádí podobný překlad všech výstupů zapsaných do konzoly pomocí deskriptorů souborů Cygwin, filtrování se provádí pomocí výstupních funkcí souboru cygwin1.dll , což umožňuje přenesení kódu POSIX C do systému Windows.

V roce 2016 společnost Microsoft vydala aktualizaci Windows 10 verze 1511, která neočekávaně implementovala podporu únikových sekvencí ANSI, více než dvě desetiletí po debutu systému Windows NT. To bylo provedeno společně s Windows Subsystem for Linux , což umožňuje terminálovému softwaru podobnému Unixu používat sekvence v konzole Windows. Toto je bohužel ve výchozím nastavení vypnuto, ale Windows PowerShell 5.1 to povolil. PowerShell 6 umožnil vložit potřebný znak ESC do řetězce s `e. Windows Terminal , představený v roce 2019, ve výchozím nastavení podporuje sekvence a Microsoft hodlá nahradit Windows Console terminálem Windows.

Atari ST

Atari ST použit příkaz systém přizpůsobený z VT52 s některými rozšíření pro podporu barev, spíše než podporovat ANSI escape kódy.

AmigaOS

AmigaOS nejen interpretuje sekvence kódu ANSI pro textový výstup na obrazovku, ale ovladač tiskárny AmigaOS je také interpretuje (s proprietárními rozšířeními pro AmigaOS) a převádí je do kódů požadovaných pro konkrétní tiskárnu, která je skutečně připojena.

Následky ovládání stylu okna Amiga CLI (shell)
Účinek
ESC [ nu Nastaví maximální délku řádků v okně na n.
ESC [ nt Nastaví maximální počet řádků v okně na n.
ESC [ nx Spustí text n pixelů od levého okraje okna.
ESC [ ny Spustí text n pixelů od horního okraje okna.

VMS / OpenVMS

VMS byl navržen tak, aby byl interaktivně řízen pomocí textových video terminálů Digital, jako je výše uvedený VT100 ; později s grafickými emulátory terminálů, jako je VWS Terminal, DECTerm a xterm.

Popis

Ovládací znaky

Ačkoli to není technicky součástí standardu, téměř všichni uživatelé předpokládají některé funkce některých jednobajtových znaků. To se používá ke zkrácení množství přenesených dat nebo k provedení některých funkcí, které nejsou k dispozici z únikových sekvencí:

Populární řídicí znaky (není vyčerpávající)
^ C0 Zkr název Účinek
^G 7 BEL Zvonek Vydává slyšitelný hluk.
^H 8 BS Backspace Posune kurzor doleva (ale může se „zalamovat zpět“, pokud je kurzor na začátku řádku).
^Já 9 HT Tab Přesune kurzor doprava na další násobek 8.
^J 0x0A LF Line Feed Přejde na další řádek, posune zobrazení nahoru, pokud je ve spodní části obrazovky. Obvykle se nepohybuje horizontálně, ačkoli programy by se na to neměly spoléhat.
^L 0x0C FF Formulář Přesunout tiskárnu na začátek další stránky. Obvykle se nepohybuje horizontálně, ačkoli programy by se na to neměly spoléhat. Účinek na video terminály se liší.
^M 0x0D ČR Návrat vozíku Přesune kurzor na sloupec nula.
^[ 0x1B ESC Uniknout Spustí všechny únikové sekvence

Únikové sekvence se liší délkou. Obecný formát únikové sekvence kompatibilní s ANSI je definován normou ANSI X3.41 (ekvivalent ECMA-35 nebo ISO/IEC 2022). Únikové sekvence se skládají pouze z bytů v rozsahu 0x20—0x7F (všechny nekontrolované znaky ASCII) a lze je analyzovat, aniž byste se dívali dopředu. Chování, když dojde k výskytu řídicího znaku, bajtu s vysokou bitovou sadou nebo bajtu, který není součástí žádné platné sekvence, před koncem, není definováno.

Fe Escape sekvence

Pokud za ESCním následuje bajt v rozsahu 0x40 až 0x5F, je to tento typ. Delegováno na příslušnou normu řídicího kódu C1 . V souladu s tím všechny únikové sekvence odpovídající řídicím kódům C1 z ANSI X3.64 / ECMA-48 dodržují tento formát.

Standard říká, že v 8bitových prostředích mohou být řídicí funkce odpovídající typovým Feúnikovým sekvencím (těm ze sady řídících kódů C1 ) reprezentovány jako jednotlivé bajty v rozsahu 0x80–0x9F. Na moderních zařízeních se však tyto kódy často používají pro jiné účely, například pro části UTF-8 nebo pro znaky CP-1252 , takže se obvykle používá pouze 2bajtová sekvence. V případě UTF-8 může být řídicí kód C1 zakódován jako dva bajty (např. 0xC2,0x8E pro U+008E ), ale tímto způsobem není uloženo žádné místo.

Některé typy Fe (sada prvků C1) únikové sekvence ANSI (není vyčerpávající)
C1 Zkr název Účinek
ESC N 0x8E SS2 Single Shift Two Vyberte jeden znak z jedné z alternativních znakových sad . SS2 vybírá znakovou sadu G2 a SS3 vybírá znakovou sadu G3. V 7bitovém prostředí následuje jeden nebo více GL bytů (0x20–0x7F) určujících znak z této sady. V 8bitovém prostředí to mohou být místo toho bajty GR (0xA0–0xFF).
ESC O 0x8F SS3 Single Shift tři
ESC P 0x90 DCS Řetězec ovládání zařízení Ukončeno ST. Použití této sekvence Xtermem zahrnuje definování klíčů definovaných uživatelem a vyžádání nebo nastavení dat Termcap/Terminfo.
ESC [ 0x9B CSI Úvod do sekvence řízení Spustí většinu užitečných sekvencí ukončených bajtem v rozsahu 0x40 až 0x7E.
ESC \ 0x9C SVATÝ Smyčcový terminátor Ukončí řetězce v jiných ovládacích prvcích.
ESC] 0x9D OSC Příkaz operačního systému Spustí řídicí řetězec, který má operační systém používat, ukončený ST.
ESC X 0x98 SOS Začátek řetězce Převezme argument řetězce textu ukončeného ST. Použití těchto sekvencí řízení řetězců je definováno aplikací nebo zásadou ochrany osobních údajů. Tyto funkce jsou implementovány jen zřídka a xterm tyto argumenty ignoruje. Někteří klienti Kermit umožňují serveru automaticky spouštět příkazy Kermit na klientovi vložením do sekvencí APC; toto je potenciální bezpečnostní riziko, pokud je server nedůvěryhodný.
ESC ^ 0x9E ODPOLEDNE Zpráva o ochraně osobních údajů
ESC _ 0x9F APC Příkaz aplikačního programu

Sekvence CSI (Control Sequence Introducer)

U příkazů Introduction Control Sequence nebo CSI ESC [následuje libovolné číslo (včetně žádného) z „bajtů parametrů“ v rozsahu 0x30–0x3F (ASCII 0–9:;<=>?), poté libovolný počet „mezibajtů“ v rozsahu 0x20–0x2F (ASCII mezera a !"#$%&'()*+,-./), pak nakonec o jeden „konečný bajt“ v rozsahu 0x40–0x7E (ASCII @A–Z[\]^_`a–z{|}~).

Všechny běžné sekvence pouze používají parametry jako řadu čísel oddělených středníkem, například 1;2;3. K chybějícím číslům se přistupuje jako 0( 1;;3chová se jako prostřední číslo 0a v ESC[mpřípadě 0resetovacího kódu vůbec žádné parametry ). Některé sekvence (například CUU) jsou 0považovány 1za, aby chybějící parametry byly užitečné.

Podskupina uspořádání byla prohlášena za „soukromou“, aby výrobci terminálů mohli vkládat své vlastní sekvence bez konfliktu se standardem. Sekvence obsahující bajty parametrů <=>?nebo konečné bajty 0x70–0x7E ( p–z{|}~) jsou soukromé.

Chování terminálu není definováno v případě, že sekvence CSI obsahuje jakýkoli znak mimo rozsah 0x20–0x7E. Tyto nepovolené znaky jsou buď řídicí znaky C0 (rozsah 0–0x1F), DEL (0x7F), nebo bajty s vysokou bitovou sadou. Možné reakce jsou ignorování bajtu, jeho okamžité zpracování a dále zda pokračovat se sekvencí CSI, okamžitě ji přerušit nebo její zbytek ignorovat.

Některé řídicí sekvence ANSI (není vyčerpávající seznam)
Zkr název Účinek
CSI n A CUU Kurzor nahoru Přesune kurzor o n (výchozí 1) buněk v daném směru. Pokud je kurzor již na okraji obrazovky, nemá to žádný účinek.
CSI n B CUD Kurzor dolů
CSI n C Manžeta Kurzor vpřed
CSI n D MLÁDĚ Kurzor zpět
CSI n E CNL Kurzor Další řádek Přesune kurzor na začátek řádku n (výchozí 1) řádků dolů. (ne ANSI.SYS )
CSI n F CPL Kurzor Předchozí řádek Přesune kurzor na začátek řádku n (výchozí 1) řádků nahoru. (ne ANSI.SYS )
CSI n G CHA Kurzor horizontální absolutní Přesune kurzor do sloupce n (výchozí 1). (ne ANSI.SYS )
CSI  n  ; m  H POHÁR Pozice kurzoru Přesune kurzor na řádek n , sloupec m . Hodnoty jsou založeny na 1 a výchozí jsou 1(levý horní roh), pokud jsou vynechány. Sekvence, která CSI ;5Hje synonymem pro CSI 1;5H, stejně jako CSI 17;Hje stejná jako CSI 17HaCSI 17;1H
CSI n J ED Vymazat na displeji Vymaže část obrazovky. Pokud n je 0(nebo chybí), smažte od kurzoru na konec obrazovky. Pokud n je 1, vyčistit od kurzoru na začátek obrazovky. Pokud n je 2, jasné celou obrazovku (a přesune kurzor do horní vlevo na DOS ANSI.SYS ). Pokud n je 3, zřejmé, celá obrazovka a odstranit všechny řádky uložené v rolování vyrovnávací paměti (tato funkce byla přidána pro xterm a je podporován jiného terminálu aplikace).
CSI n K EL Vymazat v řadě Vymaže část řádku. Pokud n je 0(nebo chybí), vymažte od kurzoru na konec řádku. Pokud n je 1, vyčistit od kurzoru do začátku řádku. Pokud n je 2, zřejmé, celý řádek. Poloha kurzoru se nemění.
CSI n S SU Posunout nahoru Posuňte celou stránku nahoru o n (výchozí 1) řádků. Dole jsou přidány nové řádky. (ne ANSI.SYS )
CSI n T SD Posunout dolů Posuňte celou stránku dolů o n (výchozí 1) řádků. V horní části jsou přidány nové řádky. (ne ANSI.SYS )
CSI n  ; m f HVP Horizontální vertikální poloha Stejné jako CUP, ale počítá se jako funkce efektoru formátu (jako CR nebo LF ), nikoli jako funkce editoru (jako CUD nebo CNL). To může vést k odlišnému zacházení v určitých režimech terminálu.
CSI n m SGR Vyberte Grafické vykreslení Nastaví barvy a styl znaků následujících za tímto kódem
CSI 5i Zapnutý port AUX Povolte aux sériový port obvykle pro místní sériovou tiskárnu
CSI 4i Vypnutý port AUX Obvykle vypněte pomocný sériový port pro místní sériovou tiskárnu

CSI 6n DSR Zpráva o stavu zařízení Přenáší hlášení polohy kurzoru (CPR) ESC[n;mR, kde n je řádek a m je sloupec.)
Některé oblíbené soukromé sekvence
Zkr název Účinek
CSI s SCP, SCOSC Uložit aktuální pozici kurzoru Uloží pozici/stav kurzoru v režimu konzoly SCO. V režimu svislé rozdělené obrazovky se místo toho používá k nastavení (jako ) nebo resetování levého a pravého okraje. CSI n ; n s
CSI u RCP, SCORC Obnovte uloženou pozici kurzoru Obnoví pozici/stav kurzoru v režimu konzoly SCO.
CSI? 25 h DECTCEM Ukazuje kurzor z VT220 .
CSI? 25 l DECTCEM Skryje kurzor.
CSI? 1049 h Povolit alternativní vyrovnávací paměť obrazovky z xterm
CSI? 1049 l Zakažte alternativní vyrovnávací paměť obrazovky z xterm
CSI? 2004 h Zapněte režim vložení v závorkách. Text vložený do terminálu bude obklopen znakem ESC [200~a ESC [201~a znaky v něm by neměly být považovány za příkazy (například ve Vimu). Z xterm
CSI? 2004 l Vypněte režim vložení v závorkách.

Parametry SGR (Select Graphic Rendition)

Select Graphic Rendition (SGR) nastavuje atributy zobrazení. Ve stejné sekvenci lze nastavit několik atributů oddělených středníkem. Každý atribut zobrazení zůstane v platnosti, dokud jej následující výskyt SGR nevynuluje. Pokud nejsou zadány žádné kódy, CSI mpovažuje se za CSI 0 m(reset / normální).

název Poznámka
0 Reset nebo normální Všechny atributy vypnuty
1 Tučná nebo zvýšená intenzita Stejně jako u slabých je změna barvy vynálezem PC (SCO / CGA ).
2 Slabý, snížená intenzita nebo tlumený Může být implementováno jako lehká váha písma, například tučně.
3 Kurzíva Není široce podporováno. Někdy jsou považovány za inverzní nebo mrkající.
4 Zdůraznit Stylová rozšíření existují pro Kitty, VTE, mintty a iTerm2.
5 Pomalé blikání Méně než 150 za minutu
6 Rychlé blikání MS-DOS ANSI.SYS, 150+ za minutu; není široce podporován
7 Převrátit video nebo převrátit Vyměňte barvy popředí a pozadí; nekonzistentní emulace
8 Skrýt nebo skrýt Není široce podporováno.
9 Přeškrtnutá , nebo stávky Znaky čitelné, ale označené jako pro smazání.
10 Primární (výchozí) písmo
11–19 Alternativní písmo Vyberte alternativní písmo n - 10
20 Fraktur (gotický) Podporováno jen zřídka
21 Dvojitě podtrženo; nebo: není tučně Double-underline za ECMA-48, ale zakáže tučné intenzitu na několika terminálů, a to i v linuxovém jádře je konzole před verze 4.17.
22 Normální intenzita Ani tučné, ani slabé; barevné změny tam, kde je intenzita implementována jako taková.
23 Ani kurzívou, ani blackletterem
24 Není podtrženo Ani jednotlivě, ani dvakrát podtrženo
25 Nebliká
26 Proporcionální rozteč ITU T.61 a T.416, není známo, že by měly být použity na terminálech
27 Není obrácen
28 Odhalit Neskrýváno
29 Neškrtnuto
30–37 Nastavte barvu popředí
38 Nastavte barvu popředí Další argumenty jsou 5;nnebo2;r;g;b
39 Výchozí barva popředí Definovaná implementace (podle standardu)
40–47 Nastavit barvu pozadí
48 Nastavit barvu pozadí Další argumenty jsou 5;nnebo2;r;g;b
49 Výchozí barva pozadí Definovaná implementace (podle standardu)
50 Zakázat proporcionální mezery T.61 a T.416
51 Zarámovaný Implementováno jako „ volič variací emodži “ v mintty.
52 Obkroužený
53 Podtrženo
54 Ani zarámovaný, ani obklopený
55 Není podtrženo
58 Nastavit barvu podtržení Není ve standardu; implementováno v Kitty, VTE, mintty a iTerm2. Další argumenty jsou 5;nnebo2;r;g;b .
59 Výchozí barva podtržení Není ve standardu; implementováno v Kitty, VTE, mintty a iTerm2.
60 Ideogram podtržený nebo pravá boční čára Podporováno jen zřídka
61 Ideogram dvojité podtržení nebo dvojitá čára na pravé straně
62 Ideogram nad čárou nebo čára na levé straně
63 Ideogram s dvojitým překryvem nebo dvojitou čarou na levé straně
64 Označení napětí ideogramem
65 Žádné atributy ideogramu Resetovat efekty všech 60-64
73 Horní index Implementováno pouze v mintty
74 Dolní index
75 Ani horní ani dolní index
90–97 Nastavte jasnou barvu popředí Není ve standardu; původně implementoval aixterm
100–107 Nastavte jasnou barvu pozadí

Barvy

3bitové a 4bitové

Původní specifikace měla pouze 8 barev a pouze jim dala názvy. Parametry SGR 30–37 zvolily barvu popředí, zatímco 40–47 vybralo pozadí. Docela málo terminálů implementovalo „tučné“ (kód SGR 1) jako jasnější barvu než jiné písmo, což poskytuje 8 dalších barev v popředí. Obvykle je nemůžete získat jako barvy pozadí, i když to někdy umožňuje inverzní video (kód SGR 7). Příklady: použití černých písmen na bílém pozadí, použití ESC[30;47mčervené barvy, použití ESC[31mjasně červené barvy ESC[1;31m. Chcete -li resetovat barvy na jejich výchozí hodnoty, použijte ESC[39;49m(na některých terminálech není podporováno) nebo resetujte všechny atributy pomocí ESC[0m. Pozdější terminály přidaly možnost přímo specifikovat „jasné“ barvy s 90–97 a 100–107.

Když hardware začal používat 8bitové převodníky digitálního signálu na analogový (DAC), několik kusů softwaru těmto názvům přiřadilo 24bitová barevná čísla. Níže uvedený graf ukazuje výchozí hodnoty odeslané do DAC pro některý běžný hardware a software; ve většině případů jsou konfigurovatelné.

FG BG název VGA
Konzola Windows XP
Windows
PowerShell
Kód Visual Studio
Konzole Windows 10
Terminal.app Tmel mIRC xterm Ubuntu Terminál Eclipse
30 40 Černá 0, 0, 0 12, 12, 12 0, 0, 0 1, 1, 1 0, 0, 0
31 41 Červené 170, 0, 0 128, 0, 0 205, 49, 49 197, 15, 31 194, 54, 33 187, 0, 0 127, 0, 0 205, 0, 0 222, 56, 43 205, 0, 0
32 42 Zelená 0, 170, 0 0, 128, 0 13, 188, 121 19, 161, 14 37, 188, 36 0, 187, 0 0, 147, 0 0, 205, 0 57, 181, 74 0, 205, 0
33 43 Žlutá 170, 85, 0 128, 128, 0 238, 237, 240 229, 229, 16 193, 156, 0 173, 173, 39 187, 187, 0 252, 127, 0 205, 205, 0 255, 199, 6 205, 205, 0
34 44 Modrý 0, 0, 170 0, 0, 128 36, 114, 200 0, 55, 218 73, 46, 225 0, 0, 187 0, 0, 127 0, 0, 238 0, 111, 184 0, 0, 238
35 45 Purpurová 170, 0, 170 128, 0, 128 1, 36, 86 188, 63, 188 136, 23, 152 211, 56, 211 187, 0, 187 156, 0, 156 205, 0, 205 118, 38, 113 205, 0, 205
36 46 Tyrkysová 0, 170, 170 0, 128, 128 17, 168, 205 58, 150, 221 51, 187, 200 0, 187, 187 0, 147, 147 0, 205, 205 44, 181, 233 205, 0, 205
37 47 Bílý 170, 170, 170 192, 192, 192 229, 229, 229 204, 204, 204 203, 204, 205 187, 187, 187 210, 210, 210 229, 229, 229 204, 204, 204 229, 229, 229
90 100 Jasně černá (šedá) 85, 85, 85 128, 128, 128 102, 102, 102 118, 118, 118 129, 131, 131 85, 85, 85 127, 127, 127 127, 127, 127 128, 128, 128 0, 0, 0
91 101 Jasně červená 255, 85, 85 255, 0, 0 241, 76, 76 231, 72, 86 252, 57, 31 255, 85, 85 255, 0, 0 255, 0, 0 255, 0, 0 255, 0, 0
92 102 Světle zelená 85, 255, 85 0, 255, 0 35, 209, 139 22, 198, 12 49, 231, 34 85, 255, 85 0, 252, 0 0, 255, 0 0, 255, 0 0, 255, 0
93 103 Světle žlutá 255, 255, 85 255, 255, 0 245, 245, 67 249, 241, 165 234, 236, 35 255, 255, 85 255, 255, 0 255, 255, 0 255, 255, 0 255, 255, 0
94 104 Zářivě modrá 85, 85, 255 0, 0, 255 59, 142, 234 59, 120, 255 88, 51, 255 85, 85, 255 0, 0, 252 92, 92, 255 0, 0, 255 92, 92, 255
95 105 Světle purpurová 255, 85, 255 255, 0, 255 214, 112, 214 180, 0, 158 249, 53, 248 255, 85, 255 255, 0, 255 255, 0, 255 255, 0, 255 255, 0, 255
96 106 Světle azurová 85, 255, 255 0, 255, 255 41, 184, 219 97, 214, 214 20, 240, 240 85, 255, 255 0, 255, 255 0, 255, 255 0, 255, 255 0, 255, 255
97 107 Zářivě bíla 255, 255, 255 255, 255, 255 229, 229, 229 242, 242, 242 233, 235, 235 255, 255, 255 255, 255, 255 255, 255, 255 255, 255, 255 255, 255, 255
8bitové

Jak 256 barevných vyhledávací tabulky se stal obyčejný na grafických kartách, escape sekvence byly přidány do vybrat z předem definované sady 256 barev:

ESC[38;5;⟨n⟩m Select foreground color
ESC[48;5;⟨n⟩m Select background color
  0-  7:  standard colors (as in ESC [ 30–37 m)
  8- 15:  high intensity colors (as in ESC [ 90–97 m)
 16-231:  6 × 6 × 6 cube (216 colors): 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5)
232-255:  grayscale from black to white in 24 steps

Na ITU ‚S T.416 Informační technologie - Architektura otevřených dokumentů (ODA) a formát výměny: obsah Character architektury použití‚:‘jako oddělovač znaků namísto:

ESC[38;5;⟨n⟩m Select foreground color      where n is a number from the table below
ESC[48;5;⟨n⟩m Select background color
256barevný režim-popředí: ESC [38; 5; #m pozadí: ESC [48; 5; #m
Standardní barvy Barvy vysoké intenzity
 0   1   2   3   4   5   6   7   8   9  10 11 12 13 14 15
216 barev
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231
Barvy ve stupních šedi
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255

Došlo také k podobnému, ale nekompatibilnímu 88-barevnému kódování pomocí stejné únikové sekvence, viděné v rxvta xterm-88color. Kromě barevných kódů se o schématu moc neví. Používá barevnou kostku 4 × 4 × 4.

24bitové

Protože grafické karty „skutečné barvy“ s 16 až 24 bity barev začaly být běžné, aplikace začaly podporovat 24bitové barvy. Mezi emulátory terminálu podporující nastavení 24bitových barev popředí a pozadí s únikovými sekvencemi patří Xterm, Konsole KDE a iTerm, stejně jako všechny terminály založené na libvte, včetně terminálu GNOME .

ESC[ 38;2;⟨r⟩;⟨g⟩;⟨b⟩ m Select RGB foreground color
ESC[ 48;2;⟨r⟩;⟨g⟩;⟨b⟩ m Select RGB background color

ITU ‚s T.416 Informační technologie - Architektura otevřených dokumentů (ODA) a formát výměny: obsah Character architektury, která byla přijata jako ISO / IEC mezinárodní normy 8613-6 poskytuje alternativní verzi, která se zdá být méně podporovány. Parametry za '2', tj. I r, g, b jsou volitelné. Všimněte si, že nejde jen o výše uvedenou sekvenci se středníkem nahrazenou dvojtečkou, ale existuje úvodní „ID barevného prostoru“ (tuto skutečnost mnoho terminálových emulátorů postrádalo, zdá se, že toto opomenutí pochází z KDE Konsole). Definice ID barevného prostoru není v tomto dokumentu zahrnuta, takže může představovat prázdné místo, které představuje nespecifikované výchozí nastavení. Kromě hodnoty '2' pro specifikaci červeno-zeleného-modrého formátu (a '5' výše pro indexovanou barvu 0-255) existují alternativy '0' pro definovanou implementaci a '1' pro transparentní-ani toho, co má nějaké další parametry; '3' určuje barvy pomocí schématu azurová-purpurová-žlutá a '4' pro azurová-purpurová-žlutá-černá, přičemž druhá používá pozici označenou jako "nepoužitou" pro černou komponentu:

ESC[ 38:2:⟨Color-Space-ID⟩:⟨r⟩:⟨g⟩:⟨b⟩:⟨unused⟩:⟨CS tolerance⟩:⟨Color-Space associated with tolerance: 0 for "CIELUV"; 1 for "CIELAB"⟩ m Select RGB foreground color
ESC[ 48:2:⟨Color-Space-ID⟩:⟨r⟩:⟨g⟩:⟨b⟩:⟨unused⟩:⟨CS tolerance⟩:⟨Color-Space associated with tolerance: 0 for "CIELUV"; 1 for "CIELAB"⟩ m Select RGB background color

Sekvence OSC (Operating System Command)

Většinou je definoval Xterm. Z historických důvodů může xterm ukončit příkaz BELstejně jako ST.

Xterm umožňuje nastavit název okna ESC ]0;this is the window title BEL.

Non-xterm extension is the hyperlink, ESC ]8;;link STfrom 2017, used by VTE, iTerm2, and mintty.

Konzole Linux používá ESC ] P n rr gg bbke změně palety, která, pokud je pevně zakódována do aplikace, může viset na jiných terminálech. STLinux však bude připojování ignorovat a bude tvořit správnou, ignorovatelnou sekvenci pro ostatní terminály.

Fs Únikové sekvence

Pokud za ESCním následuje bajt v rozsahu 0x60—0x7E , je tohoto typu. Používá se pro řídicí funkce jednotlivě registrované v registru ISO-IR, a proto je k dispozici i v kontextech, kde se používá jiná sada řídicích kódů C1. Konkrétně odpovídají jednotlivým řídicím funkcím schváleným ISO/IEC JTC 1/SC 2 a standardizovanými ISO nebo orgánem uznaným ISO. Některé z nich jsou specifikovány v ECMA-35 (ISO 2022 / ANSI X3.41), jiné v ECMA-48 (ISO 6429 / ANSI X3.64). ECMA-48 je označuje jako „nezávislé řídicí funkce“.

Některé Fs (nezávislá funkce) únikové sekvence ANSI rozpoznávané terminály
Zkr název Účinek
ESC c RIS Obnovit výchozí stav Spustí úplný reset terminálu do původního stavu. To může zahrnovat (je -li to relevantní): resetování grafického ztvárnění, vymazání tabulátorových zastávek, reset na výchozí písmo a další.

Fp Únikové sekvence

Pokud za ESCním následuje bajt v rozsahu 0x30—0x3F , je to tento typ. Oddělené pro funkce ovládání soukromého použití.

Některé únikové sekvence typu Fp (pro soukromé použití) rozpoznávané VT100 , jeho nástupci a/nebo koncovými emulátory, jako je xterm
Zkr název Účinek
ESC 7 DECSC Uložit kurzor DEC Uloží pozici kurzoru, stav posunu kódování a atributy formátování.
ESC 8 DECRC Kurzor DEC Restore Obnoví pozici kurzoru, stav posunu kódování a atributy formátování z předchozího DECSC, pokud existují, jinak resetuje všechny tyto na jejich výchozí hodnoty.

nF Únikové sekvence

Pokud za ESCznakem následuje bajt v rozsahu 0x20—0x2F, jedná se o tento typ. Následuje libovolný počet dalších bajtů v tomto rozsahu a pak bajt v rozsahu 0x30-0x7E . Jsou dále subkategorizovány nízkými čtyřmi bity prvního bajtu, např. "Typ 2F" pro sekvence, kde první bajt je 0x22 ; a podle toho, zda je konečný bajt v rozsahu soukromého použití 0x30—0x3F (např. „typ 2Fp“) nebo ne (např. „typ 2Ft“). Většinou se používají pro mechanismy přepínání kódů ANSI/ISO, jako jsou ty, které používá ISO-2022-JP , s výjimkou typových 3Fsekvencí (těch, kde je první mezibajt 0x23), které se používají pro jednotlivé řídicí funkce. Typové 3Ftsekvence jsou vyhrazeny pro další individuální řídicí funkce registrované ISO-IR, zatímco typové 3Fpsekvence jsou k dispozici pro kontrolní funkce pro soukromé použití.

Některé únikové sekvence ANSI typu 0Ft (oznámení) rozpoznávané terminály (není vyčerpávající)
Zkr název Účinek
ESC SP F Definováno v ECMA-35 (ANSI X3.41 / ISO 2022). Umožňuje funkčním klávesám odesílat ESC + písmeno namísto kódů C1.
ESC SP G Definováno v ECMA-35. Umožňuje funkčním klávesám odesílat kódy C1.
Některé únikové sekvence typu 3Fp (pro soukromé použití) rozpoznávané VT100 , jeho nástupci a/nebo koncovými emulátory, jako je xterm
Zkr název Účinek
ESC # 3 DECDHL DEC Dopisy s dvojitou výškou, horní polovina Nastaví, aby aktuální řádek používal znaky dvakrát tak vysoké. Tento kód je pro horní polovinu.
ESC # 4 DECDHL Písmena DEC s dvojitou výškou, spodní polovina Nastaví, aby aktuální řádek používal znaky dvakrát tak vysoké. Tento kód je pro spodní polovinu.
ESC # 5 DECSWL DEC Single-Width Line Nastaví, aby aktuální řádek používal znaky s jednoduchou šířkou podle výchozího chování.
ESC # 6 DECDWL DEC Double-Width Line Nastaví, aby aktuální řádek používal znaky s dvojnásobnou šířkou a zahodil všechny znaky ve druhé polovině řádku.

Příklady

CSI 2 J - Tím se vymaže obrazovka a na některých zařízeních se kurzor umístí do polohy y, x 1,1 (levý horní roh).

CSI 32 m- Díky tomu je text zelený. Zelená může být tmavá, matně zelená, takže můžete chtít povolit tučné sekvence, díky CSI 1 mnimž bude jasně zelená, nebo jako kombinace CSI 32 ; 1 m. Některé implementace používají k zvýraznění postavy Tučný stav.

CSI 0 ; 6 8 ; "DIR" ; 13 p- Tím se znovu přiřadí klávesě F10, aby se do vyrovnávací paměti klávesnice odeslal řetězec „DIR“ a ENTER, který by v příkazovém řádku systému DOS zobrazoval obsah aktuálního adresáře. (Pouze MS-DOS ANSI.SYS) Toto se někdy používalo pro bomby ANSI . Jedná se o kód pro soukromé použití (jak naznačuje písmeno p) s použitím nestandardního rozšíření, které obsahuje parametr s hodnotou řetězce. Po písmenu normy by se uvažovalo, že sekvence končí písmenem D.

CSI s- Tím se poloha kurzoru uloží. Pomocí sekvence CSI uji obnovíte do polohy. Řekněme, že aktuální pozice kurzoru je 7 (y) a 10 (x). Sekvence CSI suloží tato dvě čísla. Nyní se můžete přesunout na jinou pozici kurzoru, například 20 (y) a 3 (x), pomocí sekvence CSI 20 ; 3 Hnebo CSI 20 ; 3 f. Pokud použijete sekvenci CSI u, pozice kurzoru se vrátí na 7 (y) a 10 (x). Některé terminály vyžadují sekvence DEC ESC 7/, ESC 8které jsou více podporovány.

V shell skriptování

Únikové kódy ANSI se často používají v terminálech UNIX a UNIX k zajištění zvýraznění syntaxe . Například na kompatibilních terminálech následující seznam zadává názvy souborů a adresářů barevných kódů podle typu.

ls --color

Uživatelé mohou ve svých skriptech používat únikové kódy tak, že je zahrnou jako součást standardního výstupu nebo standardní chyby . Například následující příkaz GNU sed zkrášluje výstup příkazu make zobrazením řádků obsahujících slova začínající „WARN“ v obráceném videu a slova začínající „ERR“ jasně žlutou barvou na tmavě červeném pozadí ( velká a malá písmena jsou ignorována). Znázornění kódů je zvýrazněno.

make 2>&1 | sed -e 's/.*\bWARN.*/\x1b[7m&\x1b[0m/i' -e 's/.*\bERR.*/\x1b[93;41m&\x1b[0m/i'

Následující funkce Bash bliká na terminálu (střídavým odesíláním kódů zpětného a normálního režimu videa), dokud uživatel nestiskne klávesu.

flasher () { while true; do printf \\e[?5h; sleep 0.1; printf \\e[?5l; read -s -n1 -t1 && break; done; }

Toho lze použít k upozornění programátora na ukončení dlouhého příkazu, například pomocí make ; flasher.

printf \\033c

Tím se resetuje konzola, podobně jako příkaz resetna moderních systémech Linux; mělo by to však fungovat i na starších systémech Linux a na jiných (ne Linuxových) UNIXových variantách.

V C.

Výstup ukázkového programu na terminálu Gnome
#include <stdio.h>

int main(void)
{
  int i, j, n;
  
  for (i = 0; i < 11; i++) {
    for (j = 0; j < 10; j++) {
      n = 10*i + j;
      if (n > 108) break;
      printf("\033[%dm %3d\033[m", n, n);
    }
    printf("\n");
  }
  return 0;
}

Terminální vstupní sekvence

Stisknutím speciálních kláves na klávesnici a výstupem mnoha sekvencí xterm CSI, DCS nebo OSC se často vytvoří sekvence CSI, DCS nebo OSC odeslané z terminálu do počítače, jako by je uživatel zadal.

Při psaní vstupu na terminál lze stisknout klávesy mimo normální hlavní alfanumerickou oblast klávesnice jako sekvenci ANSI. U klíčů, které mají ekvivalentní výstupní funkci, jako jsou například kurzorové klávesy, často tyto zrcadlí výstupní sekvence. Pro většinu stisknutí kláves však neexistuje ekvivalentní výstupní sekvence k použití.

Existuje několik kódovacích schémat a bohužel většina terminálů mísí sekvence z různých schémat, takže hostitelský software musí být schopen zvládnout vstupní sekvence pomocí libovolného schématu. Aby to bylo komplikované, samotné terminály VT mají dvě schémata vstupu, normální režim a režim aplikace, které lze přepínat aplikací.

(část návrhu)

<char>                                -> char
<esc> <nochar>                        -> esc
<esc> <esc>                           -> esc
<esc> <char>                          -> Alt-keypress or keycode sequence
<esc> '[' <nochar>                    -> Alt-[
<esc> '[' (<num>) (';'<num>) '~'      -> keycode sequence, <num> defaults to 1

Pokud je ukončovací znak '~', musí být přítomno první číslo a jde o číslo klíčového kódu, druhé číslo je volitelná hodnota modifikátoru. Pokud je koncovým znakem písmeno, je písmeno hodnotou keycode a volitelné číslo je hodnotou modifikátoru.

Výchozí hodnota modifikátoru je 1 a po odečtení 1 je stisknuta bitmapa modifikačních kláves: Meta-Ctrl-Alt-Shift. Například <esc> [4; 2 ~ je Shift-End, <esc> [20 ~ je funkční klávesa 9, <esc> [5C je Ctrl-Right.

vt sequences:
<esc>[1~    - Home        <esc>[16~   -             <esc>[31~   - F17
<esc>[2~    - Insert      <esc>[17~   - F6          <esc>[32~   - F18
<esc>[3~    - Delete      <esc>[18~   - F7          <esc>[33~   - F19
<esc>[4~    - End         <esc>[19~   - F8          <esc>[34~   - F20
<esc>[5~    - PgUp        <esc>[20~   - F9          <esc>[35~   - 
<esc>[6~    - PgDn        <esc>[21~   - F10         
<esc>[7~    - Home        <esc>[22~   -             
<esc>[8~    - End         <esc>[23~   - F11         
<esc>[9~    -             <esc>[24~   - F12         
<esc>[10~   - F0          <esc>[25~   - F13         
<esc>[11~   - F1          <esc>[26~   - F14         
<esc>[12~   - F2          <esc>[27~   -             
<esc>[13~   - F3          <esc>[28~   - F15         
<esc>[14~   - F4          <esc>[29~   - F16         
<esc>[15~   - F5          <esc>[30~   -

xterm sequences:
<esc>[A     - Up          <esc>[K     -             <esc>[U     -
<esc>[B     - Down        <esc>[L     -             <esc>[V     -
<esc>[C     - Right       <esc>[M     -             <esc>[W     -
<esc>[D     - Left        <esc>[N     -             <esc>[X     -
<esc>[E     -             <esc>[O     -             <esc>[Y     -
<esc>[F     - End         <esc>[1P    - F1          <esc>[Z     -
<esc>[G     - Keypad 5    <esc>[1Q    - F2       
<esc>[H     - Home        <esc>[1R    - F3       
<esc>[I     -             <esc>[1S    - F4       
<esc>[J     -             <esc>[T     - 

<esc> [A až <esc> [D jsou stejné jako výstupní sekvence ANSI. Pokud není stisknuto žádné tlačítko modifikátoru, <num> se obvykle vynechá, ale většina implementací vždy vydá <num> pro F1-F4. (část návrhu)

Xterm má komplexní dokumentační stránku o různých schématech sekvencí vstupu funkčních kláves a myší z terminálů VT DEC a různých dalších terminálů, které emuluje. Thomas Dickey tomu postupem času přidal spoustu podpory; také udržuje seznam výchozích klíčů používaných jinými emulátory terminálu pro srovnání.

  • Na konzole Linux generují určité funkční klávesy sekvence formuláře . Sekvence CSI by měla končit na .CSI [ char[
  • Staré verze Terminátoru se generují po stisknutí F1 – F4 pomocí modifikátorů. Chybné chování bylo zkopírováno z terminálu GNOME .SS3 1; modifiers char
  • xterm odpoví, pokud je požádán o pozici kurzoru a pokud je stisknuta klávesa F3 s modifikátory, které se střetávají v případě řádku == 1. Tomu lze zabránit použitím ? private modifier as , což se projeví v odpovědi jako .CSI row ; column RCSI 1 ; modifiers RCSI ? 6 nCSI ? row ; column R
  • mnoho terminálů se připojuje ESCk libovolnému znaku, který je napsán klávesou alt dolů. To vytváří nejednoznačnost velkých písmen a symbolů @[\]^_, které by tvořily kódy C1.
  • Konsole generuje, když jsou pomocí modifikátorů stisknuty klávesy F1 – F4.SS3 modifiers char

Viz také

Poznámky

Reference

externí odkazy