我最近改用了emacs的软件包管理器 packages
。
从那以后,除了我在.emacs
文件中所做的设置之外,还设置了一些emacs路径变量:load-path
和Info-directory-list
都包含了软件包中的内容。但是我不知道这些定制在哪里完成。
让我们专注于Info-directory-list
:在我的.emacs
文件中,我没有设置它,因此它应该为nil(以便稍后info
启动时,它是从Info-default-directory-list
初始化的。但是,随着我的新包装,它已经初始化了,并添加了一些软件包目录。这已经把dir
中的info
结构弄乱了,我已经检查了自动加载文件,但是它们没有以任何方式设置Info-directory-list
-软件包中的其他elisp文件(尤其是pandoc-mode
)都没有这样做。Info-directory-list
变量在哪里设置,如何重新控制该变量的顺序?
最佳答案
在评估了您的初始化文件之后,Emacs调用package-initialize
(听起来很像)。初始化软件包后,Emacs将运行after-init-hook
,因此,如果要操作在软件包初始化期间修改的变量,可以将以下内容放入初始化文件中:
(add-hook 'after-init-hook 'my-after-init-hook)
(defun my-after-init-hook ()
"After package initialisation."
;; do something with Info-directory-list
)
您还可以自己调用
package-initialize
,前提是确保事先设置了所有必需的与包相关的变量。有关详细信息,请参见Emacs 24 Package System Initialization Problems。至于
Info-directory-list
的修改方式和原因,在(elisp) Multi-file Packages
中对该方面的手动注释:[...]
具体来说,
package-activate-1
可以做到这一点:(when (file-exists-p (expand-file-name "dir" pkg-dir))
;; FIXME: not the friendliest, but simple.
(require 'info)
(info-initialize)
(push pkg-dir Info-directory-list))