Flycheck是一个emacs库,用于对源文件进行后台编译。您可以在manual的帮助下添加自己的“检查程序”(编译某些文件的方法)。
我正在尝试添加一个编译器,需要在当前文件的相对目录中找到一些文件。我有一个为我做的功能,称为(process filename)
。构建终端命令以执行文件时,您可以动态使用(eval FORM)
计算参数。这是我的检查员定义的相关部分:
(flycheck-declare-checker unity-csharp-flychecker
"given a c-sharp file, looks for the unity file and then tries to build it using mdtool."
:command '("mdtool" "build"
(eval '(process source-original)))
...)
source-original
是一个特殊符号,在执行时替换buffer-file-name。
不幸的是,当我尝试使用检查程序时,我收到此错误:
Invalid result from evaluation of (quote (process source-original)): (process source-original)
我在这里错误地使用(eval)
吗?如何从内部访问source-original,以便将其传递给(process)
?任何帮助非常感谢。
答案 0 :(得分:1)
这是正确的形式:
(flycheck-declare-checker unity-csharp-flychecker
"given a c-sharp file, looks for the unity file and then tries to build it using mdtool."
:command '("mdtool" "build"
(eval (process buffer-file-name)))
...)
感谢Bruce Conner让我在(process ...)
之前删除了引用。这给了我一个新的错误:
Error: (void-variable source-original)
所以我挖掘了源代码,看到评估前没有符号替换。我假设因为我们被赋予了只使用buffer-file-name
的符号不起作用的符号,但我尝试了它并且确实如此。我不知道这种方法是否会产生影响。