GNU/Linux >> Znalost Linux >  >> Linux

Pohyb kurzoru v terminálech?

Snažím se zamotat si hlavu nad tím, jak mušle pohybují kurzorem na obrazovce (Posouváním zadávejte klávesy se šipkami a podobně).

Hodně jsem testoval a nenašel jsem žádné systémové volání, které by umožňovalo pohyb kurzoru na obrazovce v terminálu. Dělá se to pomocí konkrétních rozšíření terminálu? Pokud ano, existuje nějaká dokumentace, jak toho dosáhnout, řekněme, xterm?

To mě přivádí k šílenství, ocením každé světlo, které na to můžete vrhnout.

Přijatá odpověď:

Žádné takové systémové volání nebo sada systémových volání neexistuje. Vše se děje podle konvence.

Za starých časů, kdy „terminál“ byl velký neohrabaný kus zařízení propojeného s počítačem pomocí kabelu, „chytré terminály“ dělaly věci, jako je pohyb kurzoru nebo kreslení čáry nebo vyplňování mnohoúhelníku barvami. . Chytrý terminál to obvykle dělal prostřednictvím „únikových sekvencí“. Program vydal speciální sekvenci hodnot bajtů, obvykle začínající ASCII 0x1b, ‚ESC‘, aby přesunul kurzor nebo vybarvil slovo nebo nějakou speciální věc jinou než napodobování dálnopisu.

To je "konvence". V dnešní době je „terminál“ téměř vždy jen jedním oknem z mnoha na bitmapové obrazovce, xterm, rxvt, atd. atd. Je na xterm (nebo rxvt nebo cokoli jiného), aby načetl bajty přicházející z „programu“, který v něm běží, a interpretovat tyto bajty podle dané konvence. Právě jsem to napsal do jednoho z mých xterm oken:

6 % echo $TERM 
xterm

Ale vím, že staré, staré xtermy v takovém případě říkaly „vt100“. Každý program, který „pohne kurzorem“, musí vygenerovat escape sekvence pro konvenci „xterm“ pro přesun kurzoru v instanci xterm.

Mohli byste dělat man curses a man terminfo pro více informací.

PS

Lidé vytvořili celé okenní systémy s únikovými sekvencemi. Viz MGR jako příklad.


Linux
  1. Proč se držím xtermu

  2. Příkazy pro editor VI

  3. „xterm“ nebo „xterm“ v konfiguračním souboru?

  1. Jaký protokol/standard používají terminály?

  2. Vim pohyb na jiných programech

  3. alt-d alt-f atd. přestane fungovat v mém xtermu

  1. Proč se nové terminály v Awesome vytvářejí s Shlvl>1?

  2. Jak zkopíruji text ze svého xtermu bez myši?

  3. Změňte velikost písma terminálu pomocí C++