2016-09-19 2 views
0

У меня есть макрос Emacs (названный/сохранены) в файле mymacro.elвыполнение N раз в Bach Emacs макрос

Я хотел бы выполнить N раз макрос в пакетном режиме так:

emacs --batch -l ~/mymacro.el test.txt -f MyFoo 

Вопрос, как добавить N раз в код lisp mymacro.el? :-)

ответ

-1

Насколько я понимаю ваш вопрос, это случай, когда вы хотите запустить команду emacs --batch -l ~/mymacro.el test.txt -f MyFoo N раз?

Если да, и если вы используете Linux, проще просто использовать for-loop оболочки Linux.

#!/bin/bash 
for i in {1..N} # replace N by your wanted number 
do 
    emacs --batch -l ~/mymacro.el test.txt -f MyFoo 
done 
+1

привет, но не возможно; на самом деле каждая текстовая строка изменяется макросом, затем макрос переходит в следующую строку. поэтому выполнение через 1 оболочку всегда будет перезапускать первую строку. Мне понравилось бы это: – PhilG

+0

из строки буфера emacs: ESC 10 my-macro ...... # Выполнить 10-кратный именованный/сохраненный макрос my-macro (код lisp в mymacro.el) – PhilG

0

ErgoEmacs имеет good page на этом. То, что вы хотите сделать, это ссылка на переменную argv после вызова emacs с опцией --script. (elt argv 0) даст вам значение первого аргумента, который вы указали. (elt argv 1) даст вам второй аргумент, и т.д.

Например, предположим, что вы вызовите следующую команду:

emacs --script ~/mymacro.el ~/test.txt 22 
  • Emacs будет вызывать сценарий ~/mymacro.el.
  • (elt argv 0) предоставит вам "~/test.txt".
  • (elt argv 1) даст вам "22".
  • (elt argv 3) предоставит вам nil.

Вы также можете использовать переменную command-line-args, изложенные here.

специально периодическое выполнение макрокоманды несколько раз, заимствование из this page на вики, мы можем создать сценарий для MyMacro запуска на файл , в файле run-mymacro.el:

;; Insert the macro here with `insert-kbd-macro` 
(fset 'mymacro [...]) 

(defun :() 
    (let ((file-name (elt argv 0)) 
     (repeats (string-to-int (elt argv 1)))) 
    (find-file file-name) 
    (condition-case nil 
     (execute-kbd-macro (symbol-function 'mymacro) repeats) 
     (error nil)) 
    (save-buffer)) 

Мы можем затем вызвать этот сценарий как так:

emacs --script ~/run-mymacro.el ~/test.txt 22 

Откроется файл ~/text.txt, запустите ваш макрос 22 раза и сохраните результат. Исходный файл должен быть сохранен в резервной копии с ~ в конце имени файла.

Это все непроверено, поэтому может потребоваться некоторая настройка до 100% работы.

+0

Большое спасибо Jack for your helpful ответ. на пути к его тестированию :-) – PhilG