在 emacs 中,谁在包含软件包时设置 Info-directory-list



我最近切换到使用 emacs 的包管理器packages

从那以后,一些 emacs 路径变量被设置得超出了我在.emacs文件中所做的:load-pathInfo-directory-list 都得到了包中的东西。但我不明白这些定制在哪里完成。

让我们专注于Info-directory-list:在我的.emacs文件中,我没有设置它,所以它应该是 nil(以便稍后当info启动时,它从Info-default-directory-list初始化。但是,对于我的新包装,它已经被初始化并添加了一些软件包目录。这在info中弄乱了我的dir结构.我已经检查了自动加载文件,但它们没有以任何方式设置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
  )

您也可以自己调用package-initialize,前提是确保事先设置了任何必要的与包相关的变量。有关详细信息,请参阅 Emacs 24 软件包系统初始化问题。

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

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

[...]

如果内容目录包含一个名为 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))

最新更新