Dynamische Neuformatierung von Manpages bei Änderungen der Terminaldimension

14

Ein üblicher Workflow von mir besteht darin, eine Handbuchseite in einem Terminal zu öffnen und dann in einem anderen Terminal Dinge zu testen. Die Manpage wird auf die anfänglichen Abmessungen des ersten Terminals formatiert. Wenn ich jetzt die Größe meiner Fenster ändere (oder meine WM das automatisch für mich machen lässt), ist entweder eine Lücke rechts von der vorformatierten Seite oder ein Zeilenumbruch vorhanden. An dieser Stelle qmache ich normalerweise (uit) und !!(run again), was meine Position auf der Seite verliert.

Ich gehe davon aus, dass der Formatierungsprozess sehr rechenintensiv ist oder aus alten Zeiten mit festen Terminalgrößen stammt. Der lessPager reagiert dynamisch auf Ereignisse zur Größenänderung des Terminals, sodass dies theoretisch möglich sein sollte.

Ich habe versucht, Manpages durchzusehen, das Web zu durchsuchen, im IRC nachzufragen - die ganze Menge - aber ich konnte mir nichts einfallen lassen.

  • Kann ich eine Neuformatierung innerhalb oder außerhalb des man-Dienstprogramms auslösen?

  • Gibt es eine Version des Dienstprogramms man, mit der die Größe der Seite dynamisch geändert werden kann?

  • Gibt es eine Möglichkeit, einen Teil des Formatierungs- / Anzeigeprozesses anzupassen, damit er aktualisiert wird SIGWINCH?

peth
quelle
manverwendet tatsächlich lessals Pager; Sie können heine Manpage aufrufen, um den lessHilfebildschirm aufzurufen. Ich bin mir nicht sicher, warum die Größe von Manpages nicht dynamisch geändert wird
Michael Mrozek
3
Das Problem scheint zu sein, dass mandie Ausgabe auf die Breite des Terms gerendert wird. Was Sie brauchen, ist ein Pager, der Lesezeichen an der Stelle setzt, an der Sie sich im Dokument befinden, man erneut ausführt (wovon er wirklich keine Ahnung hat, da er weitergeleitet wird) und zum Lesezeichen zurückkehrt. Alternativ ein neuer Man-Befehl, der einen Pager enthält.
nichts

Antworten:

11

Das Grundproblem besteht darin, dass die Formatierung von einem Programm und das Blättern von einem anderen Programm durchgeführt wird. Selbst wenn der Formatierer ein Signal erhält, dass sich die Fenstergröße geändert hat, und den Text für die neue Fenstergröße neu formatiert, kann er nur neuen Text über die Pipeline an den Pager weiterleiten. Der Pager kann nicht mit Sicherheit wissen, welche Position im neuen Stream der Position im alten Stream entspricht, der gerade angezeigt wird.

Was Sie brauchen, ist, dass der Pager die Neuformatierung durchführen kann. Wie @ Robin Green sagte, ist das HTML.

Wenn Sie HTML verwenden und dennoch in einem Terminal arbeiten möchten, können Sie festlegen man(1), dass die Ausgabe in HTML erfolgen soll, und einen Browser im Textmodus aufrufen, um ihn anzuzeigen.

man -Hlynx man

Dadurch wird die man(1)Manpage im Luchs-Textmodus-Browser angezeigt. Lynx reagiert nicht direkt auf Änderungen der Fenstergröße, aber Sie können Strg-R drücken, und Lynx rendert die Seite erneut für die neue Fenstergröße.

Ich kenne noch zwei andere Browser im Textmodus: Links und Elinks. Sie können mit diesen und Lynx experimentieren und herausfinden, welche Ihnen die beste Erfahrung beim Durchsuchen von Manpages bieten. Möglicherweise möchten Sie eine benutzerdefinierte Konfiguration nur für Manpages verwenden und ein Skript aufrufen, das den Browser mit dieser spezifischen Konfiguration aufruft.

Sie können die gewünschten man-Optionen in die MANOPTUmgebungsvariable einfügen.

$ export MANOPT=-Hlynx
$ export MANOPT=-Hmanlynx # manlynx invokes lynx with a different configuration.

Sie müssen das groffPaket installieren man, um HTML generieren zu können.

camh
quelle
Die Einschränkung des -HArguments auf den Menschen besteht darin, dass er keinen Webserver verwendet, sondern nur eine kleine Datei. Dadurch werden zwar Probleme mit falsch konfigurierten Firewalls vermieden, es können jedoch keine Hyperlinks zu anderen Manpages erstellt werden (die zumindest von einigen man-> html-Skripten von Drittanbietern unterstützt werden).
Robin Green
1
@Robin Green: Die Frage betrifft die Unterstützung von Manpages in anpassbaren Terminalfenstern. In diesem Zusammenhang ist die Verwendung eines Webservers keine Einschränkung. Das Nichtvorhandensein von Hyperlinks ist keine Einschränkung, da die in angezeigten Manpages lesskeine Hyperlinks enthalten.
Camh
Das ist wahr, es ist sicherlich eine gültige Antwort.
Robin Green
4

Konvertieren Sie die Manpages mithilfe eines geeigneten Skripts wie manserver in HTML , und zeigen Sie sie in einem Webbrowser an (bei dem es sich natürlich auch um einen textbasierten Webbrowser wie lynx handeln kann).

Dies ist vermutlich der Grund, warum niemand dieses Problem gelöst hat - weil das Problem mit der Entwicklung von man-> html-Skripten irrelevant wurde.

Robin Green
quelle