【问题标题】:In emacs who is setting Info-directory-list when including packages?在 emacs 中,包含包时谁在设置 Info-directory-list?
【发布时间】:2013-10-17 15:03:22
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: emacs path initialization package-managers info


    【解决方案1】:

    在评估完您的 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 制作的信息目录文件。 *笔记 调用安装信息:(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))
    

    【讨论】:

    • ps:我怀疑package-initialize是罪魁祸首,所以我在我的.emacs文件中将其注释掉,但我不知道emacs无论如何都会调用它...跨度>
    • @halloleo @phils 知道为什么Info-directory-list 包含同一包的许多条目吗?例如。我有 8 个 .emacs.d/elpa/magit-20150608.1139 条目。
    猜你喜欢
    • 1970-01-01
    • 2020-01-19
    • 2015-12-16
    • 2014-01-27
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 2019-07-25
    相关资源
    最近更新 更多