Chibi-nah::blog

Des geekeries, de la MAO, de tout et de rien…

Archives

Page de manuel dans un tty ou dans son navigateur

Problème classique Je cherche UN paramètre pour un outil en ligne de commande, genre ffmpeg ou tar. Et là, je tape naïvement "man ffmpeg", avant de me rendre compte de mon erreur : le manuel est long… trèèèèès long, et chercher dedans via un terminal, ça devient très vite pénible.

Solution Ouvrir ce manuel dans un navigateur. J'avais proposé il y a quelques années, l'outil "manServer", mais son instabilité chronique et l'utilisation d'un serveur web dédié (intégré à cet outil) ont fait que j'ai depuis longtemps abandonné cette idée.

Solution 2 Lire la page de manuel de man (man man), et que vois-je ?

−H[navigateur], −−html[=navigateur]

Cette option fera produire à groff une page au format HTML qui sera ensuite affichée dans un navigateur web. Le choix du navigateur est déterminé soit par l’argument optionnel navigateur, s’il est indiqué, soit par la variable d’environnement $BROWSER ou sinon par la valeur par défaut indiquée lors de la compilation (habituellement lynx). Cette option induit −t et ne fonctionne qu’avec les troff GNU.

Intéressant. Testons de suite avec tar, via la commande

man -Hfirefox tar

C'est déjà plus lisible :-)

Hors-sujet Ça a pu répondre à mon problème : comment fait-on pour compresser en LZMA un répertoire contenant une foultitude de sous-répertoires et de fichiers et de symlinks, donc déréférencement. Toute ressemblance avec un gros backup sur static ne serait (etc)

tar -Jhcvf ../classes.tar.xz Classés

/Hors-sujet

Alias(ing) Par contre, ça devient vite pénible de préciser -H… ce qu'il faudrait, ça serait un alias man -> man -H, mais si jamais je n'ai pas ma session X ouverte (via startx), je suis bloqué… comment faire ?

C'est là que j'apprécie mon shell (fish, the friendly interactive shell) qui me permet de créer des alias, mais sous forme de fonction. Je récapitule donc mes besoins :

  • Si Xorg est lancé, alors afficher la page de manuel dans firefox.
  • Sinon, l'afficher de manière classique.

Ce qui peut alors se traduire par :

function man
  if printenv | grep DISPLAY >/dev/null
    /usr/bin/man -Hfirefox $argv
  else
    /usr/bin/man $argv
  end
end

Ici, la commande if ne fait que tester la valeur de retour du grep. Si grep a trouvé quelque chose, il retourne 0, sinon 1 si non trouvé. Le contenu de DISPLAY ne m'intéresse pas.

Ce fichier est enregistré dans ~.config/fish/functions/man.fish

Désormais, je peux taper man ffmpeg, aussi bien dans un tty (même si Xorg est lancé dans un autre tty, l'absence de la variable d'environnement DISPLAY indique que je n'ai pas d'environnement graphique), que dans une console sous X (et là, DISPLAY existe).

Trolls Oui, j'utilise fish, on peut faire la même chose sur zsh ou sur bash, sauf que je n'utilise quasiment plus ces shells, et donc, je ne détaillerai pas comment faire… lisez donc les pages de man… Les vrais barbus consultent les pages de manuel sur un terminal VT52 en 80 lignes par 25 colonnes, genre écran de minitel. systemd. Obi-Wan Kenobi.