我用 elpa (package.el) 管理我的Emacs扩展.
我用下面的代码配置我的 auto-complete :
(eval-after-load 'auto-complete-mode
(progn
(message "Jolly said: auto complete is loaded.")
(require 'auto-complete-config)
(ac-config-default)
(setq ac-delay 0.5)
))
我认为这样配置之后,如果我没有安装 auto-complete, eval-after-load
内部的代码就不会被执行。但是,如果我真的没有安装 auto-complete, Emacs启动时会报错:File error: Cannot open load file, auto-complete-config
.
为什么,既然我没有安装auto-complete, auto-complete-mode的feature就不能被载入,为什么后面的代码还是被evaluate呢?
为了测试 eval-after-load
是否象我想得那样工作,我把auto-complete-mode
改成abcd-mode
,也就是:
(eval-after-load 'abcd-mode
(progn
(message "Jolly said: auto complete is loaded.")
(require 'auto-complete-config)
(ac-config-default)
(setq ac-delay 0.5)
))
因为 abcd-mode 根本不存在,所以我肯定它不会被载入。
重启Emacs,Emacs仍然抱怨:File error: Cannot open load file, auto-complete-config
.
看来,尽管abcd-mode没有被载入,但后面的代码仍然被执行了。
为什么?我对 eval-after-load 理解错了吗?
我想要的是:不管我有没有安装auto-complete,Emacs都不会报错;但是如果我安装了auto-complete,它要能接受我上面的配置。
我该用什么方法。
我现在是这么解决的,加了个条件判断。