Передать функтор в команду компиляции - PullRequest
0 голосов
/ 26 июня 2018

Я создал свою собственную функцию elisp, которая вычисляет строку compile-command каждый раз, когда я хочу скомпилировать весь проект (который обычно имеет make-файл в корне дерева каталогов проекта) или отдельный файл (который обычно имеет нет make-файла и использует неявные правила make).

Это позволяет мне автоматически находить местоположение недавно созданного, переименованного или перемещенного make-файла в дереве каталогов проекта, не закрывая и не открывая заново редактор, чтобы перезагрузить локальные переменные файла в начале проекта.

Реализация функции Emacs 'compile использует выражение (let ((command (eval compile-command))) body) в случае, если compile-command привязано к форме (например, compilation-read-command, как указано в документации compile-command).

Я хочу воспользоваться этим, чтобы получить динамическую строку compile-command, но я не знаю, как создавать эти "формы", инкапсулирующие вызов функции, как того требует eval. Все примеры, которые я нашел в документации emacs-lisp о eval, используют простые переменные, а не перехват функции.

Я пробовал что-то простое, как (setq-default compile-command 'my-compile-command-fun), но, конечно, это не сработало.

my-compile-command-fun не имеет параметров.

1 Ответ

0 голосов
/ 26 июня 2018
ELISP> (defun foo () "bar")
foo

ELISP> (foo)
"bar"

ELISP> (eval '(foo))
"bar"

Поэтому вы, вероятно, хотели это:

(setq-default compile-command '(my-compile-command-fun))
...