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% работы.
привет, но не возможно; на самом деле каждая текстовая строка изменяется макросом, затем макрос переходит в следующую строку. поэтому выполнение через 1 оболочку всегда будет перезапускать первую строку. Мне понравилось бы это: – PhilG
из строки буфера emacs: ESC 10 my-macro ...... # Выполнить 10-кратный именованный/сохраненный макрос my-macro (код lisp в mymacro.el) – PhilG