Pro reinicializaci terminálu stačí jednoduchý reset
opraví to. Další informace a možnosti naleznete man reset
Zdá se, že odpověď @James Henstridge na tuto otázku AskUbuntu identifikuje chybu správně, protože terminál uvízl v režimu "adresování kurzoru", ať už to znamená cokoli.
Jeho první řešení, příkaz $ tput rmcup
, funguje, i když tam není mnoho ve způsobu vysvětlení. Tak jsem se to pokusil zjistit.
man tput
říká nám to
tput
obslužný program používáterminfo
databáze pro zpřístupnění hodnot schopností a informací závislých na terminálu pro shell (viz sh(1)), pro inicializaci nebo resetování terminálu nebo vrácení dlouhého názvu požadovaného typu terminálu.
terminfo
také není příliš užitečně zdokumentován. Nejobsáhlejší zdroj, který jsem našel, je článek na tldp.org. Evidentně terminfo
je databáze různých terminálů a jejich příkazů a schopností. Pravděpodobně každá instalace Linuxu má jeden? Takže můžete použít různé terminály?
man terminfo
označuje, že jeho soubory jsou v /etc/terminfo/*/*
, ale na Ubuntu 16.04 jsem tam našel pouze README. Skutečné soubory jsou v /lib/terminfo/*/*
; např. /lib/terminfo/l/linux
, což je pravděpodobně nejrelevantnější soubor pro většinu čtenářů? Nemohu říci, protože tyto soubory nejsou čitelné pro člověka. Výše odkazovaný článek na tldp.org uvádí, že infocmp
lze použít k zobrazení jejich zdroje, ale to není pravda:
$ infocmp /lib/terminfo/l/linux
infocmp: couldn't open terminfo file /lib/terminfo/l/linux.
Článek také zmiňuje soubory zdrojového kódu /etc/termcap
a /etc/terminfo.src
, ale tyto neexistují v Ubuntu 16.04. Našel jsem sadu /usr/share/vte/termcap*/
adresáře, které obsahují lidsky čitelný xterm
soubory. Musel bych hádat, že se to všechno připojuje k terminálu GNOME, který používám a který je výchozí pro Ubuntu, ale už mě nebaví zjišťovat jak.
man
stránka pro terminfo
má však ještě jednu užitečnou poznámku. Pod jeho 'Předdefinovanými schopnostmi' je 'Variable String' exit_ca_mode
s 'capname' („název schopnosti“, předpokládám) rmcup
s popisem strings to end programs using cup
. Popis není příliš užitečný, ale název proměnné ano; to se musí týkat schopnosti terminálu ukončit „režim adresování kurzoru“, ve kterém je terminál zaseknutý.
Takže $ tput rmcup
musí používat tput
pro přístup k terminfo
databázi a aktivujte exit_ca_mode
aktuálního terminálu schopnost rmcup
, který ukončí režim adresování kurzoru a vrátí terminál do normálního rolovacího chování.