我在mymacro.el文件中有一个Emacs宏(已命名/已保存)
我想在批处理模式下执行N次宏 像这样:
emacs --batch -l ~/mymacro.el test.txt -f MyFoo
如何在lisp mymacro.el代码中添加N次? :-)
答案 0 :(得分:0)
ErgoEmacs对此有一个good page。您要执行的操作是在使用argv
选项调用emacs后引用--script
变量。 (elt argv 0)
将为您指定您指定的第一个参数的值。 (elt argv 1)
会给你第二个参数,等等。
例如,假设您调用以下命令:
emacs --script ~/mymacro.el ~/test.txt 22
~/mymacro.el
。(elt argv 0)
将为您提供"~/test.txt"
。(elt argv 1)
将为您提供"22"
。(elt argv 3)
将为您提供nil
。您还可以使用变量command-line-args
,概述here.
要多次专门批量执行宏,从wiki上的this page借用,我们可以在文件run-mymacro.el
中创建一个脚本来运行mymacro:
;; 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%工作之前可能需要进行一些调整。
答案 1 :(得分:-1)
据我了解你的问题,你是否想要运行命令emacs --batch -l ~/mymacro.el test.txt -f MyFoo
N次?
如果是这样,如果您使用的是Linux,那么只使用Linux shell的for循环会更容易。
#!/bin/bash
for i in {1..N} # replace N by your wanted number
do
emacs --batch -l ~/mymacro.el test.txt -f MyFoo
done