2010-01-14 2 views
1

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

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

Спасибо!

ответ

1

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

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

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

0

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

У меня есть макрос «a1», который вызывает макрос «переворот» до обнаружен ошибки (с Cu 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]) 
+1

Пожалуйста, удалите вопрос из своего ответа. Вопросы также следует задавать. Вопросы, а не ответы здесь на SO. – ThiefMaster

Смежные вопросы