emacs --daemon с --batch и входным файлом
Я хотел бы создать сценарий, который просто очищает пробелы и вкладки для нескольких файлов в папке для меня. Я создал Bash-файл, среди прочего:
emacsclient -t -e '(progn (prelude-cleanup-buffer-or-region) (save-buffer-kill-terminal))' $FILE
Теперь это, похоже, не работает, так как интерпретирует ВСЕ аргументы файла как функции для запуска (поэтому $FILE выполняется как функция). (PS prelude-cleanup-buffer-or-region находится здесь)
Теперь то, чего я действительно хочу, --batch
описанный здесь (поскольку я на самом деле не хочу ничего отображать на экране), но это не одна из опций emacsclient. Причина, по которой я хочу использовать emacsclient, а не просто использовать emacs --batch
в том, что у меня много файлов запуска, поэтому я хочу, чтобы все это оставалось загруженным, иначе мой сценарий займет слишком много времени.
У кого-нибудь есть советы, как это сделать?
Заранее спасибо.
1 ответ
emacsclient -e означает оценивать формы lisp, не редактировать файлы
со страницы руководства
-e, --eval
do not visit files but instead evaluate the arguments as Emacs
Lisp expressions.
Я думаю, вы могли бы добавить (find-file "file")
к вашему списку форм для выполнения
Я только что попробовал этот фрагмент -
/opt/local/bin/emacsclient -e '(progn (find-file "./tmpfoo")
(end-of-buffer) (insert "ffff") (save-buffer))'
и он редактирует файл молча, как вы ожидаете.
Вы можете использовать оболочку и скрипт для расширения имени файла аргумента в список форм.
также не запускайте с ключом -t, -e не ожидает постоянного окна редактора, и вам не нужен kill-терминал. Клиент просто запустит ваш elisp и выйдет.
Я думаю, что я, вероятно, напишу функцию lisp, которая принимает аргумент имени файла, который я загрузил в emacs во время запуска, а затем просто вызову это с именем файла через emacsclient,
например FILENAME="somefile"; emacsclient -e "(now-do-my-thing $FILENAME)"