5

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

从那时起,一些 emacs 路径变量的设置超出了我在.emacs文件中所做的设置:两者都load-pathInfo-directory-list包中的内容有关。但我不明白这些定制是在哪里完成的。

让我们专注于Info-directory-list:在我的.emacs文件中,我没有设置它,所以它应该是 nil (这样以后info启动时,它会从Info-default-directory-list.dir中的结构info。我已经检查了自动加载文件,但它们没有Info-directory-list以任何方式设置 - 并且包pandoc-mode中没有其他 elisp 文件(特别是)这样做。

变量集在哪里Info-directory-list,如何重新控制该变量中的顺序?

4

1 回答 1

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 包系统初始化问题

至于Info-directory-list修改方式和原因,手册对此方面的评论(elisp) Multi-file Packages如下:

创建多文件包不如创建单文件包方便,但它提供了更多功能:它可以包含多个 Emacs Lisp 文件、一个 Info 手册和其他文件类型(如图像)。

[...]

如果内容目录包含一个名为 的文件dir,则假定这是一个使用install-info. *注意调用安装信息:(texinfo)调用安装信息。相关的信息文件也应该存在于内容目录中。在这种情况下,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))
于 2013-10-10T07:20:46.207 回答