【问题标题】:How to generate autoloads for elpa packages?如何为 elpa 包生成自动加载?
【发布时间】:2014-12-08 12:34:29
【问题描述】:

我已经使用 elpa 安装了许多软件包,并希望为它们适当地生成自动加载。为此,我添加到我的初始化文件中:

(apply 'update-directory-autoloads (directory-files package-user-dir t "[^\.].*"))

但是,我遇到以下回溯失败:

Debugger entered--Lisp error: (wrong-type-argument stringp nil)
  expand-file-name(nil "/build/buildd/emacs24-24.3+1/debian/build-x/lisp")
  autoload-generated-file()
  autoload-find-generated-file()
  update-directory-autoloads("/home/survivor/.emacs.d/elpa/ahg-20140818.130")
  eval((update-directory-autoloads "/home/survivor/.emacs.d/elpa/ahg-20140818.130") nil)
  eval-last-sexp-1(nil)
  eval-last-sexp(nil)
  call-interactively(eval-last-sexp nil nil)

我尝试这样做的方式是错误的吗?我应该为我的每个包裹都输入require 吗?

【问题讨论】:

  • 除非您正在做一些特别的事情,否则您不需要为 ELPA 包生成自动加载。这是在软件包安装期间自动完成的。
  • 您可能需要将(package-initialize) 添加到您的init.el,以实际加载包自动加载以在您的init.el 中使用。

标签: emacs elisp


【解决方案1】:

您可以使用 package-generate-autoloads:

(package-generate-autoloads "async" "~/.emacs.d/elpa/async-1.9.3/")

它在内部调用 update-directory-autoloads。我发现如果您手动将已安装的包替换为不同的版本,并希望像 package.el 在安装时那样生成它的自动加载,它很有用。

另请参阅此问题:https://emacs.stackexchange.com/questions/33627/how-to-generate-and-activate-autoloads-for-local-packages/41274

【讨论】:

    【解决方案2】:

    TL;DR:您可能需要将(package-initialize) 添加到您的初始化文件中。

    您不需要为您的包生成自动加载。包管理器会在安装时自动执行此操作。您会在~/.emacs.d/elpa/ 目录的包目录中找到对应的-autoloads.el 文件。

    您也不需要要求每个包。然而,与所有其他 Emacs Lisp 文件一样,安装包的自动加载文件需要加载(我知道这很令人困惑),然后才能使用其中包含的自动加载声明。

    Emacs 包管理器在“激活”包时会自动加载包的自动加载文件。 Emacs 还会自动初始化包管理器并激活所有已安装的包,但只有您的init.el 被处理之后。

    因此,在您的 init.el 加载时,包(以及它们的自动加载)可用,因此您不能在 init.el 中使用包。

    要解决这个问题,您可以将所有设置推迟到 after-init-hook,或者通过在 init 文件顶部添加 (package-initialize) 来强制 Emacs 初始化包管理器。

    【讨论】:

    【解决方案3】:
    1. 我认为安装包应该注意自动加载,至少是那些在包本身中声明的(即要生成的自动加载)。 (我可能错了。如果是这样,有人会纠正我。)

    2. 您的错误消息来自 generated-autoload-filenil。您需要设置它以指定要使用的输出文件。查看update-directory-autoloads的文档字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      相关资源
      最近更新 更多