2

Flycheck是一个对源文件进行后台编译的 emacs 库。您可以在手册的帮助下添加自己的“检查器”(编译某些文件的方法)。

我正在尝试添加一个编译器,该编译器需要在当前文件的相对目录中找到一些文件。我有一个函数可以为我做这件事,叫做(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是一个特殊符号,它在执行时替换缓冲区文件名。

不幸的是,当我尝试使用检查器时,出现此错误:

Invalid result from evaluation of (quote (process source-original)): (process source-original)

我在这里使用(eval)不正确吗?如何从内部访问源代码,以便将其传递给(process)?非常感谢任何帮助。

4

1 回答 1

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

于 2013-07-19T10:52:46.140 回答