Emacs声称我引用了一个lambda,但我不是

时间:2014-01-16 04:57:31

标签: emacs clojure elisp emacs24

我在emacs中将其添加到我的init.el中

(add-hook 'emacs-startup-hook
  (lambda ()
    (kill-buffer "*scratch*")
    (ido-mode t)
    (global-visual-line-mode 1)))

(add-hook 'clojure-mode-hook
 (lambda ()
    (rainbow-delimiters-mode 1)))

现在emacs会自动将单词lambda变成符号 lambda ,但我不知道这是不是问题。当我启动emacs时,它会报告:

(lambda (line) ...) quoted with ' rather than with #'

但我没有引用lambda。如果我删除上面的代码行,错误就会消失。

为什么它会给我这个错误?

2 个答案:

答案 0 :(得分:3)

这不是代码中的错误,而是在Emacs提供的一些代码中,这些代码由您调用的其中一个函数调用。很可能是Emacs bug #11357

您的代码是合适的,除非sds指出您使用emacs-startup-hook过度复杂化了。大多数事情都可以在你加载.emacs时完成。

(ido-mode t)
(global-visual-line-mode 1)
(add-hook 'emacs-startup-hook
  (lambda ()
    (kill-buffer "*scratch*")))

我可以考虑使用emacs-startup-hook的唯一原因是,如果您经常重新加载.emacs ,则经常更改ido-mode或{ {1}}并且在重新加载global-visual-line-mode时不希望它们被还原。

有关从Emacs中获取更多信息而非杀死.emacs的其他方法,请参阅Automatically closing the scratch bufferPrevent unwanted buffers from opening

答案 1 :(得分:2)

  1. 警告中的lambda有一个line参数;你的钩子没有。您的init文件中有不同的引用lambda,或者这是字节编译器中的错误。

  2. 没有理由引用lambdas;你做对了。

  3. 我认为您没有以正确的方式使用emacs-startup-hook;只需将(ido-mode t)(global-visual-line-mode 1)放在init文件中。