Dies ist eine etwas komplizierte Frage. Ich werde versuchen, Ihre Fragen zu beantworten, aber zuerst eine allgemeine Beschreibung:
Der Scrollback-Puffer wird von Ihrem Terminal-Emulator ( xterm
, Konsole, GNOME Terminal) implementiert . Es enthält den gesamten Text, der auf dem Bildschirm angezeigt wurde, einschließlich der Standardausgabe und des Standardfehlers von jedem Programm, das Sie im Terminal ausführen. Es ist eine reine Terminal-Funktionalität, mit der Sie einen Blick auf vergangene Ausgaben werfen können, die möglicherweise an Ihnen vorbeigekommen sind, oder prüfen können, was zuvor gesagt wurde.
Sie können sich den Scrollback-Puffer als eine lange Seite der protokollierten Ausgabe und Ihr Terminal-Fenster als ein Fenster vorstellen, das jeweils nur einen Teil davon betrachtet. Wenn Sie noch keinen Bildlauf durchgeführt haben, sehen Sie das hintere Ende des Puffers. Normalerweise wird im Terminal eine Begrenzung für die Anzahl der Zeilen konfiguriert, die es verfolgt, bevor es zu vergessen beginnt.
Angenommen, die Grenze liegt bei 1000 Zeilen. Für die ersten tausend Zeilen der Ausgabe in Ihrer Sitzung hängen Sie einfach den Puffer an, und Sie können bis zum Beginn Ihrer Sitzung nach oben scrollen. Sobald die 1001. Ausgabezeile erreicht ist, wird die erste Zeile im Puffer gelöscht, und der am weitesten zurückliegende Bereich, den Sie scrollen können, ist die zweite Zeile Ihrer Sitzung. Der Puffer enthält immer die letzten tausend Ausgabezeilen, die auf Ihrem Bildschirm angezeigt wurden, und Sie können jederzeit nach oben scrollen, um frühere Ausgaben anzuzeigen.
Bedeutet es "Funktion" wie in "Unterprogramm" oder wie in "Feature"?
Dies ist "Funktion" wie in "Feature". Der Terminalemulator verfügt über eine Funktion, die aufzeichnet, was auf dem Bildschirm angezeigt wird, und in der Sie einen Bildlauf nach oben und unten durchführen können. Die Konsolen einiger Systeme unterstützen auch einen eingeschränkten Scrollback.
Es wird ein bisschen komplizierter, wenn Sie screen
in die Mischung werfen . Zu diesem Zeitpunkt screen
wird der Scrollback-Puffer selbst emuliert. Aus diesem Grund können Sie ihn innerhalb des Programms kopieren und einfügen, anstatt nur mit (z. B.) X-Auswahl.
Gibt es einen Unix-Standard oder eine API für diesen Scrollback-Puffer?
Die kurze Antwort lautet Nein, sie wird nur von Ihrem Terminal bereitgestellt. Je länger die Antwort, desto weiter unten.
Welche dieser Programme steuern den Scrollback-Puffer in einem "Stapel" von Programmen, z. B. "vim", das auf dem Bildschirm gestartet wurde, in "bash", das in "ssh" gestartet wurde, in einem Terminal-Emulator?
Im Falle von vim
und bash
kontrollieren sie das überhaupt nicht (Achtung, weiter unten). Ihr Terminal stellt den Scrollback-Puffer für alle darin enthaltenen Programme bereit, beginnend mit Ihrer Shell. screen
simuliert, wie oben erwähnt, den Scrollback selbst.
Ich habe den Scrollback auch mit screen in eine Datei geschrieben. Diese Datei hatte oben viel Leerraum und es sieht so aus, als wäre die "Ansicht", die mein Terminal-Emulator anzeigt, einfach die untersten Zeilen des Puffers.
Dies ist screen
der interne Puffer. Was zu diesem Zeitpunkt auf Ihrem Bildschirm angezeigt wird, befindet sich im Allgemeinen ganz unten im Puffer.
Kann ein Programm wie vim deshalb mein gesamtes Terminalfenster "löschen", weil es vorübergehend Zugriff auf den Scrollback-Puffer der übergeordneten Shell erhält?
Hier ist ein Teil, wo es viel komplexer wird. Praktisch alle X-basierten Terminalemulatoren simulieren einen VT100, und dort unterstützen sie einen "Alternate Screen Buffer" . Im Gegensatz zum normalen Puffer, der für die meisten Terminalinteraktionen mit sequenzieller Ausgabe verwendet wird, entspricht der alternative Bildschirmpuffer genau der Größe Ihres Terminals. Es gibt kein Scrollen nach oben oder unten, da es nicht größer ist als das, was angezeigt wird.
Die Idee dabei ist, einer Vollbildanwendung zu ermöglichen, das zu tun, was sie tun muss, ohne durch etwas gestört zu werden, das Sie bereits auf dem Bildschirm hatten, und Sie dann zu genau der Anzeige zurückkehren zu lassen, die Sie zuvor hatten. Das ist der Grund, warum, wenn Sie es eingeben vim
, der gesamte Bildschirm ausgefüllt wird. Wenn Sie es jedoch verlassen, wird die Terminalausgabe, die Sie zuvor hatten - alle Ihre vorherigen Eingabeaufforderungen und Befehlsausgaben - wieder angezeigt. vim
Wechselt beim Start in den alternativen Bildschirmpuffer und beim Verlassen wieder in den normalen Puffer.
Dieser alternative Puffer ist einer der oben erwähnten Vorbehalte. Manchmal kann das Programm dem Terminal wirklich mitteilen, was mit dem Puffer geschehen soll.
screen
ist ein anderes Programm, das dies tut, weshalb die Bildlauffunktion Ihres Terminals in der Regel nicht funktioniert, während Sie sich in einer Bildschirmsitzung befinden. Sie screen
emulieren den Bildlaufpuffer selbst, sodass Sie die internen Funktionen verwenden müssen, um zur alten Ausgabe zurückzukehren.
Oder verwendet vim einen eigenen Scrollback-Puffer, der irgendwie über dem übergeordneten Scrollback-Puffer liegt?
Ich habe dies in der vorherigen Frage meistens beantwortet, aber die kurze Antwort auf diese spezielle Frage lautet, dass vim
vom Terminal ein eigener temporärer Puffer ohne Scrollback abgerufen wird und dann das gesamte Scrollen Ihrer Dokumente intern durchgeführt wird.
Alle diese Ausnahmen, die ich erwähnt habe:
Es wird wieder etwas komplizierter. Ich sagte, dass Anwendungen keine Kontrolle über das Scrollback haben und dass es vollständig vom Terminal bereitgestellt wird. In einigen Fällen besteht bei einigen Terminals eine eingeschränkte Interaktion. Das Programm druckt bestimmte Escape-Sequenzen aus - wenn Sie in der Vergangenheit Terminalfarben manuell verwendet haben, haben Sie gesehen, wie sie aussehen - und das Terminal kann diese interpretieren und sein Verhalten ändern oder sogar Informationen an das Programm zurücksenden. Welche Escape-Sequenzen zur Verfügung stehen, ist in der Datenbank termcap (Terminal Capability) beschrieben .
Einige Terminals unterstützen eine eingeschränkte Abfrage und Manipulation des Scrollback-Puffers. Viele xterm
Derivate verfügen über Escape-Sequenzen, die das Terminal anweisen, durch die Ansicht zu scrollen. Viele Terminals unterstützen auch das Festlegen eines bestimmten Bildschirmbereichs für den Bildlauf, der Rest bleibt erhalten. Das neigt dazu, den Scrollback-Puffer zu brechen.
Nahezu alle Terminals unterstützen Sequenzen zum Bewegen des Cursors auf dem Bildschirm. Auf diese Weise kann die ncurses
Bibliothek alle verschiedenen Teile der Anzeige aktualisieren. Sie können sich die VT100-Sequenzenxterm
ansehen, die von unterstützt werden . Die Art und Weise, wie diese mit dem Scrollback-Puffer interagieren, kann manchmal etwas seltsam sein, insbesondere im Fall von Dingen, die ihr eigenes Scrollverhalten implementieren, wie z less
. B. dem Befehl. Es kann vorkommen, dass in Ihrem Scrollback doppelte oder fehlende Zeilen vorhanden sind, da der less
Text in einer Weise überstrichen wird, die Ihr Terminal nicht erwartet hat. Andere Programme füllen manchmal Ihren Puffer mit mehreren Kopien ihrer gesamten Anzeige.