Immer wenn ich in meinem Terminal lösche, löscht es den Scrollback-Puffer vom oberen Rand des Bildschirms bis zur aktuellen Zeile. Ich habe es in xterm, st und urxvt versucht, und das Problem bleibt bestehen. Gibt es eine Möglichkeit, das Verhalten von clear so zu ändern, dass es den Scrollback-Puffer nicht berührt?
Akzeptierte Antwort:
Der Kommentar „vom oberen Bildschirmrand bis zur aktuellen Zeile“ ist mehrdeutig. Wenn Sie vom oberen Rand des sichtbaren Teils meinten des Bildschirms, das ist nicht der Scrollback . Der Scrollback eines Terminals ist der Teil, den Sie nur sehen können, wenn Sie die Scrollbar (oder geeignete Tasten wie Shift Pageup) verwenden.
XTerm Control Sequences dokumentiert die entsprechende Escape-Sequenz:
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).
Die Terminalbeschreibungsfähigkeit clear
verwendet das vorletzte, z. B.
clear=E[HE[2J
um den Cursor nach oben links zu positionieren und dann den gesamten (sichtbaren) Bildschirm zu löschen. Sie könnten Verwenden Sie die Option Unten löschen , aber das wird nicht in der Terminalbeschreibung verwendet.
Bezieht sich auf das Löschen des Scrollback :Das ist ein Terminal-spezifisches Feature, ursprünglich eine Escape-Sequenz in xterm (1999, dokumentiert in ctlseqs.ms, aber nicht in Änderungen erwähnt) und später (2011) als Erweiterung für die Linux-Konsole und die entsprechende Terminal-Beschreibung implementiert. Die Terminal-Datenbank listet sie als „Verschiedene Erweiterung“ auf.
Derzeit haben diese Terminalbeschreibungen die Funktion:
- linux3.0 (der aktuelle Standard für „linux“)
- Kitt
- xterm+basic (ein Baustein, der in den meisten „xterm“-Varianten verwendet wird)
Ob es in Xterm-Doppelgängern wie VTE unterstützt wird, müsste durch Testen beantwortet werden (es gibt keine nützliche Dokumentation für VTE oder Konsole).
Wenn Sie die Erweiterung lieber nicht verwenden möchten, können Sie E3
entfernen Fähigkeit aus der Terminalbeschreibung, die Sie verwenden, z. B.
infocmp -1x >foo
edit foo, removing the line with "E3="
tic -x foo
Ich habe vorgeschlagen, die Optionen -1
zu verwenden und -x
um die Formatierung zu vereinfachen und die zu ändernde Funktion anzuzeigen. Das Beispiel in https://ghostbin.com/paste/kfsbj stimmt mit diesem Rat überein:
- der Pfadname
/home/flowerpick/.terminfo/x/xterm
würde von ncurses verwendet werden - die Fähigkeiten
AX
undXT
sind erweiterte Fähigkeiten (wieE3
), dargestellt mit dem-x
Möglichkeit.
Wenn Sie mehr als einen Terminaltyp verwenden, müssen Sie dies für jeden (Wert von $TERM
) tun ), und die Änderung gilt nur für den Computer, auf dem Sie clear
ausführen . Die ersten paar Zeilen von infocmp
Ausgabe zeigen, an welcher Sie gerade arbeiten:
# Reconstructed via infocmp from file: /home/flowerpick/.terminfo/x/xterm
xterm|xterm terminal emulator (X Window System),
Zum Beispiel uxrvt
setzt $TERM
zu so etwas wie rxvt-unicode
, was Zeilen wie diese in infocmp
erzeugt :
# Reconstructed via infocmp from file: /lib/terminfo/r/rxvt-unicode
rxvt-unicode|rxvt-unicode terminal (X Window System),
Die st
Programm verwendet xterm
(oder möglicherweise xterm-256color
), obwohl es schon eine Weile her ist, dass ich eine Kopie davon das gesehen habe was gut genug funktioniert hat, um es zu kommentieren.
Übrigens könnten Sie einen Alias für clear
haben die die angegebene Escape-Sequenz sendet (ignoriert die Terminalbeschreibung), aber ich habe dies von niemandem gemeldet gesehen.
Wenn Sie „oben löschen“ wollten, ist das nicht so einfach wie die Eingabe von „löschen“. Der Escape-