将仿函数传递给编译命令

Pass functor to compile-command

我创建了自己的 elisp 函数,每次我想编译整个项目(通常在项目目录树的根目录中有一个 makefile)或单个文件时,它都会计算 compile-command 字符串(通常没有 makefile 并使用 make 的隐式规则)。

它允许我在项目的目录树中自动找到最近创建、重命名或移动的 makefile 的位置,而无需关闭并重新打开编辑器以在项目开头重新加载文件局部变量项目。

Emacs 的 compile 函数实现使用表达式 (let ((command (eval compile-command))) body) 以防 compile-command 绑定到表单(例如,compilation-read-command,如 compile-command 文档)。

我想利用它来获得动态 compile-command 字符串,但我不知道如何创建那些 "forms" 封装函数调用的方法,如 eval.我在 emacs-lisp 文档中找到的关于 eval 的所有示例都使用简单变量,而不是函数捕获。

我试过像(setq-default compile-command 'my-compile-command-fun)这样简单的东西,但当然没用。

my-compile-command-fun 没有参数。

ELISP> (defun foo () "bar")
foo

ELISP> (foo)
"bar"

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

因此您可能想要这个:

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