2013-10-10 67 views
5

我最近转向使用emacs的包管理器packages在包含软件包时设置Info-directory-list的emacs中?

从那时起,一些emacs路径变量的设置超出了我在我的.emacs文件中的范围:load-pathInfo-directory-list都会与来自软件包的东西进行交互。但我不明白其中这些定制完成。

让我们集中于Info-directory-list:在我.emacs文件我不设置它,所以它应该是零(这样以后当info启动时,它从Info-default-directory-list初始化但是与我的新包装它已经intialised和一些包。目录添加这打乱了我的dir结构info我已经检查了自动加载的文件,但没有设置Info-directory-list以任何方式 - 。而在包装没有其他的elisp文件(pandoc-mode尤其是)这样做

Info-directory-list变量集在哪里,我如何重新控制这个变量中的订单?

回答

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文件,信息手册以及其他文件类型(如图像)。

[...]

如果内容目录包含一个名为dir文件,这是 假定与install-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)) 
+0

PS:我曾经怀疑'包initialize'是罪魁祸首,所以我评论它在我的.emacs文件,但我不知道emacs在任何情况下都会调用它... – halloleo

+0

@halloleo @phils任何想法为什么'Info-directory-list'包含许多相同包的条目?例如。我有8个条目用于'.emacs.d/elpa/magit-20150608.1139'。 – user3156459