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