Emacs (eval(…)在flychecker命令中不';不要使用命令符号

Emacs (eval(…)在flychecker命令中不';不要使用命令符号,emacs,elisp,Emacs,Elisp,是一个对源文件进行后台编译的emacs库。您可以在的帮助下添加自己的“checker”(编译某些文件的方法) 我正在尝试添加一个编译器,该编译器需要在当前文件的相对目录中查找一些文件。我有一个为我做这件事的函数,叫做(进程文件名)。在构建要为文件执行的终端命令时,可以使用(eval FORM)动态计算参数。以下是我的检查人定义的相关部分: (flycheck-declare-checker unity-csharp-flychecker "given a c-sharp file, look

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

我正在尝试添加一个编译器,该编译器需要在当前文件的相对目录中查找一些文件。我有一个为我做这件事的函数,叫做
(进程文件名)
。在构建要为文件执行的终端命令时,可以使用
(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)
?如何从内部访问源代码原件,以便将其传递给
(进程)
?非常感谢您的帮助。

这是正确的格式:

(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让我在
(过程…
之前删除报价。这给了我一个新的错误:

Error: (void-variable source-original)

因此,我深入研究了源代码,发现在评估之前没有符号替换。我假设,因为我们得到了符号,仅仅使用
缓冲区文件名
是行不通的,但我试过了,它做到了。我不知道这种方法是否会产生影响。

尝试在流程之前删除报价。
错误:(void variable source original)
这是另一个错误-不知道它是否更接近解决方案!fwiw,
eval表达式
给定的
(eval(concat“bob”“pete”)
产生与
(eval”(concat“bob”“pete”)
相同的结果。它们由于不同的原因产生相同的结果。第一种情况是在eval查看concat之前,将其作为函数进行评估。第二种情况评估concat作为eval的一部分。事实上,我认为正确的解决方案只是引用源代码原始符号,您可以尝试一下吗?我首先尝试了:
错误的类型参数:stringp,source original
好,那么您的答案就是最佳修复。这个原始的源代码可能是一个旧的方法,您已经发现了一个文档错误。我可以看到其他内置的checker在库中使用它,而不是在eval中。我已经让创建者知道至少要更新文档。谢谢你的帮助!