ANSI řídící sekvence

Standard ANSI X3.64-1979 definuje tzv. escape sekvence (sekvence znaků začínající znakem escape). Tyto sekvence slouží k nastavování vlastností terminálu jakými jsou barvy textu a pozadí, nebo pozice kurzoru. Bez problémů by měli fungovat ve všech konzolích v Linuxu a MacOS a také v DOSu po nahrání ANSI.SYS. Bohužel cmd.exe z nových vydání operačního systému Windows tuto funkčnost nemá (jedinou možností je použít Windows API, které pokrývá některé funkce).

Escape sekvence jsou velmi dobrou lehkou alternativou ke knihovnám slang nebo ncurses, pokud nepotřebujete rozšířenou práci s klávesnicí a pouze potřebujete jednoduché TUI rozhraní.

Použití escape sekvencí je velice jednoduché. Prostě je vypíšeme s textem a terminál místo vypsání tuto sekvenci interpretuje a provede příslušnou akci.

Atributy textu

Celkem očekávaně je možné nastavovat barvu popředí a pozadí, nicméně můžeme nastavovat i klasické atributy textu. Bohužel prezentovaný výsledek se obvykle docela liší od očekávání (například bold je obvykle prezentován pouze světlejším odstínem).

Podporované barvy jsou: Černá (0), Červená (1), Zelená (2), Žlutá (3), Modrá (4), Fialová (5), Azurová (6) a Bílá (7). Číslo 9 reprezentuje defaultní barvu.

Pokud se barva používá jako barva popředí, přičte se k ní 30, pokud jako barva pozadí, přičte se k ní 40.

Možné atributy textu jsou: Světlý (1), Tmavý (2), Podtržený (4), Blikající (5), Inverzní (7) a Skrytý (8).

Escape sekvence pro atributy textu má 1-3 parametry, které můžou být díky jednoznačnému číslování (1-8 atributy, 30-37 barvy popředí, 40-47 barvy pozadí) v různém pořadí.

Veškerý text za \033[x;x;xm bude vypsán s uvedenými parametry. Do normálního režimu se pak dostaneme pomocí \033[0m.

Na přepínaní do normálního režimu nezapomínejte, atributy textu totiž přetrvávájí dokud nejsou zrušeny.

Mazání textu

\033[2J
vymazání obrazovky
\033[1J
vymazání obrazovky od kurzoru nahorů
\033[J
vymazání obrazovky od kurzoru dolů
\033[2K
vymazání řádku
\033[1K
vymazání řádku po kurzor
\033[K
vymazání řádku od kurzoru

Práce s kurzorem

U všech uvedených kódu je možné vynechat počet. Pak se bude kód chovat stejně jako když bychom uvedli počet 1.

\033[y;xH
přesunutí kurzoru do sloupce x a řádku y
\033[H
přesune kurzor do levého horního rohu
\033[xA
přesunutí kurzoru o x řádků nahorů
\033[xB
přesunutí kurzoru o x řádků dolů
\033[xD
přesunutí kurzoru o x sloupců vlevo
\033[xC
přesunutí kurzoru o x sloupců vpravo
\033[s
uložení pozice kurzoru
\033[u
obnovení pozice kurzoru
\0337
uložení pozice kurzoru a atributů textu
\0338
obnovení pozice kurzoru a atributů textu

Použití v programech

Jak už bylo zmíněno na počátku, použití je velice jednoduché. Stačí vybranou escape sekvenci vypsat pomocí printf (nebo ekvivalentního příkazu) a o ostatní by se již měl postarat terminál.

Pokud ale budete programovat aplikaci, která bude tímto způsobem obohacovat výstup, nezapomeňte přidat přepínač, kterým toto chování půjde vypnout. Při uložení výstupu například do souboru se logicky žádná interpretace nekoná a text je uložen i s escape sekvencemi.

Knihovna

Aby jste měli práci jednodušší, připravil jsem malou knihovnu pro jazyk C.

Pro C++ si můžete stáhnout implementaci používající stream manipulátory.

PřílohaVelikost
ColorTerminal.zip3.2 KB
Váš hlas: Žádná Průměr: 4.3 (7 votes)