Forum debian-fr.org

Rechercher pour:

* Connexion   * Inscription

* FAQ    * Rechercher





Publier un nouveau sujet Répondre au sujet  [ 10 messages ] 
Auteur Message
 Sujet du message: Utiliser less comme visionneur universel
MessagePublié: 30 Oct 2008 02:18 
Hors-ligne
Vraiment, particulièrement bavard(e)!
Avatar de l’utilisateur

Inscrit le: 28 Juil 2008 14:57
Messages: 1457
Localisation: Seine et Marne
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 :
Code:
$ lesspipe
export LESSOPEN="| /usr/bin/lesspipe %s";
export LESSCLOSE="/usr/bin/lesspipe %s %s";


Donc il suffit de rajouter une ligne dans ~/.bashrc :
Code:
eval $(lesspipe)

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
Code:
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

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 :smt107 ). J'ai donc fait autrement :

- Pour les pages man :
Code:
export PAGER=`which most`
(nécessite most)

- Pour le code, le vrai :
Code:
alias more='/usr/share/vim/vimcurrent/macros/less.sh'
(nécessite vim)

_________________
La propriété intellectuelle n'a d'intérêt que lorsqu'elle porte mal son nom.


Haut
 Profil  
 
 Sujet du message: Re: Utiliser less comme visionneur universel
MessagePublié: 30 Oct 2008 02:30 
Hors-ligne
Grand posteur
Avatar de l’utilisateur

Inscrit le: 23 Oct 2008 08:18
Messages: 101
Je savais que less possédait de nombreuses capacités, mais je ne m'y étais pas intéressé outre mesure. Mais présenté comme ça, je vais devoir mettre un terme à mon ignorance et me pencher sur le sujet.


Haut
 Profil  
 
 Sujet du message: Re: Utiliser less comme visionneur universel
MessagePublié: 30 Oct 2008 12:11 
Hors-ligne
Fan des forums debian-fr.org!
Avatar de l’utilisateur

Inscrit le: 18 Juil 2007 17:57
Messages: 4147
Localisation: Grenoble
Excellente astuce ! :lol: :lol: :lol:

EDIT : Je viens de vérifier la création de ${HOME}/.lessfilter va remplacer les scripts prédéfinis donc il faut réimplémenter chaque format. :(

_________________
Je suis irritable, irritant et névrosé, si l'un de mes messages vous insupporte essayez de ne pas en tenir compte ou de voir s'il n'a pas un sens de lecture ironique. Bonne journée et gardez le sourire. :)


Haut
 Profil  
 
 Sujet du message: Re: Utiliser less comme visionneur universel
MessagePublié: 30 Oct 2008 17:44 
Hors-ligne
Vraiment, particulièrement bavard(e)!
Avatar de l’utilisateur

Inscrit le: 28 Juil 2008 14:57
Messages: 1457
Localisation: Seine et Marne
MisterFreez a écrit:
Je viens de vérifier la création de ${HOME}/.lessfilter va remplacer les scripts prédéfinis donc il faut réimplémenter chaque format. :(

Le script lesspipe lit le script .lessfilter.
Si .lessfilter renvoie 0 (exit 0) lesspipe se termine.
Sinon (exit 1) lesspipe applique ses règles. :smt002

Le dit code dans lesspipe :
Code:
# Allow for user defined filters
#if [ -x ~/.lessfilter -a -O ~/.lessfilter ]; then
if [ -x ~/.lessfilter ]; then      # si .lessfilter existe (et est exécutable)
   ~/.lessfilter "$1"         # on le lance
   if [ $? -eq 0 ]; then      # si il renvoie 0
      if [ $BASENAME = $LESSFILE ]; then
         if [ -s $TMPFILE ]; then
            echo $TMPFILE
         else
            rm -f $TMPFILE
         fi
      fi
      exit 0            # on sort
   fi
fi
# sinon on continue...


Donc, avec le .lessfilter que j'ai posté, je peux lire les pdf, les archives, tout ça :!:

_________________
La propriété intellectuelle n'a d'intérêt que lorsqu'elle porte mal son nom.


Haut
 Profil  
 
 Sujet du message: Re: Utiliser less comme visionneur universel
MessagePublié: 06 Oct 2009 15:58 
Hors-ligne
Vraiment, particulièrement bavard(e)!
Avatar de l’utilisateur

Inscrit le: 28 Juil 2008 14:57
Messages: 1457
Localisation: Seine et Marne
Bon, finalement, on peut tout faire avec less, y compris la coloration :
- Pour les pages de manuel, il faut definir les variables LESS_TERMCAP_*. Exemple pompé dans le wiki archlinux :
Code:
export LESS_TERMCAP_mb=$'\E[01;31m'    # début de blink
export LESS_TERMCAP_md=$'\E[01;31m'    # début de gras
export LESS_TERMCAP_me=$'\E[0m'        # fin
export LESS_TERMCAP_so=$'\E[01;44;33m' # début de la ligne d`état
export LESS_TERMCAP_se=$'\E[0m'        # fin
export LESS_TERMCAP_us=$'\E[01;32m'    # début de souligné
export LESS_TERMCAP_ue=$'\E[0m'        # fin


- Pour le code, il suffit d'utiliser highlight, fourni avec le paquet du même nom. Mon nouveau .lessfilter :
Code:
#!/bin/sh
# ~/.lessfilter: add commands for lesspipe

case `echo "$1" | tr '[:upper:]' '[:lower:]'` in
        *.odt)
        if [ -x `which odt2txt` ]; then odt2txt "$1";
        else echo "No odt2txt available"; fi
        ;;

        *.mp3)
        if [ -x `which eyeD3` ]; then eyeD3 "$1";
        else echo "No eyeD3 available"; fi
        ;;

        *.ogg)
        if [ -x `which avinfo` ]; then avinfo "$1";
        else echo "No avinfo available"; fi
        ;;

        *.mpg|*.avi|*.wmv)
        if [ -x `which avinfo` ]; then avinfo --far "$1";
        else echo "No avinfo available"; fi
        ;;

        *.c|*.h|*.py|*.pl)
        if [ -x `which highlight` ]; then highlight -A "$1";
        else echo "No highlight available"; fi
        ;;

        *makefile)
        if [ -x `which highlight` ]; then highlight -S qmake -A "$1";
        else echo "No highlight available"; fi
        ;;

        *)
        case `file "$1"` in
                *directory)
                ls -la "$1"
                ;;

                *POSIX*shell*script*executable)
                if [ -x `which highlight` ]; then highlight -S bash -A "$1";
                else echo "No highlight available"; fi
                ;;

                *)
                exit 1
        esac
