2013-10-10 65 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