【发布时间】:2016-03-24 02:03:57
【问题描述】:
我一直在用emacs -q -l "init.el" 加载emacs,并试图在我的暂存缓冲区中启用自动完成功能。我一直在努力弄清楚为什么它不起作用,但意识到它必须与像这样加载 emacs 时的操作顺序有关 - 使用以下 init 文件进行快速测试:
(package-initialize)
(require 'auto-complete)
(ac-config-default)
(add-hook 'lisp-interaction-mode-hook
'(lambda ()
(auto-complete-mode t)))
当从命令行正常调用 emacs 时,显示完成工作。但是,如果我将其称为emacs -q -l init.el,则没有下拉完成。
问题:我怎样才能让这个钩子运行?
我尝试了after-init-hook 的变体,但似乎都没有。
【问题讨论】:
-
lisp-interaction-mode在启动过程的早期就在*scratch*中的startup.el中启动。因此,您需要直接为*scratch*缓冲区调用所需的函数,而不是依赖已经运行的lisp-interaction-mode-hook。请参阅startup.el(主分支)的第 1350 行:github.com/emacs-mirror/emacs/blob/master/lisp/startup.el 您可以通过在暂存缓冲区中评估(funcall initial-major-mode)来测试该理论,然后调用钩子并产生预期的效果。 -
我看到
after-init-hook实际上是在主分支startup.el的第 1344 行运行的,因此在逻辑上应该通过运行在第 1350 行的代码看到附加到该挂钩的内容。你在运行 Emacs 吗? -
我需要自己运行一些测试才能发布答案,也许其他人会在我之前得到它。我目前正在从事另一个与 Emacs 相关的爱好项目。 . .并在 Emacs 构建时检查 stackoverflow。 . .