esac

exit 0


Plus besoin de s'énerver sur les keybindings de most, ou sur vim qui ne veut pas copier la selection dans le presse papier...

_________________
La propriété intellectuelle n'a d'intérêt que lorsqu'elle porte mal son nom.


Haut
 Profil  
 
 Sujet du message: Re: Utiliser less comme visionneur universel
MessagePublié: 06 Oct 2009 20:43 
Hors-ligne
Vraiment, particulièrement bavard(e)!

Inscrit le: 30 Avr 2009 10:45
Messages: 1491
Merci pour la coloration dans less! Pour fêter ça j'ai purgé most.
kna a écrit:
vim qui ne veut pas copier la selection dans le presse papier...

Tu utilises quel version de vim?
Avec vim-nox, je n'y arrivais pas non plus, j'ai dû installer vim-gtk pour y arriver,
tu vas me dire que c'est un peu sortir un marteau pour écraser une mouche, mais bon.
Pour copier dans le clipboard je préfixe mes commandes de selection avec "*
Par exemple "*yy copie la ligne courante dans le clipboard, ça marche aussi en mode visuel.
J'ai pas encore testé ton visualiseur universel, je n'utilisais lesspipe que pour les textes gunzipé
jusqu'à maintenant, il va être temps que j'exploite tout son potentiel.


Haut
 Profil  
 
 Sujet du message: Re: Utiliser less comme visionneur universel
MessagePublié: 06 Oct 2009 22:52 
Hors-ligne
Vraiment, particulièrement bavard(e)!
Avatar de l’utilisateur

Inscrit le: 28 Juil 2008 14:57
Messages: 1457
Localisation: Seine et Marne
eol a écrit:
Pour copier dans le clipboard je préfixe mes commandes de selection avec "*
Par exemple "*yy copie la ligne courante dans le clipboard, ça marche aussi en mode visuel.

Je parlais du copier-coller à la souris en fait. Mauvaise habitude dont je ne me suis pas encore affranchi... :)

eol a écrit:
je n'utilisais lesspipe que pour les textes gunzipé

Si c'est juste pour ça, il y a zless aussi. Qui je crois a pour seul avantage par rapport à lesspipe, que tu dois le retrouver sur toutes les distribs...

_________________
La propriété intellectuelle n'a d'intérêt que lorsqu'elle porte mal son nom.


Haut
 Profil  
 
 Sujet du message: Re: Utiliser less comme visionneur universel
MessagePublié: 07 Oct 2009 09:38 
Hors-ligne
Vraiment, particulièrement bavard(e)!

Inscrit le: 30 Avr 2009 10:45
Messages: 1491
kna a écrit:
Je parlais du copier-coller à la souris en fait. Mauvaise habitude dont je ne me suis pas encore affranchi...

Avec vim-gtk, la sélection de la souris va aussi dans le clipboard, je l'utilise pas car elle a tendance à me copier aussi
les numéros de ligne avec, ce qui n'est pas le but recherché.


Haut
 Profil  
 
 Sujet du message: Re: Utiliser less comme visionneur universel
MessagePublié: 07 Oct 2009 09:54 
Hors-ligne
Vraiment, particulièrement bavard(e)!

Inscrit le: 30 Avr 2009 10:45
Messages: 1491
eol a écrit:
je l'utilise pas car elle a tendance à me copier aussi
les numéros de ligne avec, ce qui n'est pas le but recherché.
Tu peux oublier ce que j'ai écrit, je me repenché sur la question et en ajoutant
Code:
:set mouse=a

dans mon ~/.vimrc, ça résout le problème.


Haut
 Profil  
 
 Sujet du message: Re: Utiliser less comme visionneur universel
MessagePublié: 07 Oct 2009 16:19 
Hors-ligne
Vraiment, particulièrement bavard(e)!
Avatar de l’utilisateur

Inscrit le: 28 Juil 2008 14:57
Messages: 1457
Localisation: Seine et Marne
Bien vu :smt023

_________________
La propriété intellectuelle n'a d'intérêt que lorsqu'elle porte mal son nom.


Haut
 Profil  
 
Afficher les messages publiés depuis:  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 10 messages ] 

Index du forum » Forums d'aide » Trucs et Astuces


Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : zoroastre et 3 invité(s)


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Aller vers:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduction réalisée par Maël Soucaze © 2010 phpBB.fr