[Writer] automatiser une série de rechercher-remplacer au sein d'une seule page

Bonjour, suite à un souhait discuté sur le forum linux-mint, nous en sommes arrivés à la piste “utiliser LibreOffice Writer avec des macros”.

Le souhait en question est de créer une programmation que je puisse déclencher pour rechercher-remplacer des chaînes de texte pur dans un code. Très concrètement, ce sont des pages html que je peaufine. Je récupère le code cracra et je le nettoie. Ajouter des espaces insécables devant les ponctuations hautes (un : va devenir un &nbsp;:), chasser les balises inutiles générées par les modifs de texte (un </strong><strong> sera supprimé, un <br></p> deviendra simple </p>, etc.) et j’en passe.

SublimeText (le logiciel que j’utilise pour afficher et modifier mon code html de façon graphique) ne semble pas proposer ce type de fonctions.
Mais LibreOfficeWriter pourrait faire le job, soit avec des macros, soit avec des fonctionnalités de l’extension AltSearch.

Je ne connais rien en macros.
Donc j’ai d’abord cherché côté AltSearch (https://extensions.libreoffice.org/en/extensions/show/70066) qui propose un mode “par lot” (ou batch-mode en anglais)

J’ai trouvé assez facilement comment enregistrer UN rechercher-remplacer (l’écrire dans les champs rechercher-remplacer de AltSearch, puis cliquer sur “enregistre le lot”)

Par contre, quand je vais ensuite dans la fenêtre “Lot >>”, je trouve un boutons pour faire des raccourcis clavier (“key shortcuts”) et un autre appelé “multiple execution” mais qui, apparemment, permet seulement d’appliquer UN SEUL LOT enregistré sur PLUSIEURS FICHIERS Writer. Et moi c’est l’inverse que je veux faire (appliquer PLUSIEURS LOTS, dans un ordre précis, mais sur UN SEUL FICHIER).

Pourtant, je lis ça dans la présentation de l’extension

Batch mode: search and replace parameters can be saved and loaded; it is possible to save several search and replace operations in a sequence and quickly execute the whole set later with one command. [v1.4]: Execute the batch with more opened text documents together

Vous comprenez comme moi que “quickly execute the whole set later with one command” signifierait “exécuter un set complet (de plusieurs lots enregistrés, sous-entendu) en une seule commande” ?

y a aussi une page d’aide → AltSearch - HelpAltSearch_en.html

et même traduite :wink:AltSearch - HelpAltSearch_fr.html

si c’est pas clair, ou qu’il manque une option :
AltSearch issues

par ex. One (possible) bug and 2 questions · Issue #72 · gitxpy/libreoffice-alt-search · GitHub

Bizarre ces pages d’aides. Lorsque je suis allé dessus, c’est leur code html qui s’affichait à l’écran (la solution a consisté à copier ce code, l’enregistrer dans un fichier htm sur l’ordi, ouvrir ce fichier dans Ffox).
.
à la lecture de ce que j’obtiens, j’ai l’impression que ce que je recherche à faire n’existe pas dans AltSearch et que le nom “traitement par lot” est un abus de langage.
.
Ce qui est appelé LOT ici, ce serait juste UN réglage de rechercher remplacer.
Exemple : je fais un rechercher remplacer de “Bonjour” par “Hello”, je l’enregistre, c’est cet enregistrement qu’ils appellent un LOT. Si je lui donne le nom “saluer en anglais” ce sera le LOT “saluer en anglais”.
Je peux en créer un autre qui cherche “Monsieur” et le remplace par “Madame”, je l’enregistre et l’appelle “change le genre” et me voilà avec un LOT “change le genre”
.
Maintenant, je peux aller réactiver l’un ou l’autre pour lancer ce rechercher-remplacer dans mon document ouvert. Mais seulement un à la fois. je ne peux pas créer un “super LOT” qui exécuterait les 2 LOT l’un après l’autre (en tout cas rien ne décrit la possibilité de faire cela).
.
Peut-être c’est là qu’il faut sortir la macro. Une macro qui irait chercher mes différents LOT un par un , selon l’ordre que je lui aurai indiqué, et qui les exécuterait toute seule.

convention de github, qui centré sur la gestion des codes source.

les fichiers sont distribués avec l’extension, donc accessible via le bouton “?”
image

mieux vaudrait regarder concrètement ce qui est fourni :

tous les paramètres de traitement par lot sont sauvés vers le fichier texte AltSearchScript.txt dans le dossier de l’utilisateur …/OpenOffice.org2/user/config/

libreoffice-alt-search/Code/Help/AltSearchScript_fr.txt at main · gitxpy/libreoffice-alt-search · GitHub :

...
[Name] Html [Sel.]	Première transformation en balises HTML pour les blocs sélectionnés    	 
  ; the same parameters for all 
  [Parameters] MsgOff Regular CurrSelection

  ; bold
  [Find][:::CharWeight::]
  [Replace]<b>&</b>
  [Command] ReplaceAll 

  ; italic
  [Find][:::CharPosture::]
  [Replace]<i>&</i>
  [Command] ReplaceAll         	

  ; Hyperlinks 

...

Ben j’avais lu tout ce que je trouvais dans cette page d’aide, mais ça ne me donnait aucune piste.
Si je viens demander des pistes sur le forum c’est aussi parce que je ne suis pas un connaisseur parfait du logiciel, et donc certains éléments me passent sous le nez même si je fais un effort pour observer…

Bref.

J’ai essayé de retrouver ces fameux fichiers AltSearchScript.txt en me disant que ce serait la piste suivante (piste qui me permettrait peut-être ensuite de créer une série de LOT qui s’enchaîne, même si aucune idée de comment faire ça).
Mais je ne suis pas parvenu à le retrouver.

Une recherche à la racine du disque, sur le nom du fichier, est sans résultat :

Je ne trouve pas de dossier prefs ou library ou je ne sais quoi qui pourrait contenir des paramètres par appli dans mon dossier utilisateur (home>mon_nom)

Sélection_059

Et j’ai aussi été fouiller dans usr>lib>libreoffice…

  • usr car je suppose que ça correspond à user=utilisateur
  • lib car je suppose que c’est pour library=bibliothèque=là où sont conservés les préférences
  • libreoffice car je ne trouve aucun dossier openoffice mais je trouve bien un dossier libreoffice ce qui semble plutôt logique puisque j’utilise libreoffice plutôt qu’openoffice (qui n’est plus maintenu), c’est même pour ça que j’ai choisi de poster sur le forum libreoffice alors que j’ai déjà un compte sur le forum openoffice. Même si je sais que les deux sont assez similaires.
    Et je ne vois rien qui ressemble à AltSearch (mais je n’ai pas non plus exploré tous les sous-dossiers.

Et une recherche par mot ne fait pas mieux :
Sélection_061

Pourtant, je suis persuadé que ce que tu pointes ici doit exister qqpart (mes préfs sont nécessairement enregistrées à un endroit). Mais soit sous un autre nom (peut-être que la version LibreOffice de AltSearch ne se comporte pas tout à fait comme celle de OpenOffice), soit dans un autre endroit. Et peut-être dans un endroit que la recherche par nom ne peut pas explorer (question de droits, ou alors c’est compressé dans un paquet).

OK, donc j’ai fini par trouver à ouvrir ce fichier txt (mais de façon stupide, j’y reviens ensuite), dont le chemin est
file:///home/((MonNom))/.config/libreoffice/4/user/config/AltSearchScript.txt
Ce qui répond à une partie de mes questions précédentes : il s’agit bien d’un dossier caché (reste maintenant à trouver comment le rendre apparent).

D’après ce que j’y vois, on peut effectivement créer des séries d’actions qui se suivent.
Si je prends les LOT que j’avais créés, on voit qu’ils ne comportent qu’une action.
Exemple :

[Name] hello devient bonjour
[Find]hello
[Replace]bonjour
[Parameters] MsgOff
[Command] ReplaceAll

Mais si on regarde d’autres pré-existants, on voit qu’ils en comportent plusieurs.

La stratégie consistera donc certainement, pour moi, à les créer un par un, puis à copier-coller chaque code obtenu dans un seul pour qu’ils s’exécutent les uns après les autres.

L’étape suivante sera donc de trouver comment accéder à ce fichier txt.

Car je reviens sur une autre action stupide de ma part. Donc j’ai cette fenêtre là, qui me dit que notepad marche pas. Je tente de taper kwrite comme ils disent, mais ça marche pas non plus.
Alors je tente sublime, puis sublimetext, mais ça ne marche toujours pas.
J’essaye de voir comment s’appelle l’éditeur de texte de LinuxMint. pas de bol, il s’appelle “éditeur de texte” dans l’interface graphique, autant dire que ce nom n’est pas terminal-compatible.
Un peu agacé par tous ces chausses-trappes, je tente de taper firefox et bingo, ça marche ! Waouh. Le truc s’affiche.
Oui mais sauf que Firefox c’est bien pour afficher, moins bien pour éditer.
Et du coup, il ne me propose plus sa fenêtre pour changer le nom de l’éditeur de texte. Et je vois dans l’aide qu’on peut le changer dans AltSearchEditor.ini qui est… au même endroit (inaccessible) que AltSearchScript.txt
Bref, on tourne en rond.

Mais moi je n’ai aucune idée, par ailleurs, de comment connaître le nom “terminal” d’une appli que je vois dans l’interface graphique. C’est sans fin !

Vous devriez essayer de lancer d’abord l’éditeur dans un terminal. Pour Linux Mint, il semble que ce soit xed, s’il s’ouvre alors c’est bon, sinon essayez avec d’autres comme gedit, etc.

[edit] je viens de lire sur un forum Mint que pour lancer xed, il faut écrire TextEditor

1 Like

un truc du genre Résolu le 28-12-18 [Résolu] Afficher fichiers cachés dans Thunar - Forum-Francophone-LinuxMint.fr

Ah, j’arrive ici en voyant une solution proposée (Merci Sophi) alors que je viens d’en trouver une autre.

Après recherche sur internet, j’ai vu que les propriétés d’un lanceur donnaient le “nom terminal” d’une appli.

Donc j’ai d’abord cherché un lanceur que j’avais créé, pour constater que son type est “texte” et son type détaillé est “desktop entry”.
De là, je fais une recherche sur “sublime” et je trouve le lanceur de Sublime Text (il y a peut-être plus simple quand on sait où sont rangés les lanceurs, mais autant je sais faire ça en un 10e de seconde sur mac (pomme-A = dossiers application), autant je n’en ai foutre aucune idée sur Linux ou Windows)
Bref, je trouve ce lanceur Sublime text.
Et donc son nom-terminal est, tenez vous bien … Tenez vous mieux car il pique un peu… /opt/sublime_text/sublime_text
oui oui oui, je n’aurai jamais trouvé ça tout seul !

Et pour modifier le fichier .ini, j’avais son url dans firefox. Je fais File > Open File et là je colle juste cette url. Et ça marche !!!

Bon. Maintenant il va falloir se retrousser les manches mais je crois que je suis arrivé à bon port.

C’était probablement (j’espère) le plus dur dans toute cette affaire (le reste ne sera que question de temps et de patience, mais au moins je sais où je vais).

Ouiiiii !
Génial

ça marche et l’ordre est respecté.

le code

[Name] blabla devient bliblo ET bliblo devient bloublou
;blabla en bliblo
[Find]blabla
[Replace]bliblo
[Parameters] MsgOff
[Command] ReplaceAll
; hello en bonjour
[Find]bliblo
[Replace]bloublou
[Parameters] MsgOff
[Command] ReplaceAll

remplace les blabla en bliblo puis les bliblo en bloublou (et donc, les blabla deviennent bloublou).

Merci, ça ouvre de belles perspectives.