Questo comportamento deriva dalla funzione di "schermo alternativo" inclusa in alcuni terminali (hardware) e nella maggior parte degli emulatori (software) di terminali. Quello che succede è che alcuni programmi compatibili con il terminale passano allo "schermo" alternativo per fare il loro lavoro e tornare allo "schermo" normale quando vengono chiusi (esci, sospeso, ecc.). Ciò cancella efficacemente l'output finale di tali programmi.
Una ricerca web per "terminfo prevent altscreen" ha fornito una pagina che discute il "problema" dello schermo alternativo e diverse soluzioni .
Come descritto nella pagina collegata, alcuni programmi possono essere configurati per evitare l'uso della schermata alternativa. L' -X
opzione per less è un modo indiretto per farlo. Vim può essere configurato in modo simile disabilitando le variabili t_ti
e t_te
.
Una soluzione con un ambito più ampio è quella di modificare la voce terminfo per il proprio terminale in modo che non includa le sequenze di controllo dello schermo alternative. Le voci terminfo formano un database che indica ai programmi che controllano le sequenze da inviare a un terminale per creare determinati effetti (spostare il cursore, cancellare lo schermo, cancellare parte della linea corrente, ecc.). Modificando la voce terminfo utilizzata dal terminale, è possibile disporre di "trascurare di dire" a tutti i programmi che utilizzano terminfo che esistono anche le sequenze di controllo "schermo alternativo".
Dalla lista delle sequenze di controllo per xterm , possiamo vedere che le sequenze di controllo di interesse (per xterm -come emulatori) sono
- abilita schermo alternativo:
ESC [ ? 47 h
(allo stesso modo per 1047 e 1049) e
- ripristina schermo normale:
ESC [ ? 47 l
(allo stesso modo per 1047 e 1049).
Questi codici sono probabilmente presenti nelle variabili terminfo smcup
e rmcup
. Un modo rapido e sporco per eliminare queste variabili per il tuo attuale TERM potrebbe apparire così:
infocmp | sed -e 's/[sr]mcup=[^,]*,//' > /tmp/noaltscreen-terminfo
tic -o ~/.terminfo/ /tmp/noaltscreen-terminfo
Questo metodo è piuttosto rozzo e certamente non funzionerà per tutti i terminali, ma probabilmente funzionerà per la maggior parte degli emulatori di terminali simili a xterm . Idealmente, è necessario esaminare i valori nelle variabili smcup
e rmcup
della voce terminfo per il proprio terminale e modificarli in modo conservativo per evitare comportamenti indesiderati. La pagina di discussione / soluzione sopra collegata ha un file terminfo “precotto” che potresti usare invece di hackerare il tuo (ma qual è il divertimento in questo?).