ANSI escape sekvence

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 22. prosince 2015; kontroly vyžadují 20 úprav .

Řídicí znaky ANSI ( kód ANSI escape ) jsou znaky vložené do textu pro ovládání formátu, barvy a dalších možností výstupu v textovém terminálu .  Téměř všechny emulátory terminálu navržené pro zobrazení textového výstupu ze vzdáleného počítače a (s výjimkou Microsoft Windows ) pro zobrazení textového výstupu z místního softwaru jsou schopny interpretovat alespoň některé sekvence escape ANSI.

Historie

Téměř všichni vývojáři textových terminálů vytvořili své vlastní, s jinými verzemi terminálů nekompatibilní, řídicí sekvence, které provádějí jakékoli transformace obsahu terminálu; například přesunutí kurzoru na libovolné místo na obrazovce. Sofistikované knihovny jako termcap byly vytvořeny, aby umožnily programům používat jediné API nezávislé na implementaci textového terminálu. Většina terminálů navíc vyžadovala, aby čísla (jako je řádek a sloupec) byla odeslána jako hodnoty binárních znaků; pro některé programovací jazyky a operační systémy, které nemají interní podporu pro ASCII , bylo často obtížné nebo nemožné namapovat správný znak na číslo.

Prvním standardem řídicích znaků ANSI byl ECMA - 48 , přijatý v roce 1976. Jednalo se o pokračování řady kódovacích standardů, z nichž prvním byl ECMA-6 z roku 1961, 7bitový standard, z něhož je odvozeno ASCII. ECMA-48 byl několikrát aktualizován, aktuální verze je pátá, 1991. Byl také přijat ISO a IEC jako norma ISO/IEC 6429 . Název  „ úniková sekvence ANSI“ se objevil v roce 1981, kdy ANSI přijala ECMA-48 jako standard ANSI X3.64 (později stažena v roce 1997 [1] ).

První populární terminál podporující tyto sekvence byl VT100 , představený v roce 1978 [2] . Mezi četnými „klony“ VT100 se nejdostupnější Zenith Z-19 vydaný v roce 1979 [3] stal nejstarším a nejoblíbenějším . Jejich popularita postupně vedla ke vzniku velkého množství softwaru (zejména BBS ) podporujícího escape sekvence, a to vedlo k tomu, že je podporovaly téměř všechny nové terminály a terminálové emulátory.

Podpora

Většina emulátorů terminálu pro operační systémy typu UNIX (jako je xterm nebo OS X Terminal ) interpretuje sekvence escape ANSI. Konzole Linuxu (viditelná, když není spuštěn X Window System ) je také interpretuje. Interpretují je také emulátory terminálu Microsoft Windows určené pro textový výstup z externích zdrojů (sériový port, modem nebo soket). Určitou podporu pro textový výstup místních programů ve Windows často poskytují alternativní příkazové procesory , jako je Take Command Console (dříve 4NT) od JP Software , ANSI.COM od Michaela J. Mefforda , ansicon od Jasona Hooda .

Mnoho unixových konzolových aplikací (např . ls , grep , Vim , Emacs ) je dokáže generovat. Výstupem jsou některé utility ( tput ), nízkoúrovňové ( termcap , terminfo ) a vysokoúrovňové ( curses ).

V operačním systému IBM OS/2, verze 3.0 a novější, včetně EC, je standardně povolena podpora ANSI v režimu celé obrazovky a konzoly v okně.

Windows a DOS

MS-DOS 1.0 nepodporoval ANSI ani jiné sekvence escape. Interpretováno bylo pouze několik řídicích znaků ( CR , LF , BS ), což znemožňovalo vytvářet jakékoli celoobrazovkové aplikace. Jakékoli efekty zobrazení bylo možné dosáhnout pouze voláním systému BIOS (nebo častěji přímou manipulací s hardwarem IBM PC ).

