Man console_codes (4): sekvence escape a escape konzole Linux
Linuxová konzole má velkou sadu ovládacích prvků pro terminály VT102 a ECMA-48/ISO 6429/ANSI X364 a také řadu jednotlivých sekvencí pro změnu barevná paleta, převody znakových sad atd. Níže uvedené tabulky (druhý sloupec) označují mnemotechnický kód ECMA-48 nebo DEC (pokud je DEC přiřazen k DEC) pro tuto funkci. Sekvence bez mnemotechnického kódu nepatří do ECMA-48 ani do VT102.První proces, který se provádí po práci normální proces pro výstup informací a odeslání proudu znaků konzoly do ovladače (pro jejich skutečný výstup), je překlad kódů používaných při běžném provozu na kódy používané pro tisk.
Pokud konzola běží v režimu UTF-8, jsou příchozí bajty nejprve uspořádány do 16bitového Unicode. Jinak je každý bajt převeden podle aktuální vyhledávací tabulky (která převádí data do Unicode). Viz sekce Znakové sady níže).
Obvykle jsou hodnoty Unicode převedeny na index písem, který je uložen ve video paměti tak, že se na obrazovce objeví odpovídající obrázek (nacházející se ve video ROM). Všimněte si, že práce s Unicode (a současným počítačovým hardwarem) umožňuje současné použití pouze 512 různých obrázků.
Pokud je aktuální hodnotou Unicode řídicí znak nebo pokud se právě zpracovává sekvence escape, bude s hodnotou zacházeno jinak. Místo toho, aby byla hodnota převedena na písmo a zobrazena jako obrázek, způsobí provedení specifické akce (jako je pohyb kurzoru) nebo jiné ovládací funkce. Viz část níže Správa konzole Linux.
Je nesprávné explicitně specifikovat hardwarové sekvence ovládání terminálu v programech. Linux podporuje základnu funkčnosti terminálu terminfo(5). Namísto ručního zadávání escape sekvencí budete pravděpodobně chtít použít knihovnu, která k provedení práce používá terminfo nebo jiné nástroje, jako např. ncurses(3), tput(1) nebo resetovat(1).
Správa konzole Linux
Tato část popisuje všechny řídicí znaky a sekvence escape, které se provádějí speciální týmy(tj. cokoli jiného než pouhé vytištění znaku na aktuální pozici kurzoru) konzole Linux.Řídící znaky
Znak je považován za řídicí znak, pokud (před převodem podle převodní tabulky) obsahuje jeden ze 14 kódů: 00 (NUL), 07 (BEL), 08 (BS), 09 (HT), 0a (LF), 0b (VT), 0c (FF), 0d (CR), 0e (SO), 0f (SI), 18 (CAN), 1a (SUB), 1b (ESC), 7f (DEL). Můžete nastavit režim „zobrazit řídicí znaky“ (viz níže), v tomto případě se znaky 07, 09, 0b, 18, 1a, 7f zobrazí na obrazovce jako obrázky. Na druhou stranu v režimu UTF-8 jsou všechny kódy 00 až 1f považovány za řídicí znaky, bez ohledu na režim „zobrazit řídicí znaky“.
Pokud je nalezen řídicí znak, je okamžitě zohledněn a nemá žádný další účinek (i když byl uprostřed sekvence escape) a řídicí sekvence pokračuje od dalšího znaku. Znak ESC zahajující novou escape sekvenci však pravděpodobně zruší neúplnou předchozí sekvenci a znaky CAN a SUB definitivně ukončí jakoukoli escape sekvenci. Rozpoznané řídicí znaky jsou: BEL, BS, HT, LF, VT, FF, CR, SO, SI, CAN, SUB, ESC, DEL, CSI. Provádějí za ně standardní akce:
BEL(0x07, ^G) vydá pípnutí; BS(0x08,^H ) smaže předchozí znak (posune o jeden sloupec doleva, ne však dále než na začátek řádku); HT(0x09, ^I) přesune se na další zarážku tabulátoru nebo na konec řádku, pokud předtím nebyly žádné zarážky nastaveny; LF (0x0A,^J ), VT (0x0B,^K ) a FF (0x0C,^L ) nastavit posun řádku a LF/NL (v režimu nového řádku) provede návrat vozíku; CR(0x0D, ^M) určuje návrat vozíku; SO(0x0E,^N ) aktivuje znakovou sadu G1; SI(0x0F, ^[ ^O
) napájí sadu symbolů G0;
CAN (0x18, | ^X | ) a SUB (0x1A, |
^Z | ) přerušit sekvenci screeningu; | ESC (0x1B, |
) zahájit sekvenci screeningu; | DEL (0x7F) je ignorováno; | CSI (0x9B) je ekvivalentní ESC [. |
ESC, ale ne CSI sekvence | ESC c | RIS |
Resetovat. | ESC D | IND |
Posuv řádku. | ESC E | NEL |
Nová řada. | ESC H | HTS |
Nastavte zarážku tabulátoru v aktuálním sloupci. | ESC M | R.I. |
Reverzní posuv řádku. | ESC Z | Začátek kontrolní sekvence |
ESC % | Spusťte sekvenci s výběrem znakové sady |
|
ESC % @ | výchozí výběr (ISO 646/ISO 8859-1) |
|
ESC % G | vyberte UTF-8 |
|
ESC % 8 | vyberte UTF-8 (zastaralé) |
|
ESC#8 | DECALN | Test zarovnání obrazovky DEC: Vyplní obrazovku znaky E. |
ESC ( | Začněte sekvenci výběrem znakové sady G0 |
|
ESC (B | výchozí výběr (převod ISO 8859-1) |
|
ESC (0 | výběr grafického překódování VT100 |
|
ESC (U | bez překódování --- přímo do znakové ROM |
|
ESC(K | uživatelské překódování --- mapa |
|
načteno utilitou mapscrn(8). |
||
ESC) | Začněte sekvenci výběrem znakové sady G1 |
|
(následovaný jedním ze symbolů B, 0, U, K, jako u G0). |
||
ESC > | DECPNM | Nastavte režim zadávání čísel pro přídavnou klávesnici |
ESC = | DECPAM | Nastavte režim ovládání pro další klávesnici |
ESC] | O.S.C. | (Mělo by být: příkaz operační systém, OSC) ESC ] P nrrggbb: nastavení palety, parametr určuje 7 hexadecimálních znaků za posledním P:-(. Zde n nastaví barvu (0-15) a in rrggbb jsou uvedeny hodnoty červená/zelená/modrá (0-255). ESC ] R: Resetovat paletu |
ECMA-48 CSI sekvence
Po CSI (nebo ESC[) následuje sekvence parametrů, což jsou desetinná čísla oddělená středníky (největší je NPAR(16)). Prázdný nebo chybějící parametr se rovná nule. Posloupnost parametrů může začínat jedním otazníkem.
Po CSI [ (nebo ESC [ [) se však přečte jeden znak a zbytek sekvence je ignorován. (Smyslem toho je nezobrazovat funkční klávesa).
Výsledek sekvence CSI je určen jejím koncovým znakem.
@ | ICH | Vložte N prázdných znaků. |
A | CUU | Posuňte kurzor o N řádků nahoru. |
B | CUD | |
C | CUF | |
D | MLÁDĚ | Přesuňte kurzor na levých N sloupců. |
E | CNL | Přesuňte kurzor o N řádků dolů do sloupce 1. |
F | CPL | Přesuňte kurzor o N řádků nahoru do sloupce 1. |
G | CHA | |
H | POHÁR | Přesuňte kurzor na zadaný řádek a sloupec (začít na 1,1). |
J | ED | Vymažte obrazovku (ve výchozím nastavení od kurzoru po konec obrazovky). |
ESC [ 1 J: Vymazání od začátku po kurzor. |
||
ESC [ 2 J: Vymazání celé obrazovky. |
||
ESC [ 3 J: vymazání celé obrazovky včetně vyrovnávací paměti |
||
zpětný posun (od Linuxu 3.0). |
||
K | EL | Vymazat řádek (výchozí od kurzoru po konec řádku). |
ESC [ 1 K: Vymazání od začátku řádku ke kurzoru. |
||
ESC [ 2 K: Vymazat celý řádek. |
||
L | IL | Vložit N prázdné řádky. |
M | D.L. | Smazat N řádků. |
P | DCH | Odstraňte N znaků aktuální linka. |
X | ECH | Vymažte N znaků v aktuálním řádku. |
A | HPR | Přesuňte kurzor na pravých N sloupců. |
C | D.A. | Odezva ESC [ ? 6 c: „Jsem terminál VT102.“ |
d | VPA | Přesuňte kurzor na určený řádek aktuálního sloupce. |
E | VPR | Posuňte kurzor o N řádků dolů. |
F | HVP | Přesuňte kurzor na určený řádek a sloupec. |
G | TBC | Žádný parametr: Vymaže aktuální zarážku tabulátoru. |
ESC [ 3 g: odstranění všech zarážek tabulátoru. |
||
h | S.M. | Režim instalace (viz níže). |
l | R.M. | Resetovací režim (viz níže). |
m | SGR | Nastavení atributů (viz níže). |
n | DSR | Zpráva o stavu (viz níže). |
q | DECLL | Ovládání indikátorů na klávesnici. |
ESC [ 0 q: vypnutí všech indikátorů |
||
ESC [ 1 q: povolit Scroll Lock |
||
ESC [ 2 q: povolit Num Lock |
||
ESC [ 3 q: povolit Caps Lock |
||
r | DECSTBM | Nastavit oblast posouvání; parametry budou horní a dolní řádky. |
s | ? | Uložit umístění kurzoru. |
u | ? | Obnovte umístění kurzoru. |
` | HPA | Přesuňte kurzor na zadaný sloupec aktuální linka. |
Nastavení grafických možností ECMA-48
ECMA-48 SGR sekvence řídicích znaků ESC [ parametry m nastavuje atributy obrazovky. V jedné sekvenci lze zadat několik atributů. Prázdný parametr (mezi středníkem nebo úvodní čárou nebo znakem na konci) je považován za nulu.
parametr | výsledek |
0 | obnovit všechny atributy na jejich výchozí hodnoty |
1 | nastavit tučně |
2 | nastaveno na jasnější (simulováno barvou na barevném displeji) |
4 | nastavit podtržení (simulováno barvou na barevném displeji) (barvy používané k simulaci ztmavení nebo podtržení se nastavují pomocí ESC ] ...) |
5 | zapnout blikání |
7 | povolit inverzi videa |
10 | resetovat vybrané překódování, příznak ovládání obrazovky a přepnout meta příznak (v ECMA-48 specifikovaný jako "primární písmo"). |
11 | vyberte nulové překódování, nastavte příznak ovládání obrazovky, resetujte přepínač příznaků meta (v ECMA-48 je specifikován jako „první alternativní písmo“). |
12 | vyberte null recoding, nastavte příznak ovládání obrazovky, nastavte přepínač meta příznaku (v ECMA-48 je specifikován jako „druhý alternativní font“). Přepnutí příznaku meta způsobí, že nejvýznamnější bit v bajtu se přepne, než je překódován podle překladové tabulky. |
21 | povolit normální intenzitu (v ECMA-48 specifikovanou jako "dvojité podtržení") |
22 | zapněte normální intenzitu |
24 | vypnout podtržení |
25 | vypněte blikání |
27 | vypnout obrácené video |
30 | nastavit barvu znaku na černou |
31 | nastavte barvu symbolu na červenou |
32 | nastavte barvu symbolu na zelenou |
33 | instalovat hnědý postavy |
34 | instalovat modrý postavy |
35 | nastavte barvu symbolu na lila |
36 | nastavte barvu symbolu na modrou |
37 | instalovat bílý postavy |
38 | povolit podtržení, nastavit výchozí barvu znaků |
39 | vypnout podtržení, nastavit výchozí barvu znaků |
40 | nastavit barvu pozadí na černou |
41 | nastavit barvu pozadí červenou |
42 | nastavte barvu pozadí na zelenou |
43 | nastavte barvu pozadí na hnědou |
44 | nastavte barvu pozadí na modrou |
45 | nastavit barvu pozadí na lila |
46 | nastavte barvu pozadí na modrou |
47 | nastavte barvu pozadí na bílou |
49 | nastavit výchozí barvu pozadí |
Přepínače režimu ECMA-48
ESC [ 3 h DECCRM (výchozí vypnuto): Zobrazit řídicí znaky.
ESC [ 4 h DECIM (výchozí vypnuto): Povolí režim vkládání.
ESC [ 20 h LF/NL (výchozí vypnuto): Automaticky vydává kód CR po LF, VT nebo FF. Stavové výstupní příkazy ECMA-48 ; ESC [ 5 n Zpráva o stavu zařízení (DSR): Odpověď je ESC [ 0 n (svorka je v pořádku). ESC [ 6 n Zpráva o poloze kurzoru (CPR): Odpověď je ESC [ y x
R, kde
x, y jsou souřadnice kurzoru. Sekvence speciálního režimu DEC (DECSET/DECRST)
ESC [ ? 1 h DECCKM (výchozí vypnuto): Když je povoleno, kurzorové klávesy posílají předponu ESC O místo ESC [.
Následující sekvence nejsou ani ECMA-48 ani VT102. Jsou k dispozici pouze v ovladači konzoly Linux. Barvy v parametrech SGR: 0 = černá, 1 = červená, 2 = zelená, 3 = hnědá, 4 = modrá, 5 = lila, 6 = světle modrá, 7 = bílá.
ESC[1; n ] | Nastavit barvu n jako barvu podtržení |
ESC[2; n ] | Nastavit barvu n jak barva vybledne |
ESC [8] | Nastavte aktuální pár barev jako výchozí atributy. |
ESC[9; n ] | Poté vypněte obrazovku n zápis. |
ESC [10; n ] | Nastavte frekvenci zvukový signál(v hertzech). |
ESC[11; n ] | Nastavte dobu trvání zvukového signálu (v milisekundách). |
ESC[12; n ] | Přesuňte určenou konzolu před ostatní. |
ESC [13] | Zapněte obrazovku. |
ESC[14; n ] | Nastavte interval vypnutí VESA (v minutách). |
ESC [15] | Přesuňte předchozí konzolu před ostatní (od Linuxu 2.6.0). |
ESC[16; n ] | Nastavte interval blikání kurzoru v milisekundách (od Linuxu 4.2) |
Znakové sady
Jádro má informace o 4 typech překladu bajtů do znaků konzole obrazovky. Tyto čtyři tabulky jsou: a) Latin1 -> PC, b) grafika VT100 -> PC, c) PC -> PC, d) definovaná uživatelem.V systému jsou dvě znakové sady, nazývané G0 a G1, a jedna z nich je aktuální znaková sada systému (původně G0). Vstupte ) nastavit posun řádku a LF/NL (v režimu nového řádku) provede návrat vozíku; způsobí, že se nastavení G1 stane aktuálním, ^M nastaví G0 aktuální.
Tyto proměnné G0 a G1 ukazují na překladovou tabulku a uživatel je může změnit. Zpočátku ukazují na tabulky a) a b). Sekvence ESC(B, ESC(0, ESC(U a ESC(K) způsobují, že GO odkazuje na translační tabulky a), b), c) ad). Sekvence ESC) B, ESC) 0, ESC) U a ESC) K způsobují, že G1 odkazuje na translační tabulku a), b), c) ad).
Sekvence ESC c resetuje terminál, což je to, co byste chtěli udělat, když je na obrazovce nevyžádaná pošta. Doporučení uvedené po "echo ^V^O" učiní pouze G0 aktuální sadu, ale není zaručeno, že G0 ukazuje na tabulku a). Některé distribuce mají program resetovat(1), který pouze provede příkaz „echo ^ . Bitmapa odpovídající s je vyhledána v symbolové ROM a lze ji změnit pomocí setfont(8).
Sledování myši
Pro sledování aktivity myši má systém vydat xterm(1)-kompatibilní signály stavu myši. Protože ovladač konzoly nerozpozná zařízení, jako je myš (nebo podobného typu), jsou tyto signály odeslány do vstupního proudu konzoly pouze tehdy, když ovladač virtuálního terminálu přijme signál ioctl k aktualizaci stavu myši. Tyto signály ioctl musí být generovány uživatelskými aplikacemi s podporou myši, jako je služba gpm(8).Parametr pro všechny vytvořené xterm(1) escape sekvence (signály z myši) budou jeden znak, jehož kód se rovná význam+040. Například "!" odpovídá jednomu. Zpráva o souřadnicovém systému obrazovky začíná na 1.
V režimu kompatibility X10 odesílají stisknutí tlačítka sekvence escape, které zakódují umístění myši i informace o stisknutém tlačítku. Režim se aktivuje, když ESC [? 9 h a vypne se, když ESC [ ? 9 l. Když stisknete tlačítko xterm(1) odešle ESC [ M bxy(6 znaků), kde b je tlačítko 1 a x a y jsou souřadnice x a y při stisknutí tlačítka. Jsou to stejné kódy, které generuje a vydává jádro.
V normální režim Sledování myši (které nebylo implementováno v Linuxu 2.0.24) sekvence escape se odesílají při stisknutí a uvolnění tlačítka myši. Odesílají se také informace o modifikátoru. Režim se aktivuje, když ESC [? 1 000 h a vypne se při vydání ESC [ 1 000 l. Když stisknete nebo uvolníte tlačítko xterm(1) vydává ESC [ M bxy. Dva nejméně významné bity b obsahují informace o tlačítkách: 0=stisknuto MB1, 1=stisknuto MB2, 2=stisknuto MB3, 3=uvolněno. Nejvýznamnější bity obsahují informaci o tom, které modifikátory byly stisknuty při stisku tlačítka. Tyto informace se přidají, když stisknete: 4=Shift, 8=Meta, 16=Control. Znovu: ESC [ 5 n Zpráva o stavu zařízení (DSR): Odpověď je ESC [ 0 n (svorka je v pořádku). A Stavové výstupní příkazy ECMA-48 jsou souřadnice x a y myši při zpracování události. Souřadnice levého horního rohu jsou považovány za (1,1).
Srovnání s jinými terminály
Mnoho dalších typů terminálů je popsáno jako linuxová konzole jako kompatibilní s VT100. Dále probereme rozdíly mezi linuxovou konzolí a dalšími dvěma hlavními typy --- DEC VT102 a xterm(1).Manipulace s řídicími znaky
Typ VT102 také rozpoznává následující řídicí znaky:
NUL (0x00) je ignorováno; ENQ (0x05) spouští zprávu s odpovědí; DC1(0x11, ^Q, XON) obnoví přenos;
DC3 (0x13,
^S , XOFF) způsobí, že VT100 bude ignorovat (a přestane vysílat) všechny kódy kromě XOFF a XON. V ovladači terminálu lze povolit zpracování DC1/DC3 podobné VT100. | ESC] 0; , XOFF) způsobí, že VT100 bude ignorovat (a přestane vysílat) všechny kódy kromě XOFF a XON.. |
txt , XOFF) způsobí, že VT100 bude ignorovat (a přestane vysílat) všechny kódy kromě XOFF a XON. V ovladači terminálu lze povolit zpracování DC1/DC3 podobné VT100. | Nastavte název ikony na stejný , XOFF) způsobí, že VT100 bude ignorovat (a přestane vysílat) všechny kódy kromě XOFF a XON.. |
ESC] 2; , XOFF) způsobí, že VT100 bude ignorovat (a přestane vysílat) všechny kódy kromě XOFF a XON. V ovladači terminálu lze povolit zpracování DC1/DC3 podobné VT100. | Nastavit titulek okna na , XOFF) způsobí, že VT100 bude ignorovat (a přestane vysílat) všechny kódy kromě XOFF a XON.. |
ESC] 4; č; , XOFF) způsobí, že VT100 bude ignorovat (a přestane vysílat) všechny kódy kromě XOFF a XON. V ovladači terminálu lze povolit zpracování DC1/DC3 podobné VT100. | Nastavte barvu ANSI č rovný , XOFF) způsobí, že VT100 bude ignorovat (a přestane vysílat) všechny kódy kromě XOFF a XON.. |
ESC] 10; , XOFF) způsobí, že VT100 bude ignorovat (a přestane vysílat) všechny kódy kromě XOFF a XON. V ovladači terminálu lze povolit zpracování DC1/DC3 podobné VT100. | Nastavit barvu dynamického textu na , XOFF) způsobí, že VT100 bude ignorovat (a přestane vysílat) všechny kódy kromě XOFF a XON.. |
ESC] 46; jméno V ovladači terminálu lze povolit zpracování DC1/DC3 podobné VT100. | Změňte soubor protokolu na jméno(obvykle zakázáno |
v možnostech kompilace) |
|
ESC] 50; fn V ovladači terminálu lze povolit zpracování DC1/DC3 podobné VT100. | Nainstalujte písmo fn. |
Uznáno následující parametry s mírně změněnou hodnotou (stav je zachovalejší, chování se blíží VT100/VT220):
ESC 7 DECSC | Uložit kurzor | |
ESC 8 DECRC | Obnovit kurzor |
Také uznáno
Rozpozná také ESC % a poskytuje úplnější implementaci UTF-8 než konzole Linux.
CSI sekvence
Staré verze xterm(1), například z X11R5, vnímají blikání SGR jako tučnost SGR. Novější verze, které implementují barvy ANSI, jako je XFree86 3.1.2A z roku 1995, zobrazují atribut blikání barevně. V moderních verzích xterm je blikání SGR implementováno jako blikající text, který může být také barevný jako alternativa k zobrazení SGR. Původní verze X11R6 nerozpoznaly nastavení barev SGR až do verze X11R6.8, která obsahovala XFree86 xterm. Všechny ECMA-48 CSI CSI sekvence, kterým Linux rozumí, jsou také srozumitelné xterm, nicméně v xterm(1) Existuje několik implementovaných řídicích sekvencí ECMA-48 a DEC, kterým Linux nerozumí.
Naprogramovat xterm(1) rozpoznává všechny sekvence speciálního režimu DEC popsané výše, ale žádnou ze sekvencí speciálních režimů Linuxu. O vlastních speciálních režimech xterm(1) si můžete přečíst v dokumentu Xterm escape sekvence, napsali Edward Moy, Stephen Gildea a Thomas E. Dickey a je k dispozici v distribuci X Tento dokument, i když je zkrácen, je stále mnohem větší než tato manuálová stránka. Chronologický přehled v
popisuje změny v xterm.
Naprogramovat vttest
demonstruje mnoho z těchto kontrolních sekvencí. V původní distribuci xterm(1) obsahuje také ukázkové skripty, které vás naučí pracovat s dalšími vlastnostmi.
POZNÁMKY
Sekvence ESC 8 (DECRC) nemůže obnovit znakovou sadu změněnou o ESC %.VADY
Ve verzi 2.0.23 je sada CSI nesprávná a neefektivní hodnoty NUL nejsou v rámci escape sekvencí ignorovány.Některé starší verze jádra (po 2.0) analyzují 8bitové sekvence escape. Tyto ("řídicí kódy C1") používají kódy 128 až 159 k nahrazení ESC [, ESC ] a podobných počátečních dvoubajtových řídicích sekvencí. Částečně existují v moderní jádra(nebo nejsou rozpoznány nebo nefungují kvůli podpoře UTF-8) a nejsou plně implementovány a měly by být považovány za nespolehlivé.
Linuxové sekvence "speciálního režimu" nerespektují pravidla ECMA-48 pro speciální sekvence escape. Konkrétně končí na ] a nepoužívají standardní terminátor. OSC sekvence (nastavit paletu) --- velký problém, protože xterm(1) to považuje za únikovou sekvenci, která vyžaduje konec řádku (ST). Na rozdíl od sekvencí setterm(1), které budou ignorovány (protože se nejedná o platné escape sekvence), sekvence palety způsobí zablokování xterm(1) (ačkoli stisknutí tlačítka návratu to vyřeší). Chcete-li vyhovět aplikacím, které mají napevno zakódované sekvence escape pro Linux, nainstalujte prostředek xterm(1) nefunkční LinuxOSC rovná se pravdě.
V stará verze tohoto dokumentu Linux měl rozpoznat únikovou sekvenci ECMA-48 pro neviditelnost textu. Je ignorována.
JMÉNO
console_codes - ovládací a ESC sekvence
Linuxové konzole
POPIS
Linuxová konzole má velkou sadu nástrojů pro správu
Terminály VT102 a ECMA-48/ISO 6429/ANSI X3.64, stejně jako
nějaký počet soukromých sekvencí pro
změny v paletě barev, rozložení znaků
vytáčení atd. V tabulkách níže (ve druhé
sloupec), je uveden mnemotechnický kód ECMA-48 nebo DEC
(pokud je DEC přiřazeno k DEC) této funkce.
Sekvence bez mnemotechnického kódu nepatří
ani na ECMA-48 ani na VT102.
První proces, který se provádí po práci
obvyklý proces výstupu informací a jejich odesílání
konzolový ovladač streamu postav (pro jejich skutečný
výstup), je překlad kódů používaných v normálním
práce, do kódů používaných pro tisk.
Pokud konzola běží v režimu UTF-8, pak příchozí bajty
jsou nejprve organizovány v 16bitovém Unicode. Jinak
každý bajt se převede podle aktuální tabulky
distribuce, která převádí data do Unicode. (Podívejte
sekce ZNAKOVÉ SADA níže).
Obvykle jsou hodnoty Unicode převedeny na index písem,
který je uložen ve video paměti takovým způsobem, že
zobrazí se odpovídající glyf (nalezený ve video ROM).
na obrazovce. Všimněte si, že práce s Unicode (a aktuální
počítačový hardware) umožňuje současně
použijte pouze 512 glyfů.
Pokud je aktuální hodnota Unicode řídicí znak
nebo pokud v momentálně zpracováno
ESC sekvence, hodnota bude zpracována
zvláštním způsobem. Místo převodu hodnoty
do písma a zobrazí se jako glyf, provede se
určité akce (například pohyb kurzoru) popř
provádět jakékoli další řídící funkce.
Viz část SPRÁVA KONZOLE LINUX níže.
Je nesprávné striktně přiřazovat ovládání programům
terminál. Linux podporuje práci s databází
schopnosti terminálu. terminfo(5). Raději ne
zadejte řídicí sekvence ESC ručně, vy
pravděpodobně jej budete chtít použít pro tuto práci
informační knihovna obrazovek s ohledem na terminfo nebo jiné
nástroje jako: ncurses(3), tput(1) nebo reset(1).
SPRÁVA KONZOLE LINUX
Tato část popisuje všechny řídicí znaky a
ESC sekvence, které provádějí speciální
příkazy (tj. cokoli jiného než jednoduchý výstup
znak na aktuální pozici kurzoru) na konzole Linux.
Řídící znaky
Symbol je považován za kontrolní symbol if (před převodem
podle převodní tabulky) obsahuje jeden ze 14
kódy: 00 (NUL), 07 (BEL), 08 (BS), 09 (HT), 0a (LF), 0b
(VT), 0c (FF), 0d (CR), 0e (SO), 0f (SI), 18 (CAN), 1a
(SUB), lb (ESC), 7f (DEL). Můžete nastavit režim
„zobrazit řídicí znaky“ (viz níže), while
na obrazovce se zobrazí znaky 07, 09, 0b, 18, 1a, 7f
jako glyfy. Na druhou stranu, v režimu UTF-8 jsou všechny kódy s 00
1f jsou považovány za řídicí znaky (bez ohledu na to
z režimu `zobrazit řídicí znaky').
narazí na kontrolní znak, je to okamžitě
je indikován, ale není nijak zohledněn (dokonce i
pokud to bylo uprostřed sekvence ESC) a
řídicí sekvence pokračuje od další
symbol. Znak ESC však začíná nový ovládací prvek
sekvence pravděpodobně zruší nedokončené
předchozí sekvence a příkazy CAN a SUB jsou přesně
dokončí kontrolní sekvenci. Rozpoznatelné
řídicí znaky jsou: BEL, BS, HT, LF, VT, FF,
CR, SO, SI, CAN, SUB, ESC, DEL, CSI. Vystupují
standardní akce pro ně:
BEL(0x07, ^G) pípne;
BS(0x08, ^H) odstraní předchozí znak (posune doleva
jeden sloupec, ale ne dále než na začátek
struny);
HT(0x09, ^I) se přesune na další zarážku tabulátoru
nebo na konci řádku, pokud předtím žádný nebyl
jsou nastaveny zarážky tabulátoru;
Sada LF (0x0A, ^J), VT (0x0B, ^K) a FF (0x0C, ^L)
linkový posuv;
CR (0x0D, ^M) určuje návrat vozíku;
SO(0x0E, ^N) napájí znakovou sadu G1 a
pokud je povolen režim LF/NL (režim nové linky), pak nastaví
přeprava kočárů;
SI (0x0F, ^O) napájí znakovou sadu G0;
Přerušení CAN (0x18, ^X) a SUB (0x1A, ^Z).
sekvence ESC;
ESC (0x1B, ^[) začíná sekvenci ESC;
DEL (0x7F) je ignorováno;
CSI (0x9B) je ekvivalentní ESC [.
ESC, ale ne CSI sekvence
ESC s resetem RIS.
ESC D IND Přeskočit řádek.
ESC E NEL Nová řada.
ESC H HTS Nastavte zarážku tabulátoru v aktuálním sloupci.
ESC M RI Zpětný řádek (přeskočení zpět).
ESC Z DECID Konkrétní definice DEC. Systém
vrátí řádky ESC [ ? 6 c, nárokující VT102.
ESC 7 DECSC Uložit aktuální stav (souřadnice kurzoru,
atributy, znakové sady specifikované G0, G1).
ESC 8 DECRC Obnoví naposledy uložený stav ESC 7.
ESC [CSI Control Sequence Input
ESC % Spuštění sekvence s výběrem znakové sady
ESC % @ vybrat výchozí (ISO 646 / ISO 8859-1)
ESC % G vyberte UTF-8
ESC %8 vybrat UTF-8 (zastaralé)
ESC #8 DECALN DEC Test zarovnání obrazovky: Vyplní obrazovku znaky E.
ESC (Zahájení sekvence s výběrem znakové sady G0
ESC (B vybrat výchozí (distribuce ISO 8859-1)
ESC (0 výběr grafické distribuce vt100
ESC (U vyberte alokaci null: přímo do znakové ROM
ESC (K vybrat uživatelskou distribuci: ke stažení
obslužný program mapscrn(8).
ESC) Start sekvence s výběrem znakové sady G1
(včetně symbolů: B, 0, U, K, - jako v příkladu výše).
ESC > DECPNM Použijte další klávesnici jako numerickou klávesnici
ESC = DECPAM Použít jako ovládací prvek další klávesnici
ESC ] OSC (zkratka pro "příkazy operačního systému")
ESC ] P nrrggbb: nastavte paletu s parametry,
specifikováno v 7 hexadecimálních číslicích za posledním P:-(.
Zde n je barva 0-16 a rrggbb označuje
použijte červenou/zelenou/modrou (0-255).
ESC ] R: Resetovat paletu
ECMA-48 CSI sekvence
CSI (nebo ESC [) následované sekvencí
parametry, které jsou odděleny desetinnými čísly
středník (největší je NPAR(16)).
"Prázdný" parametr (nebo jeho nepřítomnost) je ekvivalentní
nula. Posloupnost parametrů může začít
jeden otazník. Nicméně po CSI [ (nebo ESC
[ [) čte jeden znak a zbytek
sekvence jsou ignorovány. (Význam toho je
ignorovat zobrazené funkční tlačítko).
Výsledek specifikace CSI sekvence je určen jejím
koncový znak.
@ICH Vložte N prázdných znaků.
A CUU Posuňte kurzor o N řádků nahoru.
B CUD Posuňte kurzor o N řádků dolů.
C CUF Přesune kurzor do pravých N sloupců.
D CUB Přesuňte kurzor do levého N sloupců.
E CNL Posuňte kurzor o N řádků dolů do sloupce #1.
F CPL Posuňte kurzor o N řádků nahoru do sloupce #1.
G CHA Přesuňte kurzor na určený sloupec aktuálního řádku.
H CUP Přesuňte kurzor na určený řádek a sloupec (začínejte na 1,1).
J ED "Vymazat" obrazovku (ve výchozím nastavení od kurzoru po konec obrazovky).
ESC [ 1 J: "vymazat" od začátku sloupce ke kurzoru.
ESC [ 2 J: "vymazat" celou obrazovku.
K EL "Vymazat" řádek (standardně od kurzoru po jeho konec).
ESC [ 1 K: "vymazat" od začátku řádku ke kurzoru.
ESC [ 2 K: "vyčistit" celý řádek.
L IL Vložte N prázdných řádků.
M DL Smazat N řádků.
P DCH Vymazání (s odsazením řádku) N znaků v aktuálním řádku.
X ECH "Vymazat" (bez posunu řádku) N znaků v aktuálním řádku.
a HPR Přesuňte kurzor do pravých N sloupců.
c DA Odpovědět ESC [ ? 6 c: „Jsem VT102“.
d VPA Přesuňte kurzor na určený řádek aktuálního sloupce.
e VPR Posuňte kurzor o N řádků dolů.
f HVP Přesuňte kurzor na určený řádek a sloupec.
g TBC Bez parametrů: "vymazat" aktuální zarážku tabulátoru.
ESC [ 3 g: odstranění všech zarážek tabulátoru.
h Režim instalace SM (viz níže).
l Režim RM Reset (viz níže).
m SGR Nastavte atributy (viz níže).
n Hlášení o stavu DSR (viz níže).
q DECLL Nastavte provozní režimy indikátorů na klávesnici.
ESC [ 0 q: vypnutí všech indikátorů
ESC [ 1 q: zapnout indikátor "Scroll Lock".
ESC [ 2 q: zapnout indikátor "Num Lock".
ESC [ 3 q: zapnout indikátor "Caps Lock".
r DECSTBM Nastavení oblasti rolování; parametry budou horní a dolní řádky.
s? Uložit umístění kurzoru.
u? Obnovte umístění kurzoru.
` HPA Přesuňte kurzor na určený sloupec aktuálního řádku.
ECMA-48 Nastavení grafických možností
ECMA-48 SGR sekvence řídicích znaků ESC [
m nastavuje atributy obrazovky. Nějaký
atributy lze zadat v jedné sekvenci.
Param. výsledek
0 resetuje všechny atributy na jejich výchozí hodnoty
1 instalace tučný typ
2 sady jasnější (simulovaná barva na barevném displeji)
4 sady podtržení (simulované barvou na barevném displeji);
jsou nastaveny barvy používané k simulaci ztmavení nebo zvýraznění
pomocí ESC] ...
5 zapněte blikání
7 povolit režim obráceného videa
10 resetovat vybranou distribuci, příznaky ovládání obrazovky
a přepněte příznak metadat
11 vyberte nulovou distribuci, nastavte příznak ovládání obrazovky,
resetovat přepínač metadat.
12 vyberte nulovou distribuci, nastavte příznak ovládání obrazovky,
povolit přepínač meta příznaků. Přepínání meta příznaku
určuje přepínání nejvýznamnějšího bitu v byte
před jeho transformací podle distribuční tabulky.
21 povolit režim normální intenzity (není kompatibilní s ECMA-48)
22 vypněte režim normální intenzity
24 vypnout podtržení
25 vypněte blikání
27 vypnout obrácené video
Barva 30 znaků černá
31 nastavená barva znaků červená
32 nainstalovat zelený postavy
33 sada znaků barva hnědá
Barva 34 znaků modrá
35 set lila barvy znaků
36 nastavená barva znaků modrá
37 nastavte barvu znaků na bílou
38 povolit podtržení, nastavit výchozí barvu znaků
39 vypnout podtržení, nastavit výchozí barvu znaků
40 nastavte barvu pozadí na černou
41 nastavit barvu pozadí červenou
42 nastavit barvu pozadí zelenou
43 nastavte barvu pozadí na hnědou
44 nastavit barvu pozadí modrá
45 nastavte barvu pozadí na lila
46 nastavit barvu pozadí modrá
47 nastavte barvu pozadí na bílou
49 nastavit výchozí barvu pozadí
ECMA-48 Přepínání režimů
ESC [ 3 h
DECCRM (výchozí vypnuto): Zobrazit
řídicí znaky.
ESC [ 4 h
DECIM (výchozí vypnuto): Nastavení režimu
vložení/výměny.
ESC [ 20 h
LF/NL (výchozí vypnuto): Automaticky
zobrazte kód CR za kódy: LF, VT nebo FF.
Příkazy hlášení stavu ECMA-48
ESC [ 5 n
Zpráva o stavu zařízení (DSR): Odpověď
je ESC [ 0 n (svorka je v pořádku).
ESC [ 6 n
Zpráva o poloze kurzoru (CPR): Odpověď je
ESC[y; x R, kde x,y jsou souřadnice
kurzor.
Sekvence DEC v soukromém režimu (DECSET/DECRST)
Není zahrnuto v ECMA-48. Budou uvedeny následující
sekvence instalace režimu; v pořadí
pro resetování režimů se poslední znak `h" nahradí `l".
ESC [ ? 1 h
DECCKM (výchozí vypnuto): Pokud je povoleno, pak
kurzorové klávesy vytvářejí signál začínající ESC
O, ne s ESC [.
ESC [ ? 3 h
DECCOLM (výchozí vypnuto = 80 sloupců):
režim pro přepínání počtu sloupců na 80 resp
132.V původní verze ovladač je specifikován, že jeden
tento příkaz nestačí; nějaký
uživatelské nástroje, které používají
nestandardní režimy, jako jsou resizecons(8),
musí změnit registry nastavení konzoly
grafické karty.
ESC [ ? 5 h
DECSCNM (výchozí vypnuto): Povolit
režim obráceného videa.
ESC [ ? 6 hodin
DECOM (výchozí vypnuto): Pokud je povoleno, pak
souřadnice kurzoru jsou považovány za relativní k
levý horní roh v oblasti posouvání.
ESC [ ? 7 h
DECAWM (ve výchozím nastavení povoleno): Povolit režim
automatický přenos. V tomto režimu grafický symbol
zadáno za sloupec #80 (nebo #132, pokud DEC-
COLM povolen), přesune se na začátek dalšího
linky.
ESC [ ? 8 hodin
DECARM (ve výchozím nastavení povoleno): Povolit režim
automatické opakování znaků při stisknutí klávesy
klávesnice.
ESC [ ? 9:00
Zpráva o stavu myši X10 (výchozí
myši, rovný jedné nebo nula (reset), viz níže.
ESC [ ? 25 hodin
DECCM (ve výchozím nastavení povoleno): Vytvořte kurzor
viditelné.
ESC [ ? 1000 h
X11 Zpráva o stavu myši (výchozí
off): Nastavení režimu hlášení stavu
myš rovna 2 nebo nule (reset), viz níže.
Linux Console Private CSI sekvence
Následující sekvence nejsou ani ECMA-48- ani
Sekvence VT102. Jsou "domorodci".
Ovladače konzole Linux. Barvy v parametrech SGR: 0 =
černá, 1=červená, 2=zelená, 3=hnědá, 4=
modrá, 5 = lila, 6 = světle modrá, 7 = bílá.
ESC[1; n ] Nastavte barvu n jako barvu podtržení
ESC[2; n ] Nastavte barvu n jako barvu zeslabování
ESC [ 8 ] Nastaví aktuální pár barev na výchozí atributy.
ESC[9; n ] Nastavte obrazovku tak, aby po n minutách začala „čištění“.
ESC [10; n ] Nastavte frekvenci zvukového signálu (v hertzech).
ESC[11; n ] Nastavte dobu trvání zvukového signálu v (milisekundách).
ESC[12; n ] Přesuňte určenou konzolu před ostatní.
ESC [ 13 ] Po "čištění" obnovte obrazovku.
ESC[14; n ] Nastavte interval vypnutí VESA (v minutách).
ZNAKOVÉ SOUPRAVY
Jádro má informace o 4 typech překladu bajtů
symboly konzole obrazovky. Tyto čtyři stoly jsou
transformace: a) Latin1 -> PC, b) grafika VT100 ->
PC, c) PC -> PC, d) definované uživatelem. V systému
Obecně existují dvě sady znaků nazývané G0 a G1,
a jedním z nich je aktuální systémová sada (původně
toto je G0). Zadáním ^N se sada G1 stane aktuální, ^O
nastaví G0 aktuální. Proměnné G0 a G1 udávají
tabulky symbolů a uživatel je může změnit.
Zpočátku ukazují na tabulky a) ab)
respektive. Sekvence ESC (B a ESC (0 a
ESC(U a ESC(K) způsobí, že G0 odkazuje na tabulky
překlady a), b), c) ad).
Sekvence ESC) B a ESC) 0 a ESC) U a ESC) K
způsobí, že G1 odkazuje na překladové tabulky a), b), c) a
d) podle toho. Výsledkem je sekvence ESCc
resetujte terminál, tedy na to, co kdy potřebujete
přítomnost "odpadu" na obrazovce. Doporučení uvedené za
"echo ^V^O" udělá z G0 pouze aktuální sadu, ale ne
není zaručeno, že G0 bude ukazovat na tabulku a). V
některé verze mají program reset(1), který pouze
provede pouze příkaz "echo ^".
obrázek odpovídající s je vyhledán v symbolu ROM a
lze změnit pomocí setfont(8).
POUŽITÍ MYŠI
Systém pro sledování aktivity myši zahrnuje vydávání
signály stavu myši kompatibilní s xterm. Od řidiče
konzole nerozpozná zařízení, jako je myš (nebo její
typ), pak jsou tyto signály odeslány do vstupního toku
konzole, pouze pokud je ovladač virtuálního terminálu
obdrží signál ioctl pro aktualizaci stavu myši. Tyto
ioctls signály musí generovat uživatel
Aplikace podporující myš (např
démon gpm(8). Parametr pro všechny vytvořené xterm
ESC sekvence (signály pohybu myši)
bude tam jeden znak, jehož kód je hodnota+040. Například,
`!" odpovídá jedničce. Systém souřadnic obrazovky, když
sledování myši je založeno na znaku jednotky. V
Režim kompatibility X10 při stisknutí tlačítek
Jsou odeslány sekvence ESC, ve kterých je
stav myši a informace o stisknutém tlačítku. Režim
běží, když ESC [ ? 9 h a vypne se v
vydávání ESC [? 9 l. Když stisknete tlačítko, xterm odešle
ESC [ M bxy (6 znaků), kde b je tlačítko-1 a x a y
při stisknutí tohoto tlačítka se rovná souřadnicím x a y. Tento
stejné kódy, které generují a vydávají systémové jádro. V
normální režim sledování myši (který nebyl
implementováno v Linuxu 2.0.24) ESC sekvence
odešle, když stisknete a uvolníte tlačítko myši.
Odesílají se také informace o modifikátoru. Spustí se
režimu při vydání ESC [? 1000 h a při výdeji se vypne
ESC [1000 l. Při stisknutí a uvolnění tlačítka xterm
vydává ESC [ M bxy. Spodní dva bity b obsahují informace
o tlačítkách: 0=stisknuto MB1, 1=stisknuto MB2, 2=stisknuto MB3,
3=uvolněno. Nejvýznamnější bity obsahují informace o kterých
modifikátory byly po stisknutí tlačítka vypnuty. Tento
informace se přidají po stisknutí: 4=Shift, 8=Meta,
16 = kontrola. Ještě jednou: x a y jsou souřadnice x a y
myši při zpracování události. Souřadnice vlevo nahoře
úhly jsou považovány za (1,1).
POROVNÁNÍ S OSTATNÍMI TERMINÁLY
Mnoho dalších typů terminálů je popsáno jako
Linuxové konzole (jako „kompatibilní s VT100“)
rozdíly mezi Linuxová konzole a další dva důležité
typy, DEC VT102 a xterm(1).
Manipulace s řídicími znaky
Typ vt102 také rozpoznává následující řídicí znaky:
NUL (0x00) bylo ignorováno;
Spuštěna zpráva zpětné odpovědi ENQ (0x05);
DC1 (0x11, ^Q, XON) pokračující vysílání;
DC3 (0x13, ^S, XOFF) znamená, že je potřeba vt100
ignorovat a zastavit přenos všech kódů pro
kromě XOFF a XON
Lze spustit zpracování DC1/DC3 podobné VT100
tty řidič.
Program xterm (v režimu vt100) rozpozná řízení
následující symboly: BEL, BS, HT, LF, VT, FF, CR, SO, SI,
ESC.
ESC sekvence
Sekvence konzoly VT100 nejsou implementovány v
Linuxové konzole:
ESC N SS2 Posunout o 2. (Pro další vyberte pouze znakovou sadu G2
charakter.)
ESC O SS3 Posun o 3. (Znakovou sadu G3 vyberte pouze jako další
charakter.)
ESC P DCS Ovládací řádek zařízení (končí ESC\)
ESC X SOS Začátek řádku.
ESC ^ PM Soukromá zpráva (končí ESC\)
ESC\ST Ukončení 0 řádků
ESC * ... Definice znakové sady G2
ESC + ... Definice znakové sady G3
Program xterm (v režimu vt100) rozpozná: ESC c, ESC #
8, ESC >, ESC =, ESC D, ESC E, ESCH, ESC M, ESC N, ESC O,
ESC P ... ESC ESC Z (vytváří sekvence ESC [
? 1; 2c odpověď: „Jsem vt100 s vylepšeným
video parametry") a ESC ^ ... ESC se stejnými hodnotami,
které jsou uvedeny výše. Přijato: ESC (, ESC), ESC *,
ESC +,- následované 0, A, B pro speciální znaky
Režimy DEC a kreslení čar, Spojené království a USASCII.
ESC ] jsou přijímány k nastavení provozu takových zdrojů,
Jak:
ESC] 0; txt BEL Nastavte název ikony a titulek okna v režimu txt.
ESC] 1; txt BEL Nastavení názvu ikony v režimu txt.
ESC] 2; txt BEL Nastavte titulek okna v režimu txt.
ESC] 46; name BEL Změňte soubor protokolu na název (obvykle zakázáno
možnosti kompilace)
ESC] 50; fn BEL Nastavení písma fn.
Následující parametry jsou rozpoznány s mírně upravenými
význam:
ESC F Kurzor do levého dolního rohu obrazovky (je-li povolen
zdroj hpLowerleftBugCompat)
ESC l Blokování paměti (pro terminály HP).
Zamkne paměť nad kurzorem.
ESC m Odblokuje paměť (pro terminály HP).
ESC n LS2 Zadejte znakovou sadu G2.
ESC o LS3 Zadejte znakovou sadu G3.
ESC | LS3R Zadejte znakovou sadu G3 jako GR.
ESC ) LS2R Zadejte znakovou sadu G2 jako GR.
Nemá žádný viditelný účinek v xterm.
ESC ~ LS1R Zadejte znakovou sadu G1 jako GR.
Nemá žádný viditelný účinek v xterm.
ESC % nebylo rozpoznáno...
CSI sekvence
Program xterm (podle XFree86 3.1.2G) nerozpozná
blikající nebo stealth režim SGR. Verze X11R6 nejsou
rozpoznat nastavení barev SGR. Všechny ostatní ECMA-48
CSI sekvence rozpoznávané Linuxem jsou také
jsou uznávány xtermem a naopak. Program xterm bude
rozpoznat všechny sekvence soukromého režimu DEC,
uvedené výše, ale nerozpoznají žádné z nich
sekvence soukromého režimu v Linuxu. Pro
diskuse o sekvencích soukromého režimu pro xterm
viz dokument XtermControlSequences vytvořený
Edward Moy a Stephen Gildea a doprovázeli
Distribuce X Window System.
ZJIŠTĚNY CHYBY
Ve verzi 2.0.23 je sada CSI nesprávná a
neplatné, NUL není interně ignorováno
ESC sekvence.
Operace jsou speciální kombinace symboly určující akce pro transformaci různých veličin. Kompilátor interpretuje každou z těchto kombinací jako nezávislou jednotku nazývanou token.
Tabulka 2-3 uvádí seznam operací. Operace musí být použity přesně tak, jak jsou uvedeny v tabulce, bez mezer mezi znaky v operacích, které jsou reprezentovány více znaky.
Velikost operace není v této tabulce zahrnuta. Spíše reprezentuje klíčové slovo než symbol.
Operace |
Jméno |
Logické NE |
|
Bitův doplněk |
|
Přidání |
|
Odečítání, aritmetická negace |
|
Násobení |
|
Shift doleva |
|
Shift vpravo |
|
Menší nebo rovno |
|
Větší než nebo rovno |
|
Bitové AND, adresa od |
|
Bitově včetně OR |
|
Bitově exkluzivní OR |
|
Logické AND |
|
Logické NEBO |
|
Sekvenční provádění (čárka) |
|
Operace podmíněný výraz |
|
Přírůstek |
|
Dekrementovat |
|
Jednoduché zadání |
|
Doplnění se zadáním |
|
Odečítání s přiřazením |
|
Násobení s přiřazením |
|
Divize se zadáním |
|
Zbytek se zadáním |
|
Pravá směna s přiřazením |
|
Levá směna s přiřazením |
|
Bitové AND s přiřazením |
|
Bitově včetně NEBO s přiřazením |
|
Bitové výhradní NEBO s přiřazením |
Tabulka 2‑3 Operace
Komentář: Operátor podmíněného výrazu?: je ternární operátor, nikoli dvouznakový operátor. Formát podmíněného výrazu je následující:
Konstanty
Konstanta je číslo, znak nebo řetězec znaků. Konstanty se v programu používají jako neměnné hodnoty. V jazyce C existují čtyři typy konstant: celočíselné konstanty, konstanty s plovoucí desetinnou čárkou, znakové konstanty a řetězcové literály.
Celočíselné konstanty
Celočíselná konstanta je desítkové, osmičkové nebo šestnáctkové číslo, které představuje celočíselnou hodnotu. Desetinná konstanta má následující formát:
Kde
Osmičková konstanta má následující formát:
0
Kde
Hexadecimální konstanta má jeden z následujících formátů zobrazení:
0x
0X
Kde
Hexadecimální číslice může být číslo od 0 do 9 nebo písmeno (velké nebo malé) od A do F. „Směs“ velkých a malých písmen je povolena v konstantním zastoupení. Je nutné napsat úvodní nulu následovanou x nebo X.
Mezi číslicemi celočíselné konstanty nejsou povoleny mezery. Tabulka 2-4 ukazuje příklady celočíselných konstant.
Tabulka 2‑4 Příklady konstant
Celočíselné konstanty vždy určují kladné hodnoty. Pokud jsou vyžadovány záporné hodnoty, je nutné vytvořit konstantní výraz ze znaménka mínus a konstanty, která za ním následuje. Se znaménkem mínus se zachází jako s aritmetickou operací.
Každá celočíselná konstanta je určena typem, který určuje její paměťovou reprezentaci a rozsah hodnot. Desetinné konstanty mohou být typu int nebo long.
Osmičkové a hexadecimální konstanty mohou být typu int, int bez znaménka, long nebo unsigned long, v závislosti na jejich velikosti. Pokud lze konstantu reprezentovat jako int, je určena jako typ int. Pokud je jeho hodnota větší než maximální kladná hodnota, která může být reprezentována typem int, ale menší než hodnota, která může být reprezentována stejným počtem bitů jako int, je specifikována jako unsigned int. Konečně konstantě, jejíž hodnota je větší než maximální hodnota reprezentovaná znakem int bez znaménka, je v případě potřeby přiřazen typ long nebo unsigned long. Tabulka 2-5 ukazuje rozsahy hodnot pro osmičkové a hexadecimální konstanty reprezentované odpovídajícími typy na stroji, kde typ int má délku 16 bitů.
Hexadecimální rozsahy |
Osmičkové rozsahy | |
0x8000 – 0xFFFF |
0100000 - 017777777777 | |
0x80000000 - 0xFFFFFFFF |
020000000000 - 030000000000 |
Tabulka 2‑5 Rozsahy hodnot pro osmičkové a hexadecimální konstanty
Důležitost pravidel diskutovaných výše spočívá v tom, že osmičkové a hexadecimální konstanty neobsahují "podepsané" přípony, když jsou převedeny na delší typy (převod typů viz 5 - "Výrazy a přiřazení").
Programátor může definovat pro libovolnou celočíselnou konstantu dlouhý typ, přidáním písmene "l" nebo "L" na konec konstanty. Tabulka 2-6 ukazuje příklady celočíselných konstant.
Desetinné konstanty |
Osmičkové konstanty |
Hexadecimální konstanty |
Tabulka 2‑6 Příklady dlouhých celočíselných konstant
Sekvence ESC jsou speciální kombinace znaků, které
zastupovat prázdné znaky a negrafické znaky v řetězcích a symbolech
konstanty.
Jejich typické použití spojené se specifikací úkonů jako např
návraty vozíku a tabulátory a pro určení doslovných reprezentací
znaků, jako je znak dvojitých uvozovek ("). Sekvence escape se skládá z
od znaku zpětného lomítka (\) následovaného písmenem, znaky
interpunkce "jednoduché uvozovky" (), " dvojité uvozovky" ("), "zpětné lomítko
pruh" (\) nebo kombinace čísel.
Pokud před znakem, který zde není zahrnut, je zpětné lomítko
seznamu, je zpětné lomítko ignorováno a znak je reprezentován jako
doslovný. Například obrázek "\c" představuje znak "c" v literálu
řetězcová nebo znaková konstanta.
Sekvence "\ddd" a "\xdd" umožňují zadat libovolný znak v ASCII
(Americký standardní kód informační rozhraní) jako sekvence
tři osmičkové číslice nebo dvě hexadecimální číslice. Například znak mezery
lze zadat jako \010 nebo \x08. Nula ASCII kódu může být specifikována jako \0 nebo
\x0. Osmičková sekvence ESC může používat od jedné do
tři osmičkové číslice. Například znak mezery lze zadat jako \10. Přesně
lze také použít v hexadecimální sekvenci ESC
jedna až dvě hexadecimální číslice. Takže hexadecimální posloupnost
pro znak mezery může být určen jako \x08 nebo \x8.
Je třeba poznamenat, že při použití osmičkové nebo šestnáctkové soustavy
ESC sekvence v řádcích, pak musíte úplně specifikovat všechna čísla
ESC sekvence (tři číslice pro osmičkovou a dvě číslice pro
hexadecimální sekvence ESC). Jinak, pokud je symbol přímo
následování sekvence ESC se náhodou ukáže jako osmičkové nebo
hexadecimální číslice, bude interpretována jako součást
sekvence. Například řádek \x7Be11 při tisku bude
vypadat jako ell, protože \x7B bude interpretováno jako levý složený znak
závorky (). Řetězec \x07Be11 by byl správnou reprezentací znaku zvonku
následuje slovo Bell.
Sekvence ESC umožňují odesílat negrafické řídicí znaky
Na externí zařízení. Často se používá například sekvence ESC \033
jako první znak ovládacích příkazů terminálu a tiskárny. Negrafické
znaky musí být vždy reprezentovány jako sekvence ESC, protože
přímé použití negrafických symbolů v programech C bude
mít nepředvídatelný výsledek.
Znak zpětného lomítka (\) navíc k definici sekvencí ESC
používá se také jako znak pro pokračování řádku v definicích preprocesoru.
Pokud postava " nový řádek" následuje za znakem zpětného lomítka (\),
pak je nový řádek ignorován a další řádek považován za součást
předchozí řádek.
| 2 | | | |
- Konzultace
Když je printf příliš málo a ncurses příliš mnoho
Když je dat příliš mnoho, je jich málo standardní výstup printf v konzolovém programu. Zvláště pokud je mnoho různých událostí a různá data se mění v šílený výpis. Tato data mohou pocházet z ovladače přes UART a není třeba přemýšlet o nějakém gui programu. Může také existovat běžný bash skript, ke kterému chcete připojit nějaké pseudografické rozhraní.
Hned řeknu, že to zpočátku může vypadat jako znovuobjevení kola, protože existuje vynikající knihovna ncurses. Vůbec nesnižuji jeho přednosti, ale jeho schopnosti jsou často příliš nadbytečné. Navíc je špatně přenosný do ovladačů a tam je určitě nadbytečný. Pár maker a funkcí pro práci s pseudografikou si ale můžete načrtnout sami.
Prohlášení o problému
Ti, kteří programovali ovladače, často používají konzoli jako UART nebo UART v ruštině k zobrazení informací během ladění. Dříve jsem popisoval tohoto rozhraní ve svých příspěvcích na Habré. Při dostatečně velkém množství různorodých informací je zcela nemožné je zachytit. Výsledkem je vícestránkový protokol, zejména pokud jsou k dispozici nepřetržitá data z některých analogových senzorů, navíc musíte sledovat stav portů atd. Výsledkem je, že lidé začnou psát své vlastní handlery na straně počítače a řešení se stává zcela nepřenosným a hlavně se ztrácí spousta času. Ale ve skutečnosti můžete všechny různé informace z ovladače vměstnat do jednoho okna terminálu a používat je pohodlně, bez psaní software třetích stran. Výsledkem je, že se naše řešení stává přenosným (je potřeba jakýkoli terminál) a ušetří se mnoho hodin programátorů na ladění.Metodologický příklad
Tento příklad bude spíše edukativní, metodický, ale můžete si ho snadno přizpůsobit svému skutečné zařízení na libovolném ovladači. Analogicky to vše bude fungovat v bash, pyton atd.Předpokládejme, že máme ovladač, kde jsou kontaktní senzory připojeny k 8bitovému portu, který může přijímat stavy ON a OFF, existuje analogový tříosý senzor a musíme zobrazit jejich stav, plus regulátor má čas, datum a my chcete ovládat správné zobrazení času; a konečně může nastat událost (například výpadek proudu), kdy musíme urychleně informovat operátora. Pojďme si to shrnout:
- Stav 8 pinů portu (zapnuto/vypnuto)
- Tříosý snímač (x, y, z) - samostatný výstup pro každou osu
- Datum a čas
- Chybová zpráva operátorovi
Ty rámečky jsem hloupě zkopíroval z mc. Ti, kteří chtějí krásu, se mohou podívat na to, jaké rámečky jsou v unicode. Čísla nahoře jsou napsána speciálně pro souřadnice.
Zdá se, že myšlenka je jasná, ale jak to implementovat v terminálu? Tady začíná to pravé kouzlo! " A teď musíte rozhodně fouknout! Pokud nefouknete, žádný zázrak se nestane!"Hmayak Hakobyan."
Únikové sekvence
Původně jsem měl v plánu v této kapitole prezentovat přednášku o terminálovém řízení pomocí ESC sekvencí. Ale pak by se článek prostě rozrostl do neslušných rozměrů, takže uvedu jen některé pojmy a zbytek najdete na internetu nebo v manuálech.Terminál je vstupní/výstupní zařízení, které umožňuje zadávat a zobrazovat data. Dříve byl terminálem monitor a klávesnice připojené přes COM port k počítači, ale v novější době dřívější verze dokonce i dálnopis.
Teletype Model 33 (obrázek z Wikipedie)
Terminál je dnes program, který může být virtuálním terminálem jako v Linuxu nebo terminálem, který pracuje s COM portem. Všechny tyto terminály, dokonce i klasický HyperTerminal, splňují určité standardy. Jak asi tušíte, takové terminály je potřeba spravovat. Existují pravidelné ASCII znaky, které se zobrazují na obrazovce, a existují speciální sekvence znaků, které umožňují nastavit souřadnice kurzoru, vymazat obrazovku, nastavit barvu atd. Ve svých článcích o Habré a Giktimes jsem se již opakovaně dotkl tématu ESC sekvencí. Použili jsme je v ovládání displeje (popis ve spoileru, který nikdo nečetl) a v článku o, který je také řízen ESC sekvencemi.
Pokud se někdo z vás vrátil do dob BBS, pak si pamatujete, jak „krásné“ byly tyto desky: barevné, které měly určitá pole pro vstup/výstup informací atd. Všechna tato radost byla zobrazena pomocí takových ovládacích symbolů. Znak je považován za řídicí znak, pokud (před převodem podle převodní tabulky) obsahuje jeden ze 14 kódů: 00 (NUL), 0x07 (BEL), 0x08 (BS), 0x09 (HT), 0x0a (LF), 0x0b (VT), 0x0c (FF), 0x0d (CR), 0x0e (SO), 0x0f (SI), 0x18 (CAN), 0x1a (SUB), 0x1b (ESC), 0x7f (DEL). Nás zajímá především symbol ESC=0x1b, "\033" nebo "\e". Více o těchto sekvencích si můžete přečíst v manuálech man console_codes nebo na internetu v ruštině.
Kromě ovládání kurzoru můžete terminál také obarvit různé barvy(pokud je samozřejmě barevný). Barvy svého terminálu můžete zkontrolovat pomocí jednoduchého skriptu BASH:
Pro fgbg v 38 48 ; do #Foreground/Background for color in (0..256) ; do #Colors #Zobrazte barevnou ozvěnu -en "\e[$(fgbg);5;$(color)m $(color)\t\e ; pak echo #Nový řádek fi hotovo echo #Nový řádek hotový exit 0
Výsledek provedení bude něco takového:
Můžete si přečíst podrobněji o barvách a písmech v konzole (a jakýchkoli terminálech) s příklady.
Teď už to vlastníš potřebné informace dělat zábavné velikonoční vajíčka ve skriptech BASH, jako je obrázek v názvu příspěvku.
Jak jsem si takové velikonoční vajíčko v bash vyrobil, si můžete podrobněji přečíst v mém LiveJournalu.
Vše naformátujeme v si
Tento příklad uvádím na svých mistrovských kurzech programování a uvedu ho zde. Udělejme makra pro nastavení atributů textu, vyčištění obrazovky, přesun kurzoru na horní roh a přesunutí kurzoru na danou pozici:#define home() printf(ESC ")