Caracterele de control ANSI ( codul de escape ANSI ) sunt caractere încorporate în text pentru a controla formatul, culoarea și alte opțiuni de ieșire într-un terminal de text . Aproape toți emulatoarele de terminale concepute pentru a afișa textul de la un computer la distanță și (cu excepția Microsoft Windows ) pentru a afișa textul rezultat din software-ul local, sunt capabili să interpreteze cel puțin unele secvențe de evadare ANSI.
Aproape toți dezvoltatorii de terminale text și-au creat propriile, incompatibile cu alte versiuni de terminale, secvențe de control care efectuează orice transformări asupra conținutului terminalului; de exemplu, mutarea cursorului într-o poziție arbitrară pe ecran. Au fost create biblioteci sofisticate, cum ar fi termcap , pentru a permite programelor să utilizeze un singur API independent de implementarea terminalului text. În plus, majoritatea terminalelor au cerut numerele (cum ar fi rândul și coloana) să fie trimise ca valori binare de caractere; pentru unele limbaje de programare și sisteme de operare care nu au suport intern pentru ASCII , a fost adesea dificil sau imposibil să mapați caracterul corect la un număr.
Primul standard de caractere de control ANSI a fost ECMA - 48 , adoptat în 1976. A fost o continuare a unei serii de standarde de codare, primul dintre care a fost ECMA-6 din 1961, standardul de 7 biți din care este derivat ASCII. ECMA-48 a fost actualizat de mai multe ori, versiunea actuală este a cincea, 1991. De asemenea, a fost adoptat de ISO și IEC ca standard ISO/IEC 6429 . Numele „ secvență de evacuare ANSI” a apărut în 1981, când ANSI a adoptat ECMA-48 ca standard ANSI X3.64 (retras ulterior în 1997 [1] ).
Primul terminal popular care a suportat aceste secvențe a fost VT100 , introdus în 1978 [2] . Printre numeroasele „clone” ale VT100, cel mai accesibil Zenith Z-19 lansat în 1979 [3] a devenit cel mai vechi și mai popular . Popularitatea lor a dus treptat la apariția unui număr mare de software (în special BBS ) care suportă secvențe de evadare, iar acest lucru, la rândul său, a dus la faptul că aproape toate terminalele noi și emulatorii de terminale le suportau.
Majoritatea emulatorilor de terminale pentru sisteme de operare asemănătoare UNIX (cum ar fi xterm sau OS X Terminal ) interpretează secvențele de evadare ANSI. Consola Linux (vizibilă când sistemul X Window nu rulează) le interpretează și ea. Emulatoarele de terminale Microsoft Windows concepute pentru ieșirea de text din surse externe (port serial, modem sau soclu) le interpretează și ele. Un anumit suport pentru ieșirea textuală a programelor locale pe Windows este adesea oferit de procesoare de comandă alternative , cum ar fi Take Command Console (fostă 4NT) de la JP Software , ANSI.COM de Michael J. Mefford , ansicon de Jason Hood .
Multe aplicații de consolă Unix (de exemplu ls , grep , Vim , Emacs ) le pot genera. Unele biblioteci de utilități ( tput ), de nivel scăzut ( termcap , terminfo ) și de nivel înalt ( blesteme ) le produc.
Pe sistemul de operare IBM OS/2, versiunea 3.0 și versiunile ulterioare, inclusiv EC, suportul ANSI în modul ecran complet și consolă cu ferestre este activat în mod implicit.
MS-DOS 1.0 nu a acceptat ANSI sau orice alte secvențe de evacuare. Au fost interpretate doar câteva caractere de control ( CR , LF , BS ), făcând imposibilă crearea unor aplicații pe ecran complet. Orice efect de afișare ar putea fi obținut numai prin apeluri BIOS (sau, mai frecvent, prin manipularea directă a hardware-ului PC-ului IBM ).
MS-DOS 2.0 a oferit posibilitatea de a instala un driver pentru a suporta secvențele de evadare ANSI - ANSI.SYS era standardul de facto , dar au fost folosite altele (ANSI.COM [4] , NANSI.SYS [5] ). Lentoarea și faptul că driverul nu a fost instalat implicit a făcut ca acestea să fie folosite cu greu; software-ul a continuat să manipuleze direct hardware-ul pentru a produce efectele dorite într-un terminal text. ANSI.SYS și drivere similare au continuat să fie utilizate în Windows 98 și chiar și în Windows ME în modul DOS nativ (mod text pe întregul ecran). ANSI.SYS funcționează și pe sistemele din familia Windows NT în modul pe 16 biți pentru programele vechi care utilizează NTVDM .
Consola nu a acceptat deloc secvențele de evadare ANSI până la Windows 10 „Pragul 2”. Software-ul poate controla consola prin apeluri de sistem API de tip consola ioctl [ intercalate cu text. Unele programe interpretează intern secvențele de evadare ANSI din introducerea textului și le traduc în apelurile de sistem adecvate.
Secvențele de evacuare încep cu caracterul ESC ( ASCII : 27 / 0x 1B / 0 33). Pentru secvențele cu două caractere, al doilea caracter poate fi un caracter ASCII în intervalul 64 până la 95 ( @ până la _ ). Cu toate acestea, cele mai multe secvențe au mai mult de două caractere și încep cu ESC și [ . Combinația de caractere ESC și [ se numește CSI sau Control Sequence Introducer (de asemenea Control Sequence Initiator). Ultimul caracter al acestei secvențe poate fi un caracter ASCII în intervalul 64 până la 126 ( @ până la ~ ).
Există, de asemenea, un singur caracter CSI ( ASCII : 155 / 0x 9B / 0 233). CSI de forma ESC + [ este folosit mai des decât alternativa cu un singur caracter (vezi și codurile de control C0 și C1 ). Doar ESC + [ sunt recunoscute de dispozitivele care acceptă doar ASCII (octeți de 7 biți) sau de dispozitivele care acceptă octeți de 8 biți, dar folosesc caractere de control în intervalul 0x80-0x9F în alte scopuri. La terminalele care utilizează codificarea UTF-8 , ambele forme au 2 octeți ( CSI în UTF-8: 0x C2, 0x 9B), dar ESC + [ pare mai lizibil.
Deși unele codificări folosesc mai mulți octeți pentru a codifica un singur caracter, în restul acestui articol vom lua în considerare doar caracterele ASCII care sunt reprezentate de un singur octet.
Structura majorității secvențelor de evadare ANSI este următoarea:
CSI [символ(-ы) режима] n1 ; n2... [замыкающий(-ие) символ(-ы)] буква
Ultimul octet ( буква), modificat символами режимаși замыкающими символами, definește comanda. Numerele n1, n2, … sunt parametri opționali. Dacă valorile lor nu sunt specificate, atunci implicit este de obicei 0 sau 1, în funcție de operație. Dacă nu sunt specificate următoarele numere, atunci pot fi omise și punctele și virgulă.
Ultimul octet, în mod formal, poate fi orice caracter de la 64 la 126 (de la 0x 40 la 0x 7e, ASCII: de la @ la ~ ), poate fi modificat precedând octeții intermediari în intervalul de la 32 la 47 (de la 0x 20 la 0x 2f).
Caracterul două puncte ( 0x 3a) nu poate fi conținut într-o secvență. A fost lăsată pentru standardizare viitoare, astfel încât orice secvență care conține două puncte este ignorată.
Deși sunt permise mai multe caractere în mod și mai multe caractere finale, aceasta nu este utilizată.
Codul | Nume | Efect |
---|---|---|
CSI n A | CUU-Cursor sus | Mută cursorul n (implicit 1) poziții în direcția specificată. Dacă cursorul este deja la marginea ferestrei terminalului, nu se întâmplă nimic. |
CSI n B | CUD-Cursor în jos | |
CSI n C | CUF - Cursor înainte | |
CSI n D | CUB—Cursor înapoi | |
CSI n E | CNL-Cursor Next Line | Mută cursorul la începutul liniei a n- a (prima implicită) de sub cea curentă. |
CSI n F | CPL - Linia anterioară a cursorului | Mută cursorul la începutul liniei a n- a (prima implicită) deasupra celei curente. |
CSI n G | CHA-Cursor Orizontal Absolut | Mută cursorul pe coloana n . |
CSI n ; m H | CUP - Poziția cursorului | Mută cursorul pe rândul n , coloana m . Valorile implicite ale lui n și m sunt 1 (colțul din stânga sus), dacă este dat un singur argument fără punct și virgulă, se presupune că este n . De exemplu, secvenţa CSI;5H este sinonimă cu CSI 1;5H , CSI 17;H este sinonimă cu CSI 17H şi CSI 17;1H . |
CSI n J | ED-Erase Data | Șterge o parte a ferestrei terminalului. Dacă n este zero (sau absent), șterge totul de la cursor până la sfârșitul ferestrei terminalului. Dacă n este egal cu unu, șterge totul de la cursor până la începutul ferestrei terminalului. Dacă n este doi, șterge toată fereastra terminalului (și mută cursorul în colțul din stânga sus în MS-DOS ANSI.SYS). În cazul lui n egal cu 2, în loc de ștergere, se poate crea doar noi linii, astfel încât conținutul anterior al terminalului să fie împins în sus. |
CSI n K | EL-Erase in Line | Îndepărtează o parte dintr-un șir. Dacă n este zero (sau absent), șterge totul de la cursor până la sfârșitul liniei. Dacă n este egal cu unu, șterge totul de la cursor până la începutul liniei. Dacă n este doi, șterge întregul șir. Poziția cursorului nu se modifică. |
CSI n S | S-Scroll Up | Derulează în sus pagina terminală curentă cu n (implicit 1) linii. Sunt adăugate linii noi în partea de jos, liniile din partea de sus a paginii curente sunt suprascrise. (nu ANSI.SYS) |
CSI n T | SD-Scroll Down | Derulează pagina terminalului curent în jos cu n (implicit 1) linii. Sunt adăugate linii noi în partea de sus, liniile din partea de jos a paginii curente sunt eliminate. (nu ANSI.SYS) |
CSI n ; m f | HVP—Poziție orizontală și verticală | Mută cursorul pe rândul n , coloana m . Valoarea implicită a ambilor parametri este 1. Același efect ca CUP. |
CSIn [ ; k ] m | SGR - Selectați redarea grafică | Setați parametrii SGR care definesc culorile textului și de fundal. Pot exista zero sau mai mulți parametri după CSI, separați prin punct și virgulă. Dacă parametrii nu sunt specificați, CSI m se comportă ca CSI 0 m (reset / normal). |
CSI 6n | DSR - Raport de stare a dispozitivului | Raportează poziția curentă a cursorului în formatul ESC[ n ; m R , unde n este un rând, m este o coloană. (Este posibil să nu funcționeze în MS-DOS) |
CSI-uri | SCP-Salvare poziția cursorului | Stochează poziția cursorului. |
CSI u | RCP - Restabiliți poziția cursorului | Restabilește poziția cursorului. |
CSI?25l | DECTCEM | Ascunde cursorul. |
CSI?25h | DECTCEM | Face cursorul vizibil. |
Codul | Efect | Notă |
---|---|---|
0 | Resetare / Normal | dezactivați toate atributele |
unu | Îndrăzneț sau crește luminozitatea | |
2 | Decolorat (reduce luminozitatea) | Nu este suportat peste tot |
3 | Cursiv: activat | Nu este suportat peste tot. Uneori tratată ca o inversare. |
patru | Subliniat: o dată | |
5 | Clipește: lent | mai puțin de 150 de ori pe minut |
6 | Intermitent: Des | MS-DOS ANSI.SYS; 150+ pe minut; nu este suportat peste tot |
7 | Afișare: negativ | inversează sau inversează; schimba culorile de fundal și text |
opt | Ascuns | Nu este suportat peste tot. |
9 | Striat | Caracterele sunt lizibile, dar marcate ca șterse. Nu este suportat peste tot. |
zece | Font principal (implicit). | |
11–19 | -al-lea font alternativ | Selectează al treilea font alternativ (de la 14 este al 4-lea font alternativ, la 19 este al 9-lea font alternativ). |
douăzeci | Fractură | cu greu suportate |
21 | Bold: Off sau Subliniere: dublu | bold nu este întotdeauna acceptat; dubla subliniere este cu greu acceptată. |
22 | Culoare sau luminozitate normală | Nici gras, nici decolorat |
23 | Nu cursiv, nu fracționat | |
24 | Subliniere: Nu | Nu subliniați nici simplu, nici dublu |
25 | Intermitent: oprit | |
26 | Rezervat | |
27 | Display: normal | nu negativ |
28 | Afișat | opriți ascunderea |
29 | nu barat | |
30–37 | Setați culoarea textului (prim-plan) | 30+ , unde din tabelul de culori de mai jos |
38 | Rezervat pentru culori suplimentare | de obicei sunt acceptate următoarele argumente: 5;nunde este indicele de culoare ( ) sau unde sunt canalele roșu, verde și albastru ale culorii (în ) 0..2552;r;g;b255 |
39 | Culoarea implicită a textului (prim-plan) | dependent de implementare (conform standardului) |
40–47 | Setați culoarea de fundal | 40+ , unde din tabelul de culori de mai jos |
48 | Rezervat pentru setarea culorii de fundal extinse | acceptă de obicei următoarele argumente 5;nunde este indexul de culoare ( ) sau unde sunt canalele de culoare roșu, verde și albastru (în cadrul ) 0..2552;r;g;b255 |
49 | Culoarea de fundal implicită | dependent de implementare (conform standardului) |
cincizeci | rezervat | |
51 | Înrămat | |
52 | Inconjurat | |
53 | supraliniat | |
54 | Nu încadrat și nu înconjurat | |
55 | nu supraliniat | |
56–59 | rezervat | |
60 | sublinierea ideogramei sau linia din partea dreaptă | cu greu suportate |
61 | ideogramă subliniere dublă sau linie dublă în partea dreaptă | cu greu suportate |
62 | ideogramă supralinie sau linie laterală stângă | cu greu suportate |
63 | ideogramă supralinie dublă sau linie dublă în partea stângă | cu greu suportate |
64 | marcaj de stres ideogramă | cu greu suportate |
65 | atributele ideogramei sunt dezactivate | greu suportat, anulează efectele codurilor 60-64 |
90–97 | Setați culoarea textului în prim-plan, intensitate ridicată | aixterm (nu este standard) |
100–107 | Setați culoarea de fundal, intensitate ridicată | aixterm (nu este standard) |
Culorile textului (și parametrii SGR în general) sunt controlați de secvențele , unde fiecare , , ... este un parametru SGR, așa cum se arată mai sus. Astfel, de exemplu, folosiți coduri pentru a seta culoarea textului, pentru a seta culoarea de fundal, unde este numărul culorii din tabelul de mai jos. Următoarele exemple pot fi utilizate cu un utilitar în care sau implementează CSI: Pentru a schimba culoarea textului în negru, utilizați ; la roșu ; setarea gri îndrăzneț ; setați roșu îndrăzneț . Pentru a seta culorile implicite, utilizați (nu este acceptat de unele terminale) (sau resetați toate atributele ). CSI n1 [;n2 [; ...]] mn1n230+i40+iiprintf\x1b[\e[\x1b[30m\x1b[31m\x1b[30;1m\x1b[31;1m\x1b[39;49m\x1b[0m
Intensitate | 0 | unu | 2 | 3 | patru | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
Normal | Negru | roșu | Verde | Galben | Albastru | Magenta | cyan | alb |
Luminos | Negru | roșu | Verde | Galben | Albastru | Magenta | cyan | alb |
Codificarea caracterelor | |
---|---|
Codificări istorice | comp. suplimentare semafor (Makarov) morse Bodo MTK-2 comp. 6 biți SCP RADIX-50 EBCDIC KOI-7 ISO 646 |
reprezentare modernă pe 8 biți | simboluri ASCII non-ASCII Pagini de cod pe 8 biți chirilic KOI-8 Codificare de bază MacCyrillic ISO 8859 1 (lat.) 2 3 patru 5 (chir.) 6 7 opt 9 zece unsprezece 12 13 paisprezece 15 (€) 16 Windows 1250 1251 (Kir.) 1252 1253 1254 1255 1256 1257 1258 WGL4 IBM și DOS 437 850 852 855 866 „alternativă” MIC |
Multiocteți | tradiţional DBCS GB2312 HTML unicode UTF-32 UTF-16 UTF-8 lista de caractere chirilic |
interfața cu utilizatorul dispunerea tastaturii local traducere de linie font transliterare fonturi personalizate utilitati iconv record |
ISO | Standardele|
---|---|
| |
de la 1 la 9999 |
|
10000 până la 19999 |
|
20000+ | |
Vezi și: Lista articolelor ale căror titluri încep cu „ISO” |
internaționale Ecma | Standardele|
---|---|