我最近改用了emacs的软件包管理器 packages

从那以后,除了我在.emacs文件中所做的设置之外,还设置了一些emacs路径变量:load-pathInfo-directory-list都包含了软件包中的内容。但是我不知道这些定制在哪里完成。

让我们专注于Info-directory-list:在我的.emacs文件中,我没有设置它,因此它应该为nil(以便稍后info启动时,它是从Info-default-directory-list初始化的。但是,随着我的新包装,它已经初始化了,并添加了一些软件包目录。这已经把dir中的info结构弄乱了,我已经检查了自动加载文件,但是它们没有以任何方式设置Info-directory-list-软件包中的其他elisp文件(尤其是pandoc-mode)都没有这样做。
Info-directory-list变量在哪里设置,如何重新控制该变量的顺序?

最佳答案

在评估了您的初始化文件之后,Emacs调用package-initialize(听起来很像)。初始化软件包后,Emacs将运行after-init-hook,因此,如果要操作在软件包初始化期间修改的变量,可以将以下内容放入初始化文件中:

(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中对该方面的手动注释:



[...]



具体来说,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))

10-06 08:08
查看更多