GNU/Linux >> Znalost Linux >  >> Linux

Bash Clear Command Divné chování Smaže Scrollback Buffer.?

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 a XT jsou rozšířené funkce (jako E3 ), 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.

Související:Vynutit prázdnou obrazovku a ignorovat vstup?

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

Linux
  1. Jak vymazat historii příkazového řádku BASH v Linuxu

  2. 5 použití příkazu mv v linuxovém terminálu

  3. Jak vyčistit terminál v Ubuntu

  1. Jak vymazat konkrétní příkaz z historie Bash v Linuxu

  2. Jak vymazat scrollback v příkazu na obrazovce?

  3. příkaz pro export bash

  1. | V příkazu terminálu?

  2. Spusťte příkaz bash na jenkins pipeline

  3. Zvětšete velikost vyrovnávací paměti rolovacího terminálu linuxového terminálu