Jedes Mal, wenn jemand eine andere Größe für eine virtuelle Konsole festlegt, less
erkennt er die Fensterauflösung (ich gehe davon aus, dass ...); dementsprechend ändert es, wie viele Textzeilen es visualisieren soll. Wie wird dieser Parameter berechnet?
11
Antworten:
Wenn Sie nach einer Möglichkeit suchen, anhand eines Skripts zu überprüfen, können Sie eine der folgenden Aktionen ausführen:
tput cols
undtput lines
, wie Manatwork vorschlägtAber wenn Sie die Details wollen, gehen wir:
Für virtuelle Terminals (xterm et al.) Gibt es einen
ioctl()
Systemaufruf, der angibt, wie groß das Fenster ist. Wenn es kann,less
nutzt diesen Anruf. Wenn Sie die Größe des Fensters ändern, erhält alles, was in diesem Fenster ausgeführt wird, einSIGWINCH
Signal, das Sie darüberless
informiert, dass nach einer neuen Fenstergröße gesucht werden soll. Zum Beispiel habe ich eineless
Ausführung gestartet (als Prozess-ID 16663), eine Verbindung damit hergestelltstrace
und die Fenstergröße geändert . Das habe ich gesehen:Dies ist auch was
tput cols
undtput lines
was hinter den Kulissen zu tun, wenn sie können. Weitere Informationen zu dieser Methode finden Sie unterman tty-ioctl
TIOCGWINSZ.Für andere Terminals, z. B. solche, die an serielle Schnittstellen angeschlossen sind, gibt es jedoch keine Möglichkeit, diese Informationen direkt abzurufen. In diesem Fall wird
less
nach Hinweisen in den Umgebungsvariablen gesucht.LINES
undCOLUMNS
wird häufig auf die Anschlussabmessungen eingestellt. Wenn die Terminalabmessungen gefunden werdenbash
oder gefunden werdenzsh
können, werden diese Variablen automatisch selbst festgelegt, damit nicht so clevere Programme die Terminalgröße leichter erkennen können. Die meisten anderen Shells, einschließlichdash
undtcsh
, setzen diese Variablen jedoch nicht.TERM
wird normalerweise auf den Terminaltyp gesetzt. In diesem Fall kann die terminfo-Datenbank die erwartete Größe des Terminals enthalten. Wenntput rows
die IOCTL nicht verwendet werden kann (z. B. wenn Sie über eine serielle Schnittstelle verbunden sind), wird auf die hier aufgezeichneten Werte zurückgegriffen. Für ein Terminal, dessen Größe sich ändern kann, ist dies nur eine Vermutung und wahrscheinlich falsch.Weitere Informationen finden Sie unter
man tput
Befehl zum Steuern des Terminals undman terminfo
eine Liste der Aufgaben, die Sie dem Terminal mitteilen können.quelle
Wenn Sie sich den Quellcode ansehen, werden Sie
less
Aufrufeioctl()
zum Abrufen der Fenstergröße unter Linux kennen.quelle
Ich bin nicht sicher, ob dies die Informationen sind, nach denen Sie suchen. Ich denke,
less
registriert einen Signalhandler fürSIGWINCH
. Wenn sich die Dimension des Terminals ändert, erhält es einSIGWINCH
Signal und prüft die tty-Informationen auf die aktuelle Dimension des Terminals. http://www.gnu.org/software/libc/manual/html_node/Miscellaneous-Signals.htmlquelle