Dieses Verhalten ist auf die Funktion "Alternativer Bildschirm" zurückzuführen, die in einigen (Hardware-) Terminals und den meisten (Software-) Terminalemulatoren enthalten ist. Was passiert, ist, dass einige Terminal-fähige Programme auf den alternativen 'Bildschirm' wechseln, um ihre Arbeit zu erledigen und zum normalen 'Bildschirm' zurückzukehren, wenn sie entlassen werden (beenden, suspendieren usw.). Dadurch wird die endgültige Ausgabe solcher Programme effektiv gelöscht.
Eine Websuche nach "terminfo prevent altscreen" lieferte eine Seite, auf der das alternative Bildschirmproblem und verschiedene Lösungen erläutert wurden .
Wie auf der verlinkten Seite beschrieben, können einige Programme so konfiguriert werden, dass der alternative Bildschirm nicht verwendet wird. Die -X
Option für weniger ist ein indirekter Weg, dies zu tun. Vim kann auf ähnliche Weise konfiguriert werden, indem die Variablen t_ti
und t_te
deaktiviert werden.
Eine weiter gefasste Lösung besteht darin, den Terminfo- Eintrag für Ihr Terminal so zu bearbeiten , dass er keine alternativen Bildschirmsteuerungssequenzen enthält. Die terminfo-Einträge bilden eine Datenbank, die Programmen mitteilt, welche Steuersequenzen an ein Terminal gesendet werden müssen, um bestimmte Effekte zu erzielen (Bewegen des Cursors, Löschen des Bildschirms, Löschen eines Teils der aktuellen Zeile usw.). Indem Sie den Terminfo-Eintrag bearbeiten, den Ihr Terminal verwendet, können Sie festlegen, dass alle terminfo-verwendenden Programme nicht darüber informiert werden, dass die Kontrollsequenzen für den alternativen Bildschirm sogar vorhanden sind.
Aus der Liste der Steuersequenzen für xterm können wir ersehen , dass die Steuersequenzen von Interesse sind (für xterm- ähnliche Terminalemulatoren)
- Alternative Anzeige aktivieren:
ESC [ ? 47 h
(ebenfalls für 1047 und 1049) und
- normalen Bildschirm wiederherstellen:
ESC [ ? 47 l
(ebenfalls für 1047 und 1049).
Diese Codes sind höchstwahrscheinlich in den terminfo-Variablen smcup
und enthalten rmcup
. Ein schneller und unsauberer Weg, um diese Variablen für Ihr aktuelles TERM herauszufinden, könnte so aussehen:
infocmp | sed -e 's/[sr]mcup=[^,]*,//' > /tmp/noaltscreen-terminfo
tic -o ~/.terminfo/ /tmp/noaltscreen-terminfo
Diese Methode ist ziemlich grob und wird sicherlich nicht für alle Terminals funktionieren, aber sie wird wahrscheinlich für die meisten xterm- ähnlichen Terminalemulatoren funktionieren . Im Idealfall sollten Sie die Werte in smcup
und rmcup
Variablen des Eintrags terminfo für Ihr Terminal untersuchen und konservativ bearbeiten, um unerwünschtes Verhalten zu vermeiden. Die oben verlinkte Diskussions- / Lösungsseite enthält eine „vorgekochte“ Terminfo-Datei, die Sie möglicherweise verwenden, anstatt Ihre eigene zu hacken (aber was macht das für einen Spaß?).