flychecker命令中的(eval(...))不适用于命令符号

时间:2013-07-19 08:25:58

标签: emacs elisp

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)?任何帮助非常感谢。

1 个答案:

答案 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的符号不起作用的符号,但我尝试了它并且确实如此。我不知道这种方法是否会产生影响。