Reformatage dynamique des pages de manuel sur les changements de dimension du terminal


14

Un de mes flux de travail courants consiste à ouvrir une page de manuel dans un terminal, puis un autre terminal dans lequel tester les choses. La page de manuel est formatée aux dimensions initiales du premier terminal. Lorsque je redimensionne maintenant mes fenêtres (ou que mon WM le fait automatiquement pour moi), il y a soit un espace à droite de la page préformatée, soit des retours à la ligne. À ce stade, j'ai l'habitude de q(uit) et !!(exécuter à nouveau), ce qui perd ma position dans la page.

Je suppose que le processus de formatage est assez gourmand en CPU, ou peut-être provient-il des temps anciens de tailles de terminaux fixes. Le lesspager réagit dynamiquement aux événements de redimensionnement terminal, donc cela devrait être possible en théorie.

J'ai essayé de parcourir les pages de manuel, de rechercher sur le Web, de poser des questions sur IRC - le tout - mais je n'ai rien trouvé.

  • Puis-je déclencher un reformatage depuis l'intérieur ou l'extérieur de l'utilitaire man?

  • Existe-t-il une version de l'utilitaire man qui redimensionne la page dynamiquement?

  • Existe-t-il un moyen de personnaliser une partie du processus de formatage / affichage pour la mettre à jour SIGWINCH?


manutilise en fait lesscomme pager; vous pouvez appuyer hsur une page de manuel pour obtenir l' lessécran d'aide. Je ne sais pas pourquoi il ne redimensionne pas dynamiquement les pages de manuel
Michael Mrozek

3
Le problème semble être que le manrendu correspond à la largeur du terme. Ce dont vous avez besoin, c'est d'un pager qui peut ajouter un signet à l'endroit où vous vous trouvez dans le document, réexécuter man (dont il n'a vraiment aucune idée puisqu'il est redirigé vers lui) et revenir au signet. Alternativement, une nouvelle commande man qui intègre un pager.
nix

Réponses:


11

Le problème de base est que le formatage est effectué par un programme et la pagination est effectuée par un autre. Même si le formateur devait recevoir un signal indiquant que la taille de la fenêtre a changé et reformater le texte pour la nouvelle taille de fenêtre, tout ce qu'il peut faire est de transmettre du nouveau texte dans le pipeline vers le pageur. Le pager n'a aucun moyen de savoir avec certitude quelle position dans le nouveau flux correspond à la position dans l'ancien flux qu'il affichait actuellement.

Ce dont vous avez besoin, c'est que le pager puisse effectuer le reformatage. Comme l'a dit @Robin Green, c'est du HTML.

Si vous souhaitez utiliser HTML mais travaillez toujours dans un terminal, vous pouvez indiquer man(1)de sortir en HTML et appeler un navigateur en mode texte pour l'afficher.

man -Hlynx man

Cela affichera la man(1)page de manuel dans le navigateur en mode texte lynx. Lynx ne répond pas directement aux changements de taille de fenêtre, mais vous pouvez appuyer sur ctrl-R et lynx restituera la page pour la nouvelle taille de fenêtre.

Il existe deux autres navigateurs en mode texte que je connais: les liens et les liens. Vous pouvez expérimenter avec ceux-ci et lynx et déterminer ce qui vous donne la meilleure expérience pour parcourir les pages de manuel. Vous pouvez utiliser une configuration personnalisée uniquement pour les pages de manuel et appeler un script qui appelle le navigateur avec cette configuration spécifique.

Vous pouvez mettre les options man que vous aimez dans la MANOPTvariable d'environnement.

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

Vous devrez installer le groffpackage pour manpouvoir générer du HTML.


La limitation de l' -Hargument à l'homme est qu'il n'utilise pas de serveur Web, mais simplement un petit fichier. Bien que cela évite tout problème avec les pare-feu mal configurés, cela ne permet pas de créer des hyperliens vers d'autres pages de manuel (qui prennent en charge au moins certains scripts man-> html tiers).
Robin Green

1
@Robin Green: La question concerne la prise en charge des pages de manuel dans les fenêtres de terminal redimensionnables. Dans ce contexte, ne pas utiliser de serveur Web n'est pas une limitation. Et ne pas avoir d'hyperliens n'est pas une limitation, car les pages de manuel affichées dans lessn'ont pas d'hyperliens.
camh

C'est vrai, c'est certainement une réponse valable.
Robin Green

4

Convertissez les pages de manuel en html à la volée à l'aide d'un script approprié tel que manserver , en les visualisant dans un navigateur Web (qui peut bien sûr être un navigateur Web textuel comme lynx).

C'est sans doute pourquoi personne n'a résolu ce problème - parce que le problème est devenu hors de propos avec le développement de scripts man-> html.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.