MS-DOS 2.0 poskytoval možnost nainstalovat ovladač pro podporu ANSI escape sekvencí - ANSI.SYS byl de facto standardem , ale byly použity jiné (ANSI.COM [4] , NANSI.SYS [5] ). Pomalost a skutečnost, že ovladač nebyl ve výchozím nastavení nainstalován, způsobil, že se téměř nepoužívaly; software pokračoval v přímé manipulaci s hardwarem, aby produkoval požadované efekty v textovém terminálu. ANSI.SYS a podobné ovladače byly nadále používány ve Windows 98 a dokonce i ve Windows ME v nativním režimu DOS (textový režim na celou obrazovku). ANSI.SYS také funguje na systémech řady Windows NT v 16bitovém režimu pro starší programy využívající NTVDM .

Konzole až do Windows 10 „Threshold 2“ vůbec nepodporovala sekvence escape ANSI. Software může ovládat konzolu pomocí systémových volání konzolového API , jako je ioctl , prokládaných textovým výstupem. Některé programy interně interpretují sekvence escape ANSI ze vstupu textu a překládají je do příslušných systémových volání.

Sekvenční prvky

Únikové sekvence začínají znakem ESC ( ASCII : 27 / 0x 1B / 0 33). U dvouznakových sekvencí může být druhým znakem znak ASCII v rozsahu 64 až 95 ( @ až _ ). Většina sekvencí má však více než dva znaky a začíná ESC a [ . Kombinace znaků ESC a [ se nazývá CSI nebo Control Sequence Introducer (také Control Sequence Initiator). Posledním znakem této sekvence může být znak ASCII v rozsahu 64 až 126 ( @ až ~ ).

K dispozici je také jeden znak CSI ( ASCII : 155 / 0x 9B / 0 233). CSI ve tvaru ESC + [ se používá častěji než jednoznaková alternativa (viz také řídicí kódy C0 a C1 ). Zařízení, která podporují pouze ASCII (7bitové bajty) nebo zařízení, která podporují 8bitové bajty, ale používají řídicí znaky v rozsahu 0x80-0x9F pro jiné účely, jsou rozpoznána pouze pomocí kláves ESC + [ . Na terminálech používajících kódování UTF-8 zabírají obě formy 2 bajty ( CSI v UTF-8: 0x C2, 0x 9B), ale ESC + [ vypadá čitelněji.

Ačkoli některá kódování používají ke kódování jednoho znaku více bajtů, ve zbytku tohoto článku se budeme zabývat pouze znaky ASCII, které jsou reprezentovány jedním bajtem.

CSI kódy

Struktura většiny escape sekvencí ANSI je následující:

CSI [символ(-ы) режима] n1 ; n2... [замыкающий(-ие) символ(-ы)] буква

Poslední bajt ( буква), upravený символами режимаa замыкающими символами, definuje příkaz. Čísla n1, n2, … jsou nepovinné parametry. Pokud jejich hodnoty nejsou specifikovány, pak je výchozí hodnota obvykle 0 nebo 1, v závislosti na operaci. Pokud nejsou uvedena následující čísla, středníky lze také vynechat.

Posledním bajtem může být formálně libovolný znak od 64 do 126 (od 0x 40 do 0x 7e, ASCII: od @ do ~ ), lze jej změnit předchozími mezilehlými bajty v rozsahu od 32 do 47 (od 0x 20 do 0x 2f).

Dvojtečka ( 0x 3a) nemůže být obsažena v sekvenci. Byla ponechána pro budoucí standardizaci, takže jakákoli sekvence obsahující dvojtečku je ignorována.

Přestože je povoleno více znaků režimu a více znaků na konci, toto se nepoužívá.

Některé escape sekvence ANSI (částečný seznam)
Kód název Účinek
CSI n A CUU-Kurzor nahoru Přesune kurzor o n (výchozí 1) pozic v určeném směru. Pokud je kurzor již na okraji okna terminálu, nic se neděje.
CSI n B CUD-kurzor dolů
CSI n C CUF - Cursor Forward
CSI n D MLÁDĚ — Kurzor Zpět
CSI n E CNL-Kurzor Další řádek Přesune kurzor na začátek n-tého (výchozí 1.) řádku pod aktuálním.
CSI n F CPL - Předchozí řádek kurzoru Přesune kurzor na začátek n-tého (výchozí 1.) řádku nad aktuálním.
CSI n G CHA-Kurzor Horizontální Absolutní Přesune kurzor na sloupec n .
CSIn  ; _ m H CUP - Pozice kurzoru Přesune kurzor na řádek n , sloupec m . Výchozí hodnoty n a m jsou 1 (levý horní roh), pokud je uveden pouze jeden argument bez středníku, předpokládá se, že je n . Například sekvence CSI;5H je synonymem pro CSIi;5H , CSI17;H je synonymem pro CSI17H a CSI17;1H .
CSI n J ED-Erase Data Vymaže část okna terminálu. Pokud je n nula (nebo chybí), vymaže vše od kurzoru po konec okna terminálu. Pokud se n rovná jedné, vymaže vše od kurzoru po začátek okna terminálu. Pokud n je dvě, vymaže celé okno terminálu (a přesune kurzor do levého horního rohu v MS-DOS ANSI.SYS). V případě , že se n rovná 2, místo vymazání může dojít pouze k vytvoření nových řádků, takže předchozí obsah terminálu bude posunut nahoru.
CSI n K EL-Erase in Line Odstraňuje část řetězce. Pokud je n nula (nebo chybí), vymaže vše od kurzoru po konec řádku. Pokud se n rovná jedné, vymaže vše od kurzoru po začátek řádku. Pokud n je dvě, vymaže celý řetězec. Poloha kurzoru se nemění.
CSI n S S-Scroll Up Posune aktuální stránku terminálu nahoru o n (výchozí 1) řádků. Nové řádky jsou přidány dole, řádky nahoře na aktuální stránce jsou přepsány. (ne ANSI.SYS)
CSI n T SD-Scroll Down Posune aktuální stránku terminálu dolů o n (výchozí 1) řádků. Nové řádky jsou přidány nahoře, řádky dole na aktuální stránce jsou odstraněny. (ne ANSI.SYS)
CSIn  ; _ m f HVP – horizontální a vertikální poloha Přesune kurzor na řádek n , sloupec m . Výchozí hodnota obou parametrů je 1. Stejný efekt jako CUP.
CSIn [ ; k ] m SGR - Výběr grafického ztvárnění Nastavte parametry SGR , které definují barvy textu a pozadí. Za CSI může být nula nebo více parametrů oddělených středníky. Pokud parametry nejsou specifikovány, CSI m se chová jako CSI 0 m (reset / normální).
CSI 6n DSR - Zpráva o stavu zařízení Hlásí aktuální pozici kurzoru ve formátu ESC[ n ; mR , kde n je  řádek, m  je sloupec. (Nemusí fungovat v MS-DOS)
CSI Pozice kurzoru SCP-Uložit Uloží pozici kurzoru.
CSI u RCP - Obnovení pozice kurzoru Obnoví pozici kurzoru.
CSI? 25 litrů DECTCEM Skryje kurzor.
CSI? 25h DECTCEM Zviditelní kurzor.
Parametry SGR (Select Graphic Rendition).
Kód Účinek Poznámka
0 Obnovit / Normální vypnout všechny atributy
jeden Tučné nebo zvýšení jasu
2 Vybledlé (snížení jasu) Ne všude podporováno
3 Kurzíva: zapnuto Ne všude podporováno. Někdy považováno za inverzi.
čtyři Podtrženo: jednou
5 Blikání: Pomalé méně než 150krát za minutu
6 Bliká: Často MS-DOS ANSI.SYS; 150+ za minutu; ne všude podporováno
7 Displej: Negativní převrací nebo obrací; změnit barvu pozadí a textu
osm Skrytý Ne všude podporováno.
9 Přeškrtnutí Znaky jsou čitelné, ale označené jako smazané. Ne všude podporováno.
deset Primární (výchozí) písmo
11–19 -té alternativní písmo Vybere alternativní písmo (od 14 je 4. alternativní písmo, do 19 je 9. alternativní písmo).
dvacet Zlomenina sotva podporovány
21 Tučné: Vypnuto nebo Podtržítko: Dvojité tučné písmo není vždy podporováno; dvojité podtržení není podporováno.
22 Normální barva nebo jas Ani tlustá, ani vybledlá
23 Ne kurzíva, ne zlomková
24 Podtržítko: Ne Podtržítko ani jednoduché, ani dvojité
25 Blikání: vypnuto
26 Rezervováno
27 Displej: normální ne negativní
28 Zobrazeno vypnout skrývání
29 není přeškrtnutý
30–37 Nastavit barvu textu (popředí) 30+ , kde z tabulky barev níže
38 Vyhrazeno pro další barvy obvykle jsou podporovány následující argumenty: 5;nkde je index barvy ( ) nebo kde jsou červené, zelené a modré kanály barvy (v rámci ) 0..2552;r;g;b255
39 Výchozí barva textu (popředí) závislé na implementaci (podle standardu)
40–47 Nastavit barvu pozadí 40+ , kde z tabulky barev níže
48 Vyhrazeno pro nastavení rozšířené barvy pozadí obvykle podporuje následující argumenty 5;n, kde je index barev ( ) nebo kde jsou kanály červené, zelené a modré barvy (v rámci ) 0..2552;r;g;b255
49 Výchozí barva pozadí závislé na implementaci (podle standardu)
padesáti Rezervováno
51 Zarámovaný
52 Obklopen
53 podtrženo
54 Nezarámované a neobklopené
55 není podtrženo
56–59 Rezervováno
60 podtržení ideogramu nebo čára na pravé straně sotva podporovány
61 ideogram dvojité podtržení nebo dvojitá čára na pravé straně sotva podporovány
62 nadlinka ideogramu nebo linka na levé straně sotva podporovány
63 ideogram dvojitá čára nebo dvojitá čára na levé straně sotva podporovány
64 ideogramové označení stresu sotva podporovány
65 atributy ideogramu vypnuty stěží podporováno, ruší účinky kódů 60-64
90–97 Nastavení barvy textu v popředí, vysoká intenzita aixterm (není standardní)
100–107 Nastavit barvu pozadí, vysoká intenzita aixterm (není standardní)

Barvy

Barvy textu (a obecně parametry SGR) jsou řízeny sekvencemi , kde každé , , ... je parametr SGR, jak je uvedeno výše. Kódy tedy například použijete pro nastavení barvy textu, pro nastavení barvy pozadí, kde je číslo barvy z tabulky níže. Následující příklady lze použít s nástrojem, kde nebo implementuje CSI: Chcete-li změnit barvu textu na černou, použijte ; na červenou ; nastavení tučně šedé ; nastavit tučně červenou . Pro nastavení výchozích barev použijte (některé terminály nepodporují) (nebo resetujte všechny atributy ). CSI n1 [;n2 [; ...]] mn1n230+i40+iiprintf\x1b[\e[\x1b[30m\x1b[31m\x1b[30;1m\x1b[31;1m\x1b[39;49m\x1b[0m

Vzorník barev [6]
Intenzita 0 jeden 2 3 čtyři 5 6 7
Normální Černá Červené Zelená Žlutá Modrý Purpurová tyrkysová Bílý
Jasný Černá Červené Zelená Žlutá Modrý Purpurová tyrkysová Bílý

Viz také

Poznámky

  1. Seznam stažených norem NIST
  2. Paul Williams. Digital's Video Terminals (nedostupný odkaz) . VT100.net (2006). Získáno 17. srpna 2011. Archivováno z originálu dne 23. července 2012. 
  3. Společnost Heathkit. Katalog Heathkit 1979 (nedostupný odkaz) . Společnost Heathkit (1979). Získáno 4. listopadu 2011. Archivováno z originálu 13. ledna 2012. 
  4. Michael Mefford. ANSI.com: Stáhněte si jej zde . PC Magazine (7. února 1989). Získáno 10. srpna 2011. Archivováno z originálu 18. prosince 2012.
  5. Dan Kegel, Eric Auer. Nansi a NNansi - Ovladače ANSI pro MS-DOS . Webový hostel Dana Kegela (28. února 1999). Získáno 10. srpna 2011. Archivováno z originálu 18. prosince 2012.
  6. Názvy jsou standardní, ale přesný význam barev není standardizován a závisí na zařízení, které je zobrazuje.

Odkazy