hal*_*leo 5 emacs initialization path package-managers info
我最近转而使用emacs的包管理器packages.
此后,一些emacs的路径变量获取设置超出了我在做.emacs文件:两者load-path并Info-directory-list从包东西得到perpended.但我不明白这些定制在哪里完成.
让我们专注于Info-directory-list:在我的.emacs文件中我没有设置它所以它应该是nil(以便稍后info启动时,它初始化Info-default-directory-list.但是我的新包装已经初始化并且添加了一些包目录.这会弄乱我的dir结构info.我已经检查了自动加载的文件,但没有设置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
)
Run Code Online (Sandbox Code Playgroud)
您也可以调用package-initialize自己,前提是您确保预先设置了任何必要的与包相关的变量。有关详细信息,请参阅Emacs 24 包系统初始化问题。
至于如何修改以及为何Info-directory-list修改,手册对此方面的评论如下(elisp) Multi-file Packages:
多文件包的创建不如单文件包方便,但它提供了更多功能:它可以包含多个 Emacs Lisp 文件、Info 手册和其他文件类型(例如图像)。
[...]
如果内容目录包含名为 的文件
dir,则假定该文件是使用 制作的 Info 目录文件install-info。*注意调用安装信息:(texinfo)调用安装信息。相关的信息文件也应该存在于内容目录中。Info-directory-list在这种情况下,Emacs 会在激活包时自动添加内容目录 。
具体来说,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))
Run Code Online (Sandbox Code Playgroud)