0

我的初始化中有这段代码:

(defadvice kill-buffer (around show-diff-rephrase-question activate compile)
  "Prompt when a buffer is about to be killed."
  (case (read-char-choice
         "(s/k/q)? "
         (append "sSKkQq" nil))
    ((?s ?S)
     ad-do-it)
    ((?k ?K)
     ad-do-it)
    ((?q ?Q) nil))
  ad-do-it)

当我打电话eval-buffer评估它时它会起作用。但是,如果我编译初始化文件,我会得到

无效功能:(115 83)

如果我插入(case ...)sexp 的宏扩展,那么它作为编译文件工作。

4

1 回答 1

0

您需要(eval-when-compile (require 'cl))在此定义之前添加某处:case不是预定义的宏。添加(require 'cl)也可以,但是cl一旦编译了 init 文件就会导致不必要的加载,从而减慢启动速度。

于 2012-10-07T14:29:27.247 回答