我最近转而使用emacs的包管理器packages
。
从那时起,一些emacs路径变量的设置超出了我在.emacs
文件中所做的设置:load-path
和Info-directory-list
都得到了包中的东西。但我不明白 这些自定义的地方。
让我们专注于Info-directory-list
:在我的.emacs
文件中我没有设置它应该是nil(所以稍后当info
启动时,它从{{1}初始化然而,对于我的新包装,它已经初始化,并且添加了一些包目录。这会混淆Info-default-directory-list
中的dir
结构。我检查了自动加载文件,但它们没有设置{ {1}}以任何方式 - 包中没有其他elisp文件(特别是info
)。
Info-directory-list
变量集在哪里?如何重新控制此变量中的顺序?
答案 0 :(得分:3)
在评估你的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 Package System Initialization Problems。
至于Info-directory-list
的修改方式和原因,(elisp) Multi-file Packages
中有关该方面的手册评论:
创建多文件包比单个文件更不方便 包,但它提供了更多功能:它可以包含多个Emacs Lisp文件,Info手册和其他文件类型(如图像)。
[...]
如果内容目录包含名为
dir
的文件,则为 假设是使用install-info
创建的Info目录文件。 *注意 调用install-info:(texinfo)调用install-info。相关的 信息文件也应该出现在内容目录中。在这 例如,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))