Ří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.
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.
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ě.
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í.
Ú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.
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. |
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 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ý |
Kódování znaků | |
---|---|
Historická kódování | doplňková komp. semafor (Makarov) morse Bodo MTK-2 komp. 6bitový SCP RADIX-50 EBCDIC KOI-7 ISO 646 |
moderní 8bitová reprezentace | symboly ASCII non-ASCII 8bitové kódové stránky cyrilice KOI-8 Základní kódování MacCyrillic ISO 8859 1 (lat.) 2 3 čtyři 5 (kir.) 6 7 osm 9 deset jedenáct 12 13 čtrnáct 15 (€) 16 Okna 1250 1251 (Kir.) 1252 1253 1254 1255 1256 1257 1258 WGL4 IBM a DOS 437 850 852 855 866 "alternativní" MIC |
Vícebajtové | tradiční DBCS GB2312 HTML unicode UTF-32 UTF-16 UTF-8 seznam postav cyrilice |
uživatelské rozhraní rozložení klávesnice národní prostředí překlad řádků písmo přepis vlastní písma utility iconv záznam |
ISO | normy|
---|---|
| |
1 až 9999 |
|
10 000 až 19999 |
|
20 000+ | |
Viz také: Seznam článků, jejichž názvy začínají na „ISO“ |
Ecma | Mezinárodní standardy|
---|---|