Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Lisp
Lisp Forum d'entraide sur la programmation en langages fonctionnels Lisp et Common Lisp
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 12/03/2011, 06h01   #1
crespo12
Invité de passage
 
Homme
Enseignant
Inscription : mars 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : mars 2011
Messages : 6
Points : 2
Points : 2
Par défaut emacs macro latex

Bonjour,

je suis débutant en emacs+latex, je voudrais savoir si je peux créer la fonction suivante:
- soit sous forme de macro
- ou en lisp dans mon .emacs

Une fois que j'ai sélectionné à la souris plusieurs mots, je voudrais que ma fonction rajoute des balises personnelles autour de ces mots.

Exemple:
sélection multiple
------------------------------------------------------------
bla bla bla motSelectionné bla
bla bla bla bla motSelectionné bla
------------------------------------------------------------
résultat après appel fonction ou macro
------------------------------------------------------------
bla bla bla \tx{motSelectionné} bla
bla bla bla bla \tx{motSelectionné} bla
------------------------------------------------------------

Merci d'avance.
crespo12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 02h24   #2
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 962
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 962
Points : 1 148
Points : 1 148
Quand ton mot est sélectionné (supposons que le curseur soit à la fin de la sélection), tu peux taper ton accolade fermante. Ensuite, C-x C-x te ramène au début de la sélection où tu peux taper ton "\tx{". Refais C-x C-x pour remettre le curseur à sa place.

Tu peux donc en faire une macro.
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 20h28   #3
crespo12
Invité de passage
 
Homme
Enseignant
Inscription : mars 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : mars 2011
Messages : 6
Points : 2
Points : 2
Bonjour,

en fait, je voulais d'abord sélectionner tous les mots à encadrer par \tx{} (plusieurs dizaines dans un document) puis appliquer une seule fois la macro.

Cela sous-entendait une sélection multiple "à la word" avec CTRL enfoncé, mais je viens de me rendre compte que ça ne marche pas sous Emacs...

Je viens de trouver une package multi-select.el, je vais essayer de l'utiliser en ce sens...

Merci pour la réponse.
crespo12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 21h24   #4
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 962
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 962
Points : 1 148
Points : 1 148
Au final, le but est de faire du remplacement, donc M-x replace-string est le plus simple.

Code :
1
2
3
M-x replace-string
motSelectionné
\tx{motSelectionné}
Si besoin, il y a aussi query-replace (ou M-%) qui demande confirmation pour chaque occurrence, replace-regexp (qui permet de remplacer selon une expression rationnelle) et query-replace-regexp (ou C-M-%).
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2011, 16h19   #5
crespo12
Invité de passage
 
Homme
Enseignant
Inscription : mars 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : mars 2011
Messages : 6
Points : 2
Points : 2
Par défaut solution

Bonjour,

merci pour la réponse, mais en fait je n'ai pas été assez précis dans mon explication, je remets donc mon exemple:

Exemple:
sélection multiple
------------------------------------------------------------
bla bla bla Selections_1 bla
bla bla bla bla selections_2 bla
------------------------------------------------------------
résultat après appel fonction ou macro
------------------------------------------------------------
bla bla bla \tx{Selections_1} bla
bla bla bla bla \tx{selections_2} bla
------------------------------------------------------------

avec Selections_ des sélections de un ou plusieurs mots et pas les mêmes...
c'est pourquoi M-x replace-string ne suffit pas.

J'ai réussi à obtenir le résultat voulu en utilisant la fonction multi-select-wrap-perso du package multi-select.el dans la fonction suivante:

(defun insert-tx-select () "insert \tx sur selection"(interactive)
(multi-select-wrap-perso "\\tx\{" "}"))

Pour obtenir multi-select-wrap-perso, j'ai modifié une fonction du package qui insérait un préfixe et un suffixe autour de la multi-sélection mais demandait les deux arguments de manière intéractive.
crespo12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 12h26   #6
jack-ft
Membre Expert
 
Inscription : avril 2008
Messages : 800
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 800
Points : 1 809
Points : 1 809
Citation:
Envoyé par crespo12 Voir le message
Bonjour,

merci pour la réponse, mais en fait je n'ai pas été assez précis dans mon explication, je remets donc mon exemple:

Exemple:
sélection multiple
------------------------------------------------------------
bla bla bla Selections_1 bla
bla bla bla bla selections_2 bla
------------------------------------------------------------
résultat après appel fonction ou macro
------------------------------------------------------------
bla bla bla \tx{Selections_1} bla
bla bla bla bla \tx{selections_2} bla
------------------------------------------------------------

avec Selections_ des sélections de un ou plusieurs mots et pas les mêmes...
c'est pourquoi M-x replace-string ne suffit pas.

J'ai réussi à obtenir le résultat voulu en utilisant la fonction multi-select-wrap-perso du package multi-select.el dans la fonction suivante:

(defun insert-tx-select () "insert \tx sur selection"(interactive)
(multi-select-wrap-perso "\\tx\{" "}"))

Pour obtenir multi-select-wrap-perso, j'ai modifié une fonction du package qui insérait un préfixe et un suffixe autour de la multi-sélection mais demandait les deux arguments de manière intéractive.
Bonjour,

il existe une manière qui me semble plus habituelle pour un emacsien:
elle consiste à faire une macro (ou une fonction à lier à une clé) qu'on appelle sur chaque sélection.
par exemple: sélectionner le premier mot puis définir la macro par:
Code :
C-x ( C-w \tx{ C-y } C-x )
puis sélectionner autre chose et exécuter la macro par
L'inconvénient par rapport à la sélection multiple, c'est qu'il faut retaper "C-x e" pour chaque nouvelle sélection.
)jack(
jack-ft est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 12h27.


 
 
 
 
Partenaires

Hébergement Web