Scripts nautilus

Niveau : Star Star Empty Empty Empty
Résumé : ~/.gno­me2/nau­ti­lus-scripts

Aujourd’hui par­lons un peu d’inter­face uti­li­sa­teur. Vous arrive-t-il sou­vent de lan­cer la même com­mande sur plein de fichiers ? Avez-vous une per­sonne de votre famille qui perd son temps à ouvrir des fichiers un par un pour faire une modi­fi­ca­tion dans cha­que ?

Si ces opé­ra­tions sont auto­ma­ti­sa­bles (cal­culs ope­nof­fice, modi­fi­ca­tion d’image, ajout d’une ligne de texte …) alors il y a un moyen pour les ren­dre acces­si­ble direc­te­ment depuis le navi­ga­teur de fichier. Pour cela, il suf­fit d’écrire un script et de le pla­cer dans ~/.gno­me2/nau­ti­lus-scripts. Essayer de bien le nom­mer car il appa­raî­tra tel quel dans le menu con­tex­tuel “Scripts” de nau­ti­lus.

Pour par­ler con­crè­te­ment, nous allons faire un outil de réduc­tion d’image dis­po­ni­ble direc­te­ment depuis le navi­ga­teur de fichier. Nous allons donc édi­ter le fichier ~/.gno­me2/nau­ti­lus-scripts/Reduc­tion­Pho­tos qui nous per­met­tra d’appe­ler ima­ge­ma­gick pour réduire la taille des pho­tos sélec­tion­nées (en ajou­tant un pré­fixe pour ne rien per­dre). Nous feront notre démo sur tous les fichiers sélec­tion­nés à la sou­ris pour bien mon­trer qu’on auto­ma­tise un com­por­te­ment d’uti­li­sa­teur “nor­mal”.

Le script reçoit ses infor­ma­tions dans des varia­bles d’envi­ron­ne­ment. La plus impor­tante dans notre cas est NAU­TI­LUS_SCRIPT_SELEC­TED_FILE_PATHS qui con­tient la liste des fichiers sélec­tion­nés sépa­rés par des retours à la ligne. Donc une petite bou­cle pour les trai­ter 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 ques­tions à poser à l’uti­li­sa­teur. C’est le moment d’uti­li­ser zenity. Un petit outil sympa, équi­va­lent de dia­log, mais bien mieux inté­gré dans gnome. Petite exem­ple avec la sélec­tion d’un nom­bre dans une inter­valle de 0 à 100 :

$ percent=$(zenity --scale --title="Choix du pourcentage" --text "Pourcents : " --value="50" --min-value="0" --max-value="100" --step="1")

Sim­ple non ?

Pour trai­ter les ima­ges en ligne de com­mande, vous con­nais­sez ima­ge­ma­gick. Voici la com­mande à uti­li­ser dans mon cas :

convert image1.jpg -quality 80 -resize 1200 image2.jpg

Voila, on a tou­tes les bri­ques 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

Vus : 319
Publié par Peck : 100