2010-01-14 4 views
1

Je ne sais pas comment appeler une macro à l'intérieur d'une autre macro en évitant l'arrêt en cloche de la macro interne, car cela arrête la macro externe. En particulier, je dois faire deux recherches, et j'ai défini une dans une macro et l'autre doit rechercher des dossiers et appeler dans chaque dossier la macro interne, mais la macro externe ne peut pas continuer après l'arrêt de sonnerie de l'intérieur macroAppel de macros à l'intérieur de macros dans Emacs

Une solution?

Merci!

Répondre

1

Il y a probablement un moyen de le faire en modifiant ou en étudiant le comportement de isearch, mais votre meilleur pari est d'écrire la boucle interne en Lisp et d'exécuter la boucle externe comme une macro (ou l'écrire en Lisp) . Le système macro est génial, mais il est limité en puissance, et il semble que vous essayez de faire quelque chose de plus puissant que ce qu'il peut gérer (facilement). En fonction de ce que vous faites, vous pouvez également utiliser des expressions Lisp dans la chaîne de remplacement d'un remplacement d'expression rationnelle. À partir de GNU Emacs 22, vous pouvez utiliser les expressions Lisp dans la chaîne de remplacement en les échappant avec "\,".

Je suis sûr qu'il y a un moyen de réaliser ce que vous avez demandé (c'est Emacs, après tout), mais c'est probablement plus de problèmes que de valeur.

0

I a finalement trouvé une solution pour cela:

J'ai une macro 'a1' qui appelle macro 'Etat' jusqu'à ce qu'une erreur se trouve (avec Cu 0)

(fset 'a1 
    [escape ?< ?\C-u ?0 escape ?x ?e ?t ?a ?t return ]) 

etat macro:

(fset 'etat 
    [?\C-s ?I ?n ?i ?t ?i ?a ?l ? ?S ?t ?a ?t ?e C-right C-left ?\C- ?\C-a ?\C-w ?< ?e ?t ?a ?t ?> return ?\C-s ?(left backspace ?\C-k ?\C-a ?\C-s ?I ?n ?i ?t ?i ?a ?l ? ?S ?t ?a ?t ?e ?\C-a return up ?< ?/ ?e ?t ?a ?t ?> ?\C-a down]) 
+1

Veuillez supprimer la partie de question de votre réponse. Des questions devraient être posées aussi bien .. questions, pas de réponses ici sur SO. – ThiefMaster