Az ANSI vezérlőkarakterek ( ANSI escape kód ) olyan szövegbe ágyazott karakterek, amelyek a szöveges terminál formátumát, színét és egyéb kimeneti beállításait szabályozzák . Szinte minden terminálemulátor , amelyet a távoli számítógépről érkező szövegkimenet megjelenítésére és (a Microsoft Windows kivételével ) a helyi szoftverek szövegkimenetének megjelenítésére terveztek, képes legalább néhány ANSI escape szekvenciát értelmezni.
Szinte minden szöveges terminál fejlesztője létrehozta saját, a terminálok más verzióival nem kompatibilis vezérlőszekvenciáját, amely bármilyen átalakítást végrehajt a terminál tartalmán; például a kurzor tetszőleges pozícióba mozgatása a képernyőn. Kifinomult könyvtárakat hoztak létre, mint például a termcap , hogy lehetővé tegyék a programok számára, hogy egyetlen API -t használjanak, függetlenül a szöveges terminál megvalósításától. Ezenkívül a legtöbb terminálhoz számokat (például sort és oszlopot) kellett bináris karakterértékként elküldeni; Egyes programozási nyelvek és operációs rendszerek esetében, amelyek nem támogatják az ASCII -t, gyakran nehéz vagy lehetetlen volt a megfelelő karaktert számhoz rendelni.
Az első ANSI vezérlőkarakter -szabvány az ECMA - 48 volt , amelyet 1976-ban fogadtak el. Ez egy sor kódolási szabvány folytatása volt, amelyek közül az első az 1961-es ECMA-6 volt, a 7 bites szabvány, amelyből az ASCII származik. Az ECMA-48-at többször frissítették, a jelenlegi verzió az ötödik, 1991-es. Az ISO és az IEC is elfogadta ISO/IEC 6429 szabványként . Az " ANSI escape szekvencia" név 1981-ben jelent meg, amikor az ANSI az ECMA-48-at ANSI X3.64 szabványként fogadta el (később 1997-ben visszavonták [1] ).
Az első népszerű terminál, amely ezeket a szekvenciákat támogatja , az 1978-ban bemutatott VT100 volt [2] . A VT100 számos „klónja” közül a legolcsóbb Zenith Z-19 , amelyet 1979-ben adtak ki [3] , a legkorábbi és legnépszerűbb lett . Népszerűségük fokozatosan nagyszámú, escape szekvenciát támogató szoftver (különösen a BBS ) megjelenéséhez vezetett, és ez pedig oda vezetett, hogy szinte minden új terminál és terminálemulátor támogatta őket.
A UNIX-szerű operációs rendszerek legtöbb terminálemulátora (például az xterm vagy az OS X Terminal ) értelmezi az ANSI escape szekvenciákat. A Linux konzol (amikor az X Window System nem fut) szintén értelmezi őket. A külső forrásból (soros port, modem vagy socket) szöveges kimenetre tervezett Microsoft Windows terminálemulátorok is értelmezik ezeket. A helyi programok szöveges kimenetét Windows rendszeren gyakran támogatják az alternatív parancsfeldolgozók , például a Take Command Console (korábban 4NT) a JP Software -től, az ANSI.COM ( Michael J. Mefford ), az ansicon ( Jason Hood ).
Sok Unix konzolalkalmazás (pl . ls , grep , Vim , Emacs ) képes ezeket előállítani. Egyes segédprogramok ( tput ), alacsony szintű ( termcap , terminfo ) és magas szintű ( curses ) könyvtárak kiadják ezeket.
Az IBM OS/2 operációs rendszer 3.0-s és újabb verzióiban, beleértve az EC-ket is, az ANSI-támogatás teljes képernyős és ablakos konzol módban alapértelmezés szerint engedélyezve van.
Az MS-DOS 1.0 nem támogatta az ANSI-t vagy más escape szekvenciákat. Csak néhány vezérlőkarakter ( CR , LF , BS ) lett értelmezve, ami lehetetlenné tette a teljes képernyős alkalmazások létrehozását. Bármilyen megjelenítési hatás csak BIOS -hívásokkal érhető el (vagy gyakrabban az IBM PC hardverének közvetlen manipulálásával ).
Az MS-DOS 2.0 lehetővé tette az ANSI escape szekvenciák támogatásához illesztőprogram telepítését - az ANSI.SYS volt a de facto szabvány , de másokat is használtak (ANSI.COM [4] , NANSI.SYS [5] ). A lassúság és az a tény, hogy az illesztőprogram alapértelmezés szerint nincs telepítve, azt jelentette, hogy alig használták őket; a szoftver továbbra is közvetlenül manipulálta a hardvert, hogy a kívánt hatásokat a szöveges terminálban hozza létre. Az ANSI.SYS és a hasonló illesztőprogramok továbbra is használatban voltak a Windows 98-ban, sőt a Windows ME-ben is natív DOS módban (teljes képernyős szöveges mód). Az ANSI.SYS a Windows NT család rendszerein is működik 16 bites módban az NTVDM -et használó régi programokhoz .
konzol egyáltalán nem támogatta az ANSI escape szekvenciákat a Windows 10 „Threshold 2”-ig. A szoftver ioctl -szerű konzol API rendszerhívásokon keresztül tudja vezérelni a konzolt, szövegkimenettel átlapolva. Egyes programok belsőleg értelmezik az ANSI escape szekvenciákat a szövegbevitelből, és lefordítják azokat a megfelelő rendszerhívásokká.
Az Escape sorozatok ESC karakterrel kezdődnek ( ASCII : 27 / 0x 1B / 0 33). Kétkarakteres sorozatok esetén a második karakter egy ASCII karakter lehet a 64 és 95 közötti tartományban ( @ - _ ). A legtöbb sorozat azonban két karakternél hosszabb, és ESC -vel és [ . Az ESC és [ karakterek kombinációját CSI -nek vagy Control Sequence Introducernek (Control Sequence Intiatornak is) nevezik . Ennek a sorozatnak az utolsó karaktere lehet egy ASCII karakter a 64 és 126 közötti tartományban ( @ -tól ~ ig ).
Van egy egykarakteres CSI is ( ASCII : 155 / 0x 9B / 0 233). Az ESC + [ formájú CSI -t gyakrabban használják, mint az egykarakteres alternatívát (lásd még a C0 és C1 vezérlőkódokat ). Csak az ESC + [ jelet ismerik fel azok az eszközök, amelyek csak az ASCII-t (7 bites bájtot) támogatják, vagy azok az eszközök, amelyek támogatják a 8 bites bájtokat, de a 0x80-0x9F tartományba eső vezérlőkaraktereket használnak más célokra. Az UTF-8 kódolást használó terminálokon mindkét űrlap 2 bájtot vesz fel ( CSI UTF-8-ban: 0x C2, 0x 9B), de az ESC + [ olvashatóbbnak tűnik.
Bár egyes kódolások több bájtot használnak egyetlen karakter kódolásához, a cikk további részében csak azokat az ASCII-karaktereket vesszük figyelembe, amelyeket egyetlen bájt képvisel.
A legtöbb ANSI escape szekvencia felépítése a következő:
CSI [символ(-ы) режима] n1 ; n2... [замыкающий(-ие) символ(-ы)] буква
Az utolsó bájt ( буква), módosított символами режимаés замыкающими символами, határozza meg a parancsot. A számok n1, n2, … opcionális paraméterek. Ha ezek értékei nincsenek megadva, akkor az alapértelmezett érték általában 0 vagy 1, a művelettől függően. Ha a következő számok nincsenek megadva, akkor a pontosvessző is elhagyható.
Az utolsó bájt formálisan tetszőleges karakter lehet 64-től 126-ig ( 0x40 -től 0x7e -ig , ASCII: @ -tól ~ -ig ), megváltoztatható a megelőző köztes bájtokkal a 32-től 47-ig terjedő tartományban ( 0x20 -tól ig 0x 2f ).
A kettőspont karakter ( 0x 3a) nem szerepelhet egy sorozatban. A jövőbeni szabványosításra hagytuk, így a kettőspontot tartalmazó szekvenciák figyelmen kívül maradnak.
Bár több módú karakter és több záró karakter is megengedett, ez nem használatos.
Néhány ANSI escape szekvencia (részleges lista)A kód | Név | Hatás |
---|---|---|
CSI n A | CUU-kurzor felfelé | A kurzort n (alapértelmezett 1) pozícióba mozgatja a megadott irányba. Ha a kurzor már a terminálablak szélén van, nem történik semmi. |
CSI n B | CUD-kurzor lefelé | |
CSI n C | CUF – Kurzor előre | |
CSI n D | CUB – Kurzor vissza | |
CSI n E | CNL-Kurzor Következő sor | A kurzort az n- edik (alapértelmezett 1.) sor elejére mozgatja az aktuális sor alatt. |
CSI n F | CPL – Kurzor előző sora | A kurzort az n- edik (alapértelmezett 1.) sor elejére mozgatja az aktuális felett. |
CSI n G | CHA-kurzor vízszintes abszolút | A kurzort az n oszlopba mozgatja . |
CSI n ; m H | CUP – Kurzor pozíciója | A kurzort az n sorba, m oszlopba mozgatja . Az n és m alapértelmezett értéke 1 (bal felső sarok), ha csak egy argumentumot adunk meg pontosvessző nélkül, akkor azt n -nek tekintjük . Például a CSI ;5H szekvencia a CSI 1;5H szekvencia , a CSI 17;H a CSI 17H és a CSI 17;1H szinonimája . |
CSI n J | ED-Erase Data | Törli a terminálablak egy részét. Ha n nulla (vagy hiányzik), a kurzortól a terminálablak végéig mindent töröl. Ha n egyenlő eggyel, akkor a kurzortól a terminálablak elejéig mindent töröl. Ha n kettő, törli a teljes terminálablakot (és a kurzort a bal felső sarokba mozgatja az MS-DOS ANSI.SYS-ben). Ha n egyenlő 2-vel, akkor törlés helyett csak új sorok létrehozása történhet, így a terminál korábbi tartalma felfelé tolódik. |
CSI n K | EL-Erase in Line | Eltávolítja a karakterlánc egy részét. Ha n nulla (vagy hiányzik), a kurzortól a sor végéig mindent töröl. Ha n egyenlő eggyel, akkor a kurzortól a sor elejéig mindent töröl. Ha n kettő, törli a teljes karakterláncot. A kurzor pozíciója nem változik. |
CSI n S | S-Scroll Up | Felfelé görgeti az aktuális termináloldalt n (alapértelmezett 1) sorral. Az új sorok alul, az aktuális oldal tetején lévő sorok felülíródnak. (nem ANSI.SYS) |
CSI n T | SD-Görgessen lefelé | Az aktuális termináloldalt n (alapértelmezett 1) sorral lefelé görgeti. Az új sorok a tetejére kerülnek, az aktuális oldal alján lévő sorok törlődnek. (nem ANSI.SYS) |
CSI n ; m f | HVP – Vízszintes és függőleges helyzet | A kurzort az n sorba, m oszlopba mozgatja . Mindkét paraméter alapértelmezett értéke 1. Ugyanaz a hatás, mint a CUP. |
CSIn [ ; k ] m | SGR – Válassza a Grafikus megjelenítés lehetőséget | Állítsa be a szöveg- és háttérszíneket meghatározó SGR-paramétereket . A CSI után nulla vagy több paraméter lehet, pontosvesszővel elválasztva. Ha a paraméterek nincsenek megadva, a CSI m úgy viselkedik, mint a CSI 0 m (visszaállítás / normál). |
CSI 6n | DSR – Eszközállapot jelentés | Jelenti a kurzor aktuális pozícióját ESC[ n formátumban ; m R , ahol n egy sor, m egy oszlop. (Lehet, hogy nem működik MS-DOS-ban) |
CSI-k | SCP – Kurzorpozíció mentése | Tárolja a kurzor pozícióját. |
CSI u | RCP – A kurzor pozíciójának visszaállítása | Visszaállítja a kurzor pozícióját. |
CSI?25l | DECTCEM | Elrejti a kurzort. |
CSI?25h | DECTCEM | Láthatóvá teszi a kurzort. |
A kód | Hatás | jegyzet |
---|---|---|
0 | Visszaállítás / Normál | kapcsolja ki az összes attribútumot |
egy | Félkövér vagy növelje a fényerőt | |
2 | Fakult (csökkenti a fényerőt) | Nem mindenhol támogatott |
3 | Dőlt: be | Nem mindenhol támogatott. Néha inverzióként kezelik. |
négy | Aláhúzva: egyszer | |
5 | Villog: Lassan | percenként kevesebb mint 150-szer |
6 | Villog: Gyakran | MS-DOS ANSI.SYS; 150+ percenként; nem mindenhol támogatott |
7 | Kijelző: negatív | megfordítja vagy megfordítja; módosítsa a háttér és a szöveg színét |
nyolc | Rejtett | Nem mindenhol támogatott. |
9 | Áthúzott | A karakterek olvashatók, de töröltként vannak megjelölve. Nem mindenhol támogatott. |
tíz | Elsődleges (alapértelmezett) betűtípus | |
11–19 | -th alternatív betűtípus | Kiválasztja az alternatív betűtípust (14-től a 4. alternatív betűtípus, 19-ig a 9. alternatív betűtípus). |
húsz | Törés | alig támogatott |
21 | Félkövér: Ki vagy aláhúzás: Dupla | a félkövér nem mindig támogatott; dupla aláhúzás alig támogatott. |
22 | Normál szín vagy fényerő | Se nem kövér, se nem fakult |
23 | Nem kurzív, nem tört | |
24 | Aláhúzás: Nem | Sem egyszeres, sem dupla aláhúzás |
25 | Villog: kikapcsolva | |
26 | Fenntartott | |
27 | Kijelző: normál | nem negatív |
28 | Megjelenik | kapcsold ki a rejtést |
29 | nem áthúzott | |
30–37 | Szövegszín beállítása (előtér) | 30+ , hol az alábbi színtáblázatból |
38 | További színekre fenntartva | a következő argumentumok általában támogatottak: 5;nhol van a színindex ( ) vagy hol vannak a szín piros, zöld és kék csatornái (a belsejében ) 0..2552;r;g;b255 |
39 | Alapértelmezett szövegszín (előtér) | megvalósítás függő (szabvány szerint) |
40–47 | Állítsa be a háttérszínt | 40+ , ahol az alábbi színtáblázatból |
48 | Kibővített háttérszín beállítására van fenntartva | általában támogatja a következő argumentumokat , 5;nahol a színindex ( ) vagy hol a piros, zöld és kék színcsatorna (a ) belsejében0..2552;r;g;b255 |
49 | Alapértelmezett háttérszín | megvalósítás függő (szabvány szerint) |
ötven | fenntartott | |
51 | Keretezett | |
52 | Körülvett | |
53 | felülírva | |
54 | Nincs bekeretezve és nincs körülvéve | |
55 | nincs túlhúzva | |
56–59 | fenntartott | |
60 | ideogram aláhúzás vagy jobb oldali vonal | alig támogatott |
61 | ideogram dupla aláhúzás vagy dupla vonal a jobb oldalon | alig támogatott |
62 | ideogram felső vagy bal oldali vonal | alig támogatott |
63 | ideogram kettős áthúzás vagy dupla vonal a bal oldalon | alig támogatott |
64 | ideogram stressz jelölés | alig támogatott |
65 | ideogram attribútumok kikapcsolva | alig támogatott, törli a kódok hatásait 60-64 |
90–97 | Állítsa be az előtérben lévő szöveg színét, nagy intenzitást | aixterm (nem szabványos) |
100–107 | Állítsa be a háttérszínt, nagy intenzitást | aixterm (nem szabványos) |
A szöveg színeit (és általában az SGR-paramétereket) a szekvenciák szabályozzák , ahol mindegyik , , ... egy SGR-paraméter, ahogy fentebb is látható. Így például kódokat használ a szöveg színének beállítására, a háttérszín beállítására, ahol az alábbi táblázatban található színszám. A következő példák használhatók olyan segédprogrammal, ahol vagy implementálják a CSI-t: A szöveg színének feketére történő módosításához használja a ; pirosra ; félkövér szürke beállítás ; meg félkövér piros . Az alapértelmezett színek beállításához használja (egyes terminálok nem támogatják) (vagy állítsa vissza az összes attribútumot ). CSI n1 [;n2 [; ...]] mn1n230+i40+iiprintf\x1b[\e[\x1b[30m\x1b[31m\x1b[30;1m\x1b[31;1m\x1b[39;49m\x1b[0m
Színtábla [6]Intenzitás | 0 | egy | 2 | 3 | négy | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
Normál | Fekete | Piros | Zöld | Sárga | Kék | Bíborvörös | cián | fehér |
Fényes | Fekete | Piros | Zöld | Sárga | Kék | Bíborvörös | cián | fehér |
Karakterkódolások | |
---|---|
Történelmi kódolások | kiegészítő komp. szemafor (Makarov) morze Bodo MTK-2 comp. 6 bites SCP RADIX-50 EBCDIC KOI-7 ISO 646 |
modern 8 bites megjelenítés | szimbólumok ASCII nem ASCII 8 bites kódlapok cirill betűs KOI-8 Alapvető kódolás MacCyrillic ISO 8859 1 (lat.) 2 3 négy 5 (kir.) 6 7 nyolc 9 tíz tizenegy 12 13 tizennégy 15 (€) 16 ablakok 1250 1251 (kir.) 1252 1253 1254 1255 1256 1257 1258 WGL4 IBM és DOS 437 850 852 855 866 "alternatív" MIC |
Többbájt | hagyományos DBCS GB2312 HTML unicode UTF-32 UTF-16 UTF-8 karakterlista cirill betűs |
felhasználói felület billentyűzetkiosztás locale soros fordítás betűtípus transzliteráció egyedi betűtípusok segédprogramok ikonv rekord |
ISO szabványok | |
---|---|
| |
1 -től 9999 -ig |
|
10 000 és 19999 között |
|
20000+ | |
Lásd még: Azon cikkek listája, amelyek címe "ISO"-val kezdődik |
Ecma nemzetközi szabványok | |
---|---|