Scripts nautilus
Niveau :
Résumé : ~/.gnome2/nautilus-scripts
Aujourd’hui parlons un peu d’interface utilisateur. Vous arrive-t-il souvent de lancer la même commande sur plein de fichiers ? Avez-vous une personne de votre famille qui perd son temps à ouvrir des fichiers un par un pour faire une modification dans chaque ?
Si ces opérations sont automatisables (calculs openoffice, modification d’image, ajout d’une ligne de texte …) alors il y a un moyen pour les rendre accessible directement depuis le navigateur de fichier. Pour cela, il suffit d’écrire un script et de le placer dans ~/.gnome2/nautilus-scripts. Essayer de bien le nommer car il apparaîtra tel quel dans le menu contextuel “Scripts” de nautilus.
Pour parler concrètement, nous allons faire un outil de réduction d’image disponible directement depuis le navigateur de fichier. Nous allons donc éditer le fichier ~/.gnome2/nautilus-scripts/ReductionPhotos qui nous permettra d’appeler imagemagick pour réduire la taille des photos sélectionnées (en ajoutant un préfixe pour ne rien perdre). Nous feront notre démo sur tous les fichiers sélectionnés à la souris pour bien montrer qu’on automatise un comportement d’utilisateur “normal”.
Le script reçoit ses informations dans des variables d’environnement. La plus importante dans notre cas est NAUTILUS_SCRIPT_SELECTED_FILE_PATHS qui contient la liste des fichiers sélectionnés séparés par des retours à la ligne. Donc une petite boucle pour les traiter tous d’un coup :
echo -n "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | while read in_file do process_file $in_file done
Alors il se peut que le script ait des questions à poser à l’utilisateur. C’est le moment d’utiliser zenity. Un petit outil sympa, équivalent de dialog, mais bien mieux intégré dans gnome. Petite exemple avec la sélection d’un nombre dans une intervalle de 0 à 100 :
$ percent=$(zenity --scale --title="Choix du pourcentage" --text "Pourcents : " --value="50" --min-value="0" --max-value="100" --step="1")
Simple non ?
Pour traiter les images en ligne de commande, vous connaissez imagemagick. Voici la commande à utiliser dans mon cas :
convert image1.jpg -quality 80 -resize 1200 image2.jpg
Voila, on a toutes les briques pour faire le script.
#!/bin/bash # # Name : ReductionPhoto # Author : peck # Licence : GPLv2 # set -x ################################################# # FONCTIONS ask_questions () { # question communes à tous les fichieirs quality=$(zenity --scale --title="Choix de qualite" --text "Qualite" --value="75" --min-value="0" --max-value="100" --step="1") width=$(zenity --entry --title="Largeur de l'ecran" --text "Largeur" --entry-text="1200") } reduct() { # options de reduction options="-quality $quality -resize $width" echo $options >> /tmp/debug # sauter les non-images if identify "$1" >/dev/null then # convertir convert "$1" $options "$2" fi } ################################################# # PROGRAMME if [ $# -eq 0 ]; then zenity --error --title="Erreur" --text="Pas de fichier selectionne pour la conversion" exit 1 fi if which convert 2>/dev/null then true else zenity --error --title="Erreur" --text="ImageMagick n'est pas installe" exit 1 fi # c'est parti ask_questions echo -n "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | while read in_file do ibase=$(basename "$in_file") idir=$(dirname "$in_file") out_file="$idir/r_$ibase" # on fait gaffe aux fichiers qu'on ecrase if ls "$out_file" then if zenity --question --title="Fichier existant" --text="Remplacer r_$ibase ?" then reduct "$in_file" "$out_file" fi else reduct "$in_file" "$out_file" fi done # et ouala zenity --info "Reduction terminee"
À vous de faire tout ce qui vous intéresse, le reste de la doc se trouve dans la faq du site