Вызов макросов внутри макросов в Emacs - PullRequest
1 голос
/ 14 января 2010

Я не знаю, как вызвать макрос внутри другого макроса, чтобы избежать остановки звонка внутреннего макроса, потому что это останавливает внешний макрос. В частности, я должен сделать два поиска, и я определил один в одном макросе, а другой должен искать в некоторых папках и вызывать в каждой папке внутренний макрос, но внешний макрос не может продолжаться после остановки внутреннего звонка. макросъемки.

Любое решение?

Спасибо!

Ответы [ 2 ]

1 голос
/ 14 января 2010

Вероятно, есть способ сделать это, изменив или изучив поведение isearch, но лучше всего написать внутренний цикл в Lisp и запустить внешний цикл как макрос (или записать его также в Lisp). Макросистема великолепна, но ее мощность ограничена, и звучит так, будто вы пытаетесь сделать что-то более мощное, чем оно может справиться (легко).

В зависимости от того, что вы делаете, вы также можете использовать выражения Lisp в строке замены регулярного выражения замены. Начиная с GNU Emacs 22, вы можете использовать выражения Lisp в строке замены, экранируя их с помощью "\,".

Я уверен, что есть способ достичь того, о чем вы просили (в конце концов, это Emacs), но это, вероятно, больше проблем, чем стоит.

0 голосов
/ 09 июля 2012

Я наконец нашел решение для этого:

У меня есть макрос «a1», который вызывает макрос «etat», пока не будет найдена ошибка (с C-u 0)

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

макроэтат:

(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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...