Kdykoli v terminálu spustím vymazání, vymaže se vyrovnávací paměť pro posuv z horní části obrazovky na aktuální řádek. Zkoušel jsem to v xterm, st a urxvt a problém přetrvává. Existuje nějaký způsob, jak mohu změnit chování clear tak, aby se nedotýkalo scrollback bufferu?
Přijatá odpověď:
Komentář „od horní části obrazovky k aktuálnímu řádku“ je nejednoznačný. Pokud jste mysleli z horní části viditelné části obrazovky, to není rolování . Scrollback terminálu je část, kterou můžete vidět pouze pomocí posuvníku (nebo vhodných kláves, jako je shift pageup).
XTerm Control Sequences dokumentuje relevantní escape sekvenci:
CSI Ps J Erase in Display (ED).
Ps = 0 -> Erase Below (default).
Ps = 1 -> Erase Above.
Ps = 2 -> Erase All.
Ps = 3 -> Erase Saved Lines (xterm).
Schopnost popisu terminálu clear
používá předposlední, např.,
clear=E[HE[2J
umístěte kurzor do levého horního rohu a poté vymažte celou (viditelnou) obrazovku. Mohli byste použijte Vymazat níže , ale to není použito v popisu terminálu.
S odkazem na vymazání scrollback :Toto je funkce specifická pro terminál, původně escape sekvence v xterm (1999, zdokumentovaná v ctlseqs.ms, ale nezmiňovaná ve změnách) a později (2011) implementovaná jako rozšíření pro konzoli Linux a odpovídající popis terminálu. Terminálová databáze jej uvádí jako „různé rozšíření“.
V současné době mají tyto popisy terminálů funkci:
- linux3.0 (aktuální výchozí nastavení pro „linux“)
- tmel
- xterm+basic (stavební blok používaný ve většině variant „xterm“)
Zda je podporována v xterm look-alikes, jako je VTE, by muselo být zodpovězeno testováním (pro VTE nebo Konsole neexistuje žádná užitečná dokumentace).
Pokud nechcete rozšíření používat, můžete odstranit E3
z popisu terminálu, který používáte, např.
infocmp -1x >foo
edit foo, removing the line with "E3="
tic -x foo
Navrhl jsem použít možnosti -1
a -x
pro zjednodušení formátování a zobrazení funkce ke změně. Příklad uvedený na https://ghostbin.com/paste/kfsbj je v souladu s touto radou:
- název cesty
/home/flowerpick/.terminfo/x/xterm
by byl používán ncurses - možnosti
AX
aXT
jsou rozšířené funkce (jakoE3
), zobrazený s-x
možnost.
Pokud používáte více než jeden typ terminálu, musíte to udělat pro každý (hodnota $TERM
) a změna se týká pouze počítače, kde spustíte clear
. Prvních pár řádků infocmp
výstup ukaž, na kterém z nich pracuješ:
# Reconstructed via infocmp from file: /home/flowerpick/.terminfo/x/xterm
xterm|xterm terminal emulator (X Window System),
Například uxrvt
nastaví $TERM
na něco jako rxvt-unicode
, vytvářející řádky jako je tento v infocmp
:
# Reconstructed via infocmp from file: /lib/terminfo/r/rxvt-unicode
rxvt-unicode|rxvt-unicode terminal (X Window System),
st
program používá xterm
(nebo možná xterm-256color
), i když už je to nějaký čas, co jsem viděl kopii toho což fungovalo dostatečně dobře na to, aby se k tomu dalo vyjádřit.
Mimochodem, mohli mít alias pro clear
který odesílá danou escape sekvenci (ignoruje popis terminálu), ale neviděl jsem to od nikoho hlášeného.
Pokud jste chtěli „vymazat výše“, není to tak jednoduché jako zadání „vymazat“. Escape