我最近切换到使用 emacs 的包管理器packages
。
从那以后,一些 emacs 路径变量被设置得超出了我在.emacs
文件中所做的:load-path
和 Info-directory-list
都得到了包中的东西。但我不明白这些定制在哪里完成。
让我们专注于Info-directory-list
:在我的.emacs
文件中,我没有设置它,所以它应该是 nil(以便稍后当info
启动时,它从Info-default-directory-list
初始化。但是,对于我的新包装,它已经被初始化并添加了一些软件包目录。这在info
中弄乱了我的dir
结构.我已经检查了自动加载文件,但它们没有以任何方式设置Info-directory-list
- 并且软件包中的其他 elisp 文件(特别是pandoc-mode
(都没有这样做。
Info-directory-list
变量设置在哪里,如何重新获得对该变量中顺序的控制?
在评估了你的 init 文件之后,Emacs 调用了 package-initialize
(它听起来像是这样(。初始化包后,Emacs 运行after-init-hook
,所以如果你想操作在包初始化过程中被修改的变量,你可以在你的 init 文件中放置以下内容:
(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 软件包系统初始化问题。
至于修改Info-directory-list
的方式和原因,手册(elisp) Multi-file Packages
中对此进行了评论:
创建多文件包不如创建单文件包方便 包,但它提供了更多功能:它可以包含多个 Emacs Lisp 文件、信息手册和其他文件类型(如图像(。
[...]
如果内容目录包含一个名为
dir
的文件,则为 假定是用install-info
制作的信息目录文件。 *注意 调用安装信息:(texinfo(调用安装信息。 相关的 信息文件也应存在于内容目录中。 在此 在这种情况下,Emacs 会自动将内容目录添加到Info-directory-list
包何时激活。
具体来说,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))