La commande less(1) (du moins telle qu’elle est installé avec le paquet debian du même nom) possède une petite fonctionnalité sympathique : lesspipe(1)
Elle permet d’ouvrir un fichier non texte avec un visionneur externe, et de renvoyer la sortie à less.
N’importe quel programme qui extrait des données d’un document et les renvoie dans la console au format texte peut être utilisé.
Pour celà il suffit de définir la variable LESSOPEN telle que LESSOPEN=| /usr/bin/lesspipe %s
lessfile(1) fait de même, mais utilise un fichier temporaire au lieu des tubes (« | »). Elle utilise en plus la variable LESSCLOSE pour supprimer le fichier à la fin.
Ce sont les scripts /usr/bin/lesspipe et /usr/bin/lessfile qui se chargent de tout. Ces scripts sont identiques. Je montrerai l’exemple de lesspipe ici.
Quand on l’appelle sans arguments :
$ lesspipe
export LESSOPEN="| /usr/bin/lesspipe %s";
export LESSCLOSE="/usr/bin/lesspipe %s %s";
Donc il suffit de rajouter une ligne dans ~/.bashrc :
Et déjà, less permet de lire le contenu des archives (arj, tar, bz2, deb, iso, bin, raw, rar, rpm, gz, tar, zip…).
Si l’archive contient plusieurs fichiers, less affiche la liste des fichiers. Si c’est un simple fichier texte compréssé (une archive dans /var/log par exemple), less affichera le contenu du fichier !
Il affiche aussi les .doc et .pdf, ainsi que les données des images (gif, jpg, png, tif…)
Si vous avez des problèmes d’encodage, rajoutez export LESSCHARSET=latin9
dans votre .bashrc. :smt002
S’il vous manque un paquet pour le visionner. less vous affichera un message, disant que tel ou tel paquet est manquant. Vous pouvez aussi regarder le script /usr/bin/lesspipe pour voir quels visionneurs il utilise.
Mais ce n’est pas tout, le script permet de rajouter (ou changer) les règles. Il suffit de créer un fichier ~/.lessfilter dans lequel on rajoute ce que l’on veut.
Par exemple :
[code]#!/bin/sh
~/.lessfilter : règles supplémentaires pour lesspipe
pour visionner le contenu des dossiers
if [ -d “$1” ];then
ls -la $1
exit 0
fi
case echo "$1" | tr '[:upper:]' '[:lower:]'
in
lire les odt (nécessite odt2txt)
*.odt)
odt2txt “$1”
;;
bonus pour les images
.jpg|.jpeg|.gif|.bmp|*.png)
# voir la description de l’image
# c’est le comportement par défaut de lesspipe (nécessite imagemagick)
identify “$1” > /tmp/lessout
# voir l’image en ASCII en dessous (nécessite caca-utils)
# il faut ajouter l’option -r à less pour voir la couleur (export LESS=-r)
img2txt “$1” >> /tmp/lessout
# récupère la description avec l’image en ASCII dessous :
cat /tmp/lessout
rm /tmp/lessout
;;
Voir les tags des mp3 (nécessite mp3info)
*.mp3)
mp3info “$1”
;;
Voir les tags des ogg (nécessite avinfo)
*.ogg)
avinfo “$1”
;;
infos sur les videos (nécessite avinfo)
.mpg|.avi|*.wmv)
avinfo --far “$1”
;;
*)
exit 1
esac
exit 0
[/code]
Et on peut encore en rajouter d’autres… :smt003
N’hésitez pas à poster vos trouvailles !
Remerciements : l’affichage des astuces au hasard sur la page d’acceuil de DLFP, qui m’a amené sur http://linuxfr.org/forums/47/24920.html
Je n’ai pas trouvé de moyens d’avoir une coloration syntaxique avec lesspipe (à part un script qui la ferait à coups de sed ). J’ai donc fait autrement :
-
Pour les pages man :
export PAGER=`which most`
(nécessite most) -
Pour le code, le vrai :
alias more='/usr/share/vim/vimcurrent/macros/less.sh'
(nécessite vim)