Я создал свою собственную функцию 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
не имеет параметров.