ANSI escape szekvenciák

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt hozzászólók, és jelentősen eltérhet a 2015. december 22-én felülvizsgált verziótól ; az ellenőrzések 20 szerkesztést igényelnek .

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.

Történelem

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.

Támogatás

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.

Windows és DOS

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á.

Sorozatelemek

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.

CSI kódok

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.
SGR (Select Graphic Rendition) paraméterek
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)

Színek

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

Lásd még

Jegyzetek

  1. ↑ A visszavont szabványok NIST listája
  2. Paul Williams. Digital's Video Terminals (nem elérhető link) . VT100.net (2006). Letöltve: 2011. augusztus 17. Az eredetiből archiválva : 2012. július 23. 
  3. Heathkit Company. Heathkit katalógus 1979 (nem elérhető link) . Heathkit Company (1979). Letöltve: 2011. november 4. Az eredetiből archiválva : 2012. január 13.. 
  4. Michael Mefford. ANSI.com: Töltse le itt . PC Magazin (1989. február 7.). Letöltve: 2011. augusztus 10. Az eredetiből archiválva : 2012. december 18..
  5. Dan Kegel, Eric Auer. Nansi és NNansi - ANSI illesztőprogramok MS-DOS-hoz . Dan Kegel Web Hostel (1999. február 28.). Letöltve: 2011. augusztus 10. Az eredetiből archiválva : 2012. december 18..
  6. ↑ A nevek szabványosak, de a színek pontos jelentése nincs szabványosítva, és az azokat megjelenítő eszköztől függ.

Linkek