Ogni volta che eseguo in modo chiaro nel mio terminale, elimina il buffer di scorrimento dalla parte superiore dello schermo alla riga corrente. L'ho provato in xterm, st e urxvt e il problema rimane. C'è un modo per modificare il comportamento di clear in modo che non tocchi il buffer di scorrimento?
Risposta accettata:
Il commento "dalla parte superiore dello schermo alla riga corrente" è ambiguo. Se intendevi dall'alto della parte visibile dello schermo, che non è lo scorrimento . Lo scrollback di un terminale è la parte che puoi vedere solo utilizzando la barra di scorrimento (o tasti adatti come shift pageup).
XTerm Control Sequences documenta la sequenza di escape pertinente:
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).
La capacità di descrizione del terminale clear
usa il penultimo, ad es.
clear=E[HE[2J
per posizionare il cursore in alto a sinistra e quindi cancellare l'intero schermo (visibile). Potresti usa Cancella sotto , ma non viene utilizzato nella descrizione del terminale.
Facendo riferimento alla cancellazione dello scorrimento :Questa è una funzionalità specifica del terminale, originariamente una sequenza di escape in xterm (1999, documentata in ctlseqs.ms ma non menzionata nelle modifiche) e successivamente (2011) implementata come estensione per la console Linux e la descrizione del terminale corrispondente. Il database del terminale lo elenca come "interno vario".
Attualmente, queste descrizioni dei terminali hanno la caratteristica:
- linux3.0 (l'attuale impostazione predefinita per "linux")
- stucco
- xterm+basic (un elemento costitutivo utilizzato nella maggior parte delle varianti di "xterm")
Se è supportato in sosia di xterm come VTE dovrebbe essere risolta mediante test (non esiste documentazione utile per VTE o Konsole).
Se preferisci non utilizzare l'estensione, puoi rimuovere E3
capacità dalla descrizione del terminale che utilizzi, ad es.
infocmp -1x >foo
edit foo, removing the line with "E3="
tic -x foo
Ho suggerito di utilizzare le opzioni -1
e -x
per semplificare la formattazione e per mostrare la funzione da modificare. L'esempio fornito in https://ghostbin.com/paste/kfsbj è coerente con questo consiglio:
- il percorso
/home/flowerpick/.terminfo/x/xterm
verrebbe usato da ncurses - le capacità
AX
eXT
sono funzionalità estese (comeE3
), mostrato con il-x
opzione.
Se stai usando più di un tipo di terminale, dovresti farlo per ciascuno (valore di $TERM
), e la modifica si applica solo alla macchina su cui esegui clear
. Le prime due righe di infocmp
output mostra su quale stai lavorando:
# Reconstructed via infocmp from file: /home/flowerpick/.terminfo/x/xterm
xterm|xterm terminal emulator (X Window System),
Ad esempio, uxrvt
imposta $TERM
a qualcosa come rxvt-unicode
, producendo righe come questa in infocmp
:
# Reconstructed via infocmp from file: /lib/terminfo/r/rxvt-unicode
rxvt-unicode|rxvt-unicode terminal (X Window System),
Il st
il programma usa xterm
(o possibilmente xterm-256color
), anche se è passato del tempo da quando ho visto una copia di quello che ha funzionato abbastanza bene per commentare.
A proposito, potresti avere un alias per clear
che sta inviando la sequenza di escape data (ignorando la descrizione del terminale), ma non l'ho visto segnalato da nessuno.
Se si desidera "cancellare sopra", non è così semplice come digitare "cancella". L'escape