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);
#endifFontosabb 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
-
A VT100 terminál használati utasítása
-
Ezen belül is főleg az ANSI szabvány szerinti kontrollszekvenciák
-
Az XTerm kontrollszekvenciái
Salvi Péter, 2020