Un outil multi-fonctions ou une fonction par outil ?

Voilà un choix souvent difficile quand on souhaite améliorer l'efficacité de certaines tâches quotidiennes : soit on espère un logiciel capable de tout faire - ou presque, soit on préfère des programmes spécialisées, qui ne font qu'une chose mais le font bien. L'idéal ne serait-il pas un outil qui donne la possibilité à ses utilisateurs d'intégrer facilement l'usage d'autres logiciels, aux fonctionnalités plus ciblées ?

Prenons le cas du rechercher/remplacer dans Gedit. Je me « plaignais » il y a peu de la pléthore de plugins existant, plugins qui gagneraient en efficacité si les fonctionnalités étaient fusionnées en une seule extension. Avoir un tel plugin serait certainement dés plus utile, mais ne peut-on pas plutôt compter sur un logiciel pensé essentiellement pour ça ?! Ne serait-ce pas une solution plus efficace ? Il se trouve justement :

  • Que Gedit possède une fonctionnalité qui permet de lancer des outils externes.
  • Qu'il existe un logiciel qui remplit parfaitement la fonctionnalité chercher / remplacer avec expressions régulières : regexxer(1).

Imaginons donc que vous fassiez régulièrement des recherches et des remplacements dans les fichiers texte d'un répertoire. Pour effectuer cette tâche avec Regexxer, on clique sur l'icône du logiciel dans le menu des applications, on définit ensuite le répertoire que l'on souhaite inspecter, on précise le masque des fichiers texte (*.txt) et on clique sur le bouton « rechercher les fichiers ». On peut aussi faire tout cela d'un coup, en ligne de commande dans une console :

regexxer --pattern=*.txt /chemin/vers/le/répertoire/
Lancement de Regexxer dans un répertoire contenant des fichiers texte.

Il suffit d'enregistrer cette ligne de commande dans Gedit avec le gestionnaire d'outil externes(2). On peut aussi automatiser l'ouverture de Reggexer dans le répertoire du document courant ou inclure une fenêtre de requête demandant ce que l'on souhaite rechercher :

#!/bin/sh
reg=`zenity --entry --title="regex"`
if [[ "$?" != 0 ]]; then
    exit
fi
regexxer --line-number --pattern=*.txt --regex=$reg /chemin/vers/le/répertoire/
Lancement de Regexxer avec invite permettant de définir la chaîne de caractères à rechercher.

Et voilà votre éditeur de texte doté d'une puissante fonction de recherche et de remplacement à peu de frais. Au lieu de se creuser les méninges en essayant de réinventer la roue, réecrire des algorithmes que d'autres ont déjà écrits, autant s'appyuer sur ce qui existe déjà. On peut ainsi très facilement enrichir le comportement de Gedit en le liant à d'autres logiciels. Cela évite que le programme ne se transforme en usine à gaz à force d'y ajouter des fonctionnalités...

L'absence de recherche multiligne dans Regexxer peut tout de même être pénalisante. L'unique solution trouvée - pour le moment - est d'utiliser les fonctionnalités de recherche d'un logiciel comme Eclipse. Il suffit pour cela de créer un projet vide et d'importer les documents que l'on souhaite traiter en les liant.