URL: https://linuxfr.org/users/yekcim/journaux/mes-nautilus-scripts Title: Mes nautilus scripts Authors: yeKcim Date: 2015年01月22日T22:35:47+01:00 License: CC By-SA Tags: nautilus, nemo, bash, linux_mint, framasoft et script Score: 62 Il était une fois ================= La possibilité de modifier des fichiers dans le navigateur idoine à l’aide de scripts m’a toujours beaucoup intéressé. Il y a longtemps j’avais d’ailleurs modestement participé au projet [g-scripts](http://g-scripts.sourceforge.net/). Les nautilus scripts me plaisent car il suffit de créer un nouveau fichier dans un dossier spécifique pour que celui-ci soit disponible, un seul fichier, c’est simple (du coup je n’aime pas tellement nautilus-actions ou la solution de thunar... mais c’est une histoire de goût...). Enfin, comme chacun utilise son langage de prédilection, on en trouve partout sur la toile, dans des forums, des forges, des sites ou sections de sites dédiés... C’est en lisant ces scripts que j’ai compris l’intérêt du terminal, que j’ai appris à utiliser la ligne de commande, que j’ai appris quelques notions de code. Les premiers scripts que j’ai écrit permettaient de convertir des [fichiers audio](http://g-scripts.sourceforge.net/nautilus-scripts/Multimedia/Audio/WOM_audioconverter), de [tourner des images](http://g-scripts.sourceforge.net/nautilus-scripts/Multimedia/Image/Rotate-Mirror_pictures), d’exporter des [svg en png](http://g-scripts.sourceforge.net/nautilus-scripts/Multimedia/Image/svg2png),... des besoins simples mais que les scripts rendaient très faciles d’accès. Un jour, suite à une mauvaise manipulation ou je ne sais quelle maladresse, combinée à une sauvegarde défaillante, j’ai constaté que mon dossier de scripts était vide. Pas très grave puisque pour convertir les fichiers audio j’utilise [SoundConverter](http://soundconverter.org/), je ne fais plus beaucoup de conversion svg→png, pdfmod est très pratique pour manipuler les pdf,... Oui mais... Mais finalement c’est le retour des svg à convertir, des redimensionnements et conversions d’images,... au départ je lance gimp mais c’est un peu _too-much_ pour une conversion png→jpg. Deuxième étape, je recherche les vieux réflexes dans un `man convert`, et finalement un jour je fini par me dire, qu’il est temps de refaire le plein de scripts. La désillusion ============== Quelques téléchargements de packs de scripts et un peu de tri plus tard, je montre à un collègue linuxien cette possibilité qu’il ne connaissait pas, je partage avec lui ma sélection et là c’est le drame... Il n’utilise pas nautilus mais nemo or certains scripts dont la fonctionnalité m’intéresse utilisent la variable $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS qui a été renommée pour commencer par $NEMO dans le gestionnaire de fichiers de Mint. Qu’à cela ne tienne, mon collègue n’est pas démotivé pour si peu, un sed plus tard et cette ignoble incompatibilité ne sera plus qu’à vague souvenir. Le script ne fonctionne toujours pas, il n’a pas installé les dépendances du scripts, il n’y avait pas pensé et rien ne lui indiquait que c’était le problème. Il y a également certains points qui m’énervent, comme par exemple, le fait que certains scripts écrasent les fichiers d’entrée, d’autres créent les fichiers de sortie dans des sous-dossiers,... pas facile de s’y retrouver et on obtient assez rapidement une perte de fichier original lors d’une conversion si on ne fait pas attention. Je dois alors me rendre à l’évidence, ces scripts ne me conviennent pas vraiment. Je commence donc à écrire mes propres scripts et au fur et à mesure de leur mise en place, j’établis des règles de structure. Je ne suis pas un expert en code, mes scripts ne sont pas optimisés mais mes règles ont une logique qui me convient parfaitement (manquerait plus que ça...). Mes choix techniques ==================== Une fonction = un script ------------------------ De nombreux scripts pour redimensionner des images ouvrent une boîte de dialogue pour sélectionner une dimension parmi une liste pré-établie. C’est très pratique mais ce n’est pas cette solution que je souhaite : Cette liste de dimensions je peux l’avoir directement sans passer par zenity (qui est la solution la plus couramment utilisée), il suffit que je clique directement sur le script correspondant au redimensionnement de mon choix. Ainsi s’il me manque une taille, il suffit que je copie-colle et modifie très légèrement un script, au passage cela m’évite un clic. Un script compatible avec le shell ---------------------------------- Les scripts sont très pratiques à utiliser depuis le navigateur de fichier mais ce n’est pas parce qu’ils sont commodes ainsi qu’ils ne doivent pas être fonctionnels dans le shell. Je n’utiliserai donc pas NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ou son équivalent NEMO. Si le script est lancé depuis un terminal, les éventuels messages s’afficheront dans celui-ci, le fichier de sortie sera alors placé dans le dossier courant plutôt que dans le dossier du fichier d’entrée... En cas d’erreur, on ne laisse pas l’utilisateur sans information ---------------------------------------------------------------- Des notifications si le format du fichier d’entrée n’est pas compatible avec la fonctionnalité, des notifications si une dépendance manque, des notifications si le nombre de fichiers d’entrée n’est pas adéquat,... Ces notifications doivent se faire quelque soit le système de l’utilisateur donc j’ai écrit [une fonction dédiée](https://github.com/yeKcim/my_nautilus_scripts#notifications). Pour vérifier les dépendances, de même c’est [une fonction qui est utilisée](https://github.com/yeKcim/my_nautilus_scripts#dependencies-check). Le type de fichier via mime-type -------------------------------- Beaucoup de scripts se contentent de récupérer les 3 dernières lettres du nom de fichier pour déterminer son type, d’autre un peu plus précautionneux récupèrent les caractères situés après le dernier point (`${arg##*.}`) ce qui évite déjà les problème de jpeg par exemple. Je préfère une solution à base de `mimetype -bM "$arg" | cut -d "/" -f2` (ou f1 or sans cut selon le besoin...). Cela me semble plus sûr... On écrase jamais le fichier d’entrée ------------------------------------ J’ai choisi de toujours créer un fichier de sortie différent du fichier d’entrée pour éviter tout accident, toute perte de data. J’aurais pu faire le choix de procéder préalablement à un `cp "1ドル" "1ドル~"` mais pour l’instant ce n’est pas mon choix. Des noms de scripts contenant des symboles pour simplifier la compréhension --------------------------------------------------------------------------- Un million de fois je me suis demandé si je devais utiliser flip ou flop pour faire une symétrie axiale verticale. D’ailleurs une symétrie verticale c’est quand l’axe de symétrie est vertical ou quand le déplacement se fait du haut vers le bas ? Et puis (grâce au bépo), j’ai découvert qu’il y a pleins de caractères qui sont accessibles sur un clavier, par exemple altgr+shift+6 du pavé numérique permet d’obtenir "⇒". En mettant, de tels caractères dans les noms de scripts tout me semble alors plus clair : ![scrennshot](https://raw.githubusercontent.com/yeKcim/my_nautilus_scripts/master/screenshot.png) Des noms de scripts contenant des variables ------------------------------------------- J’ai un script pour tourner les images de 90°. Si je veux celui qui permet de les tourner de -90° je trouve dommage de devoir copier-coller le script et de parcourir ce nouveau fichier à la recherche de la (ou les) variable(s) à retoucher. Dans le nom du script, il y a une variable (que je place entre crochet), si je veux le script qui tourne de -90° j’ai juste à copier-coller le script qui fait la rotation à 90° et à nommer cette copie comme il le faut. Je peux même faire un simple lien symbolique plutôt qu’une copie si cela me chante. Utilisation de l’anglais uniquement ----------------------------------- Les traductions demandent des contributeurs réguliers et un suivi continu. J’ai fait le choix de tout écrire en anglais et d’écrire des phrases les plus courtes et claires possibles pour les notifications. Avec mes compétences linguistiques dans la langue de Chèque-C’pire je suppose que les fautes vont bon train mais cela n’a pas d’importance puisque ces scripts ont une visibilité quasi nulle. Y a plus qu’à... ============== J’ai décidé d’héberger [mes scripts sur github](https://github.com/yeKcim/my_nautilus_scripts) (je voulais le faire sur un équivalent libre genre framagitlab mais quand j’ai vu que [framasoft utilise github](https://github.com/framasoft)...). Du coup, j’apprends à utiliser git pour l’occasion, c’est sympa (mais pour l’instant je galère dès que je dois utiliser autre chose que add, commit, push ou pull). Je ne sais même pas comment gérer des branches, de multiples utilisateurs... Pour l’instant mes scripts ne respectent pas tous mes propres règles car j’établis celles-ci au fur et à mesure des idées et de l’écriture mais c’est en bonne voie. Par exemple, pour le moment je n’ai pas de procédure pour vérifier si le fichier de sortie existe et incrémenter son nom, je n’ai pas non plus de vérification préalable des droits d’écriture... c’est en cours. Si vous avez des idées, des remarques, des conseils, je suis preneur, n’hésitez pas à me dire ce que vous pensez de cette initiative. Bon, déjà, première remarque : Ce texte était censé être un journal de présentation pas un roman...

AltStyle によって変換されたページ (->オリジナル) /