在bach中执行N次emacs宏

时间:2016-09-19 13:30:12

标签: emacs macros batch-processing

我在mymacro.el文件中有一个Emacs宏(已命名/已保存)

我想在批处理模式下执行N次宏 像这样:

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

如何在lisp mymacro.el代码中添加N次?   :-)

2 个答案:

答案 0 :(得分: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.

要多次专门批量执行宏,从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