VT100 kontrollszekvenciák

Ez egy rövid összefoglaló arról, hogy hogyan lehet terminálban színeket alkalmazni, a kurzort pozícionálni, átmérezni az ablakot, törölni a képet stb.

Történet

A terminál ("parancssor") valójában a "terminál emulátor" rövidítése. Maga a terminál fogalom valójában egy gépet jelöl, amely perifériákat szolgáltat egy szerverhez, tehát ez kezeli a be- és kimenetet, akár fizikailag távol a tényleges számításokat végző számítógéptől. Egy terminál minimálisan egy képernyőből és egy billentyűzetből áll, ezeket "thin client"-nek is nevezik.

A VT100 egy 1978-ban megjelent terminál, mely nagy népszerűségnek örvendett, többek közt azért, mert speciális karakterek beírásával lehetővé tette a szövegek formázását, a kurzor mozgatását és más hasonló funkciókat. (Addig csak mindig új sorokban lehetett megjeleníteni mindent, mintha nem is képernyő lenne, hanem [sor]nyomtató - ami a 70-es években a számítógépek fő kimeneti eszköze volt.)

A modern számítógépek terminál emulátorai ehhez hasonló funkcionalitást szolgáltatnak, és általában képesek a VT100 modell parancsait feldolgozni. Ez tehát egy platformfüggetlen módot ad nekünk arra, hogy igényesebb kimenetet generáljunk.

A kontrollszekvenciák szerkezete

Minden kontrollszekvencia egy escape karakterrel kezdődik; ezt leírástól függően ESC-nek jelölik, vagy ^[-nek - a vim felhasználók felismerik, hogy ez a Ctrl+[ billentyűkombináció, ami az escape-pel azonos értékű. Az escape ASCII-kódja 27, tehát programból (char)27-tel is ki tudjuk írni, de jobb szövegszerkesztőkben egyenesen is begépelhető (emacs-ban C-q ESC, vim-ben i_CTRL-V Esc).

A szekvenciák általában egy betűre végződnek, ami a parancs kategóriáját határozza meg, pl. a formázás az m. Több szekvencia tartalmaz paramétereket, ezeket ;-vel kell elválasztani. Például az "^[[1;4;7m" karakterlánc hatására félkövér, aláhúzott, inverz formázást állítunk be (ne csináljunk ilyet...).

VT100 emuláció Windows alatt

A Windows parancssor alapesetben nem emulálja a VT100 terminált, ezt külön be kell kapcsolni az alábbi programrészlet segítségével:

#ifdef WIN32
  #include <windows.h>
#endif

...

#ifdef WIN32
  // Enable VT100 escape control characters on Windows
  HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
  DWORD dwMode;
  GetConsoleMode(hOutput, &dwMode);
  dwMode |= ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING;
  SetConsoleMode(hOutput, dwMode);
#endif

Fontosabb kombinációk

Az esetleges paramétereket P1 ... Pn jelöli.

Kód Jelentés Paraméterek Példa
ESC c Reset ^[c
ESC [ P1 J Törlés 0: kurzortól lefelé ^[[1J
1: kurzortól felfelé
2: az egész képernyőt
ESC [ P1 K Sortörlés 0: kurzortól jobbra ^[[2K
1: kurzortól balra
2: az egész sort
ESC [ P1 ; ... ; Pn m Formázás 0: kikapcsolás ^[[1;7m
1: félkövér
2: halvány
4: aláhúzás
5: villogás
7: inverz
8: láthatatlan
30-37, 90-97: szín
39: alapértelmezett szín
40-47, 100-107: háttérszín
49: alapértelmezett háttérszín
ESC [ P1 ; P2 H Kurzormozgatás P1: sor, P2: oszlop ^[[3;2H

A színek:

30/40 31/41 32/42 33/43 34/44 35/45 36/46 37/47
fekete piros zöld sárga sötétkék lila kék szürke
90/100 91/101 92/102 93/103 94/104 95/105 96/106 97/107
sötétszürke világospiros világoszöld világossárga világoskék rózsaszín világoskék fehér

Az X Window ablakozó rendszerben számos további kiterjesztés van, amelyekkel pl. magát az ablakot át lehet méretezni vagy el lehet mozgatni. (Ezek Windows alatt valószínűleg nem használhatóak.) Példaként itt van néhány parancs:

Kód Jelentés Paraméterek Példa
ESC [ 3 ; P1 ; P2 t Mozgatás P1: x, P2: y ^[[3;150;200t
ESC [ 8 ; P1 ; P2 t Átméretezés P1: magasság, P2: szélesség ^[[8;80;25t
ESC [ 9 ; 0 t Maximalizálás ^[[9;0t
ESC [ 10 ; P1 t Teljes képernyő 0: kikapcsolás ^[[10;2t
1: bekapcsolás
2: ki/be váltás

További olvasnivalók

Salvi Péter, 2020