OS X-Terminalleitungen werden nicht zurückgescrollt

12

Ich habe ein Problem, das bei Verwendung des Mac OS X-Terminals auftritt (TERM = xterm): Manchmal gerät es in einen Zustand, in dem Zeilen, die von oben scrollen, nicht zum Scrollback-Puffer hinzugefügt werden. Ich benutze nicht screenoder ähnlich; Dies ist eine einfache Bash-Shell innerhalb einer Terminal-Registerkarte.

Dies geschieht nicht sofort nach dem Öffnen eines neuen Tabs. Ich glaube, es ist ein Nebeneffekt von etwas, das ich auf der Registerkarte "Problem" ausgeführt habe. Ich vermute, dass es etwas mit der xterm-Emulation zu tun hat, möglicherweise mit der Bildlaufregion.

Was hat nicht funktioniert:

  • Soft- und Hard-Reset über das Shell-Menü
  • Laufen resetin der Registerkarte

Gibt es eine zuverlässige Möglichkeit, das Terminal und / oder den xterm-Status zurückzusetzen?

Kann jemand eine Erklärung dafür geben, was passiert, auch wenn die einzige Lösung darin besteht, die Registerkarte zu schließen und eine neue zu öffnen?

Steve Madsen
quelle
Welche Mac OS X-Version verwenden Sie? Haben Sie den Puffer auf weniger als "unbegrenzt" und die fehlenden Zeilen sind einfach die ältesten Zeilen, die am hinteren Ende des Puffers herausgefallen sind?
Spiff
Mac OS X 10.6.2, und der Puffer beträgt 10.000 Zeilen. Die verlorenen Zeilen sind jedoch diejenigen, die direkt vom Bildschirm scrollen. Wenn ich einen Bildschirm aufblättere, sind diese Zeilen nicht vorhanden. Wenn Zeilen von oben gescrollt werden, ändert sich die letzte Seite des Scrollbacks nie.
Steve Madsen

Antworten:

19

Dies bedeutet, dass das Terminal den alternativen Bildschirmpuffer verwendet. Es gibt einen Hauptbildschirm, der in das Scrollback-Protokoll blättert, und einen alternativen Bildschirm, der dies nicht tut. "Vollbild" - oder "bildschirmorientierte" Programme wie top, less, emacs, vim und screen schalten das Terminal standardmäßig auf den alternativen Bildschirm um.

Jeder Bildschirm hat seinen eigenen Inhalt und Status. Mit einem alternativen Bildschirm können Programme die gesamte Anzeige übernehmen und beim Beenden den vorherigen Inhalt wiederherstellen, indem sie zum Hauptbildschirm zurückkehren.

Ab Mac OS X Lion 10.7 verfügt Terminal über einen Menüpunkt, mit dem Sie die Bildschirme manuell wechseln können:

Ansicht> Alternativer Bildschirm ein- / ausblenden

Dies wird hauptsächlich bereitgestellt, damit Sie Text vom alternativen Bildschirm anzeigen oder kopieren können, nachdem ein "Vollbild" -Programm beendet wurde. Xterm hat einen ähnlichen Befehl.

Sie können es auch verwenden, um ein Programm manuell zu zwingen, einen bestimmten Bildschirm zu verwenden, um beispielsweise zu steuern, ob die Ausgabe in das Scrollback-Protokoll geht. Wenn Sie derzeit ein Programm verwenden, das explizit zum alternativen Bildschirm wechselt, können Sie es verwirren oder unerwartete Ergebnisse erzielen, wenn Sie es während der Ausführung des Programms auf den Hauptbildschirm zwingen. Verwenden Sie dies daher mit Vorsicht.

Abhängig vom Programm kann es ein Befehlszeilenargument oder eine andere Möglichkeit geben, es so zu konfigurieren, dass stattdessen der Hauptbildschirm verwendet wird. zB , less -X.

Einige Terminfo-Einträge wurden speziell entwickelt, um die Verwendung des alternativen Bildschirms zu unterdrücken, z xterm1. TERM=xterm1 emacsführt Emacs auf dem Hauptbildschirm aus. Ich empfehle die xterm1dauerhafte Verwendung nicht , da dadurch eine Reihe anderer nützlicher Funktionen im Vergleich zur Standardeinstellung xterm-256colorbei Lion deaktiviert werden .

Sie können den Bildschirm auch mit dem tputBefehl wechseln , um die Escape-Sequenzen innerhalb einer Shell oder eines Skripts auszugeben. tput smcupwechselt zum alternativen Bildschirm und tput rmcupzurück zum Hauptbildschirm.

Um zu sehen, welches Programm gerade ausgeführt wird, sehen Sie sich den Programmnamen an, der im Terminalfenster oder auf der Registerkarte angezeigt wird, oder sehen Sie sich das Inspektorfenster an ( Shell> Show Inspector ). Der letzte Vorgang in der Liste im Inspektor ist (normalerweise) das aktuelle Programm, das den Bildschirm verwendet. Dies ist diejenige, die Sie konfigurieren müssen, um stattdessen den Hauptbildschirm zu verwenden.

Chris Page
quelle
1
Das klingt nach einer vielversprechenden Antwort. Ist eine vernünftige Erklärung dafür, dass ein Programm abnormal beendet werden kann und der alternative Bildschirm aktiv bleibt?
Steve Madsen
Wenn Sie nach dem Ausführen eines "Vollbild" -Programms wieder in der Shell sind, ist dies eine Möglichkeit, obwohl die meisten gängigen Programme, wie die von mir aufgelisteten, zuverlässig sind, wenn es darum geht, nach sich selbst aufzuräumen. Wenn ein "Vollbild" -Programm abstürzt, bleibt das Terminal möglicherweise auf dem alternativen Bildschirm. Sie sagten jedoch, Sie hätten Shell> Hard Reset senden versucht , einschließlich des Zurückschaltens zum Hauptbildschirm. Wenn es wieder passiert, können Sie versuchen, mit diesem Befehl zurückzuschalten:tput rmcup
Chris Seite
Eine andere Möglichkeit besteht darin, dass ein Programm das Terminal mit einem "Bildlaufbereich" verlassen hat. Es gibt Codes, die das Terminal anweisen, beim Scrollen nur einen Teilbereich von Zeilen zu scrollen. Programme verwenden dies, um beispielsweise Statuszeilen anzuzeigen, die nicht vom Bildschirm scrollen. Wenn der Bildlaufbereich nicht die oberste Zeile enthält, wird der Text nicht in das Bildlaufprotokoll gescrollt. Sie sagten jedoch erneut, Sie hätten einen Hard-Reset versucht, was auch dies klären sollte.
Chris Seite
2
In meinem Fall scheint es passiert zu sein, dass meine sshSitzung mit einem Remotecomputer fehlgeschlagen ist (Zeitüberschreitung?), Während ich in der Sitzung war vi, und anscheinend das Terminal im alternativen Bildschirm belassen hat (weil mir vinie die Möglichkeit gegeben wurde, aufzuräumen). Danach würde jede neue sshSitzung im selben Terminal das vom OP beschriebene Problem aufweisen, bis ich das Problem durch Auswahl des Menüelements Ansicht> Alternativer Bildschirm ausblenden gelöst habe .
Hephaistos
Vielen Dank, Ansicht> Alternativer Bildschirm ein- / ausblenden hat geholfen. Es hat eine Tastenkombination, die ich unwissentlich getroffen haben muss und nicht wusste, was passiert ist oder wie ich es rückgängig machen soll
aexl