Sommaire
Ouvrir les pages man dans son éditeur de texte préféré
Bonjour,
Avant-hier, j’a acheté cette revue allemande que j’aime beaucoup car elle contient tout un tas d’astuces qui font la joie des gouiks de mon espèce, toujours à l’affût de quelque nouveauté pour égayer leur quotidien.
Or, j’ai trouvé quelque chose de sympa et de simple à mettre en oeuvre : la possibilité d’ouvrir les pages man, non pas dans le terminal mais directement dans son éditeur de texte favori. Le confort de lecture s’en trouve grandement optimisé.
Pour ce faire, il suffit de rajouter dans le fichier caché ~/.bashrc, les lignes de code suivantes :
man() { /usr/bin/man $* > ~/temp.txt if [ -s ~/temp.txt ]; then pluma ~/temp.txt fi }
Explication du code
- Ligne N° 1 : Création de la fonction man
- Ligne n° 3 : Le résultat de la commande man + paramètre(s) que l’on entre dans le terminal est envoyé dans un fichier temporaire ~/temp.txt. Par exemple, si j’entre la commande man sudo, le manuel sudo sera envoyé dans le fichier ~/temp.txt.
- Ligne n° 4 : Si le fichier ~/temp.txt est supérieur à 0 byte, en clair s’il n’est pas vide, alors prière d’ouvrir ce dernier avec l’éditeur pluma. Ai-je besoin de préciser que si votre éditeur est gedit, alors il faut modifier cette ligne de code en conséquence?
Voilà, donc si vous entrez man sudo dans votre terminal, au bout de quelques secondes, c’est votre éditeur favori qui va s’ouvrir et afficher les pages du manuel sudo.
Ouvrir les pages man dans un document PDF
La technique précédente a quelques inconvénients :
- Le terminal se retrouve bloqué car il reste ouvert (voir commentaires à la suite de l’article),
- Deux posteurs m’ont fait la remarque qu’un document PDF est plus agréable que l’éditeur de texte en terme de confort de lecture… sauf que les fonctions recherche et annotations ne fonctionnent pas si vous faites le choix d’envoyer les pages du manuel directement dans un fichier pdf temporaire. Je me suis donc creusé les méninges et j’ai trouvé la solution. Avec la commande sudo apt install, Il faut installer au préalable pandoc, texlive et texlive-xetex puis entrer ces lignes de code dans le fichier ~/.bashrc :
man() { /usr/bin/man $* > ~/temp.md if [ -s ~/temp.md ] then pandoc -s temp.md -f markdown -t latex -o temp.pdf evince ~/temp.pdf & exit fi }
Vous obtenez un document PDF agréable à lire, avec les fonctions recherche et annotations parfaitement fonctionnelles.
Explication du code
- Ligne N° 1 : Création de la fonction man
- Ligne n° 3 : Le résultat de la commande man + paramètre(s) que l’on entre dans le terminal est envoyé dans un fichier temporaire de type markdown ~/temp.md. Par exemple, si j’entre la commande man sudo, le manuel sudo sera envoyé dans le fichier ~/temp.md.
- Ligne n° 4 à 6 : Si le fichier ~/temp.md est supérieur à 0 byte, en clair s’il n’est pas vide, alors prière de convertir ce dernier en pdf grâce à pandoc, texlive et texlive-xetex.
- Ligne n° 7 : Le document obtenu est ouvert avec evince. Je libère le terminal grâce à exit.
Chères lectrices et chers lecteurs, je vous souhaite à toutes et à tous un joyeux Noël dans la paix et l’harmonie.
Je trouve la mise en forme PDF plus facile à lire avec evince ou n’importe quel autre lecteur PDF
man() {
/usr/bin/man -t $* > ~/temp.pdf && evince ~/temp.pdf
}
Oui, vous avez raison, je viens de tester et c’est encore plus agréable. Que signifie le -t à la deuxième ligne? test? Quand on le supprime, le code ne fonctionne plus.
dommage que ça bloque le terminal.
Je rajoute « & disown » à la fin de la ligne de nemocorp et yabon 🙂
par contre ça me génère des pdf dans lesquels je ne peux pas sélectionner de texte ni faire de recherche… Une idée ?
Je suis confronté au même problème. Je pense qu’il doit être possible d’y remédier en utilisant pandoc. Je cherche encore un peu…
Bon alors, en installant pandoc, texlive et texlive-xetex, ça fonctionne. Voici mon code :
man()
{
/usr/bin/man $* > ~/temp.md
if [ -s ~/temp.md ]
then
pandoc -s temp.md -f markdown -t latex -o temp.pdf
evince ~/temp.pdf & exit
fi
}
Je créé un fichier markdown, je le convertis en pdf et je libère le terminal. La fonction recherche et annotations du document pdf fonctionne.
Le compte est bon.
votre solution ne change rien chez moi (Fedora 28, DE Mate, atril comme lecteur de PDF)
J’ai essayé la solution d’Erick, pareil (voire pire, cf commentaire associé) 🙁
Dommage, parce que la mise en page pdf combinée à la possibilité de recherche te copier-coller semblait très alléchante
Pour créer du PDF, il vaut mieux partir du fichier source de la page de manuel et utiliser la commande groff qui sait interpréter le format nroff. Le résultat sera de bien meilleure qualité.
Par exemple:
zcat $(man -w $1) | groff -man -T pdf > /tmp/man.pdf
permet de créer la page de manuel passée en paramètre en format pdf (en utilisant -T html, au aurait la page en HTML 😉
Bonjour Erick,
Merci pour votre commentaire. En effet, votre commande fonctionne très bien dans une fonction man().
Seul souci, et j’ai le même problème avec mon code, cela ne fonctionne pas avec la commande man man, c’est-à-dire le manuel du manuel.
Je pense que c’est du au fait que la fonction s’appelle man(). Bon, c’est un détail qui n’est pas très important mais je ne sais pas comment le résoudre.
Cordialement.
Benoît
Bonjour Benoît,
En effet, je ne l’avais pas vu.
zcat $(env man -w $1) | groff -man -T pdf > /tmp/man.pdf
devrait régler le problème, car on utilis
Il manque une partie de votre commentaire…
ça me renvoit
groff: can’t find `DESC’ file
groff:fatal error: invalid device `pdf’
🙁
Le fichier DESC auquel il est fair référence ici est le fichier:
/usr/share/groff/current/font/devpdf/DESC
qui n’a pas l’air d’exister chez vous.
Peut-être faut il installer d’autres paquets pour avoir tous les drivers de sortie sur votre distribution.
Chez moi, le répertoire /usr/share/groff/current/font/ contient les répertoires suivants: devX100 devX100-12 devX75 devX75-12 devascii devdvi devhtml devlatin1 devlbp devlj4 devpdf devps devutf8
… car on utilise la commande env qui permet de trouver où se trouve l’exécutable man (plutôt que la fonction), ce qui permet d’éviter une boucle…
Très intéressant, merci pour l’astuce. Par contre c’est un peu dommage d’utiliser le exit car ça ferme complètement la fenêtre du terminal (enfin chez moi). Il n’y aurait pas un autre moyen pour garder la main sur le terminal? Surtout qu’en général quand on fait un man c’est qu’on est en train de faire quelque chose dans ledit terminal.
Malheureusement, Evince génère un commentaire de bug qui empêche l’utilisation du terminal et je n’ai pas trouvé la solution à ce problème, à part utiliser tilix qui est un terminal multifenêtres.
Bonjour,
sinon on peut lancer directement :
yelp man: commande &
Cela lance le navigateur d’aide gnome, on peut chercher, copier, mais pas annoter.
Bonjour Guillaume,
Merci pour ton commentaire que je publie malheureusement avec quelques jours de retard. Pour une raison que j’ignore, celui-ci se trouvait dans ma boite de commentaires indésirables 🙁 J’ai rectifié l’erreur.
Cordialement,
Benoît
Très intéressant d’ouvrir un man dans gvim en gardant le terminal disponible, merci
Mais, pour éviter une collision entre deux « man » s’ouvrant dans le même fichier ~/temp.txt , j’ai édité ta fonction (dans mon .zsh_functions) ainsi :
# ouvrir les man dans gvim
man()
{
/usr/bin/man $* > /tmp/$*.txt
if [ -s /tmp/$*.txt ]; then gvim -Rg /tmp/$*.txt
fi
}
Bonjour,
Merci pour cette amélioration du code. 🙂
Cordialement,
Benoît
Les commandes
man -t find > find.ps ,puis ps2pdf find.ps
créent aussi un pdf, (peut-être pas aussi beau qu’avec LaTeX ?)
Il existe aussi gropdf , pour passer directement du format groff (des man pages) au pdf, mais je ne l’ai jamais utilisé.
merci pour ce blog que je découvre.
Bonjour Joseph,
Merci à vous pour votre commentaire. Vous êtes le bienvenu chez moi 🙂
Cordialement,
Benoît
Super, je n’avais pas vu l’option -t. Du coup, on peut même faire
man -t -Tpdf $1 > $1.pdf
puisque -t lance groff. Du coup, plus besoin de convertir de ps vers pdf.
Cool