Emacs 如何为elpa软件包生成自动加载?
我已经使用elpa安装了许多软件包,并希望为它们适当地生成自动加载。为此,我在init文件中添加了:Emacs 如何为elpa软件包生成自动加载?,emacs,elisp,Emacs,Elisp,我已经使用elpa安装了许多软件包,并希望为它们适当地生成自动加载。为此,我在init文件中添加了: (apply 'update-directory-autoloads (directory-files package-user-dir t "[^\.].*")) 但是,我通过以下回溯获得失败: Debugger entered--Lisp error: (wrong-type-argument stringp nil) expand-file-name(nil "/build/buil
(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
生成的自动加载文件为nil
。您需要将其设置为指定要使用的输出文件。请参阅更新目录自动加载的文档字符串
TL;DR:您可能需要将
(包初始化)
添加到您的init文件中
您不需要为包生成自动加载。软件包管理器在安装时自动执行此操作。您将在~/.emacs.d/elpa/
目录的包目录中找到相应的-autoloads.el
文件
您也不需要要求每个包。但是,与其他所有Emacs Lisp文件一样,在自动加载声明可用之前,需要加载已安装软件包的自动加载文件
Emacs软件包管理器在“激活”软件包时自动加载软件包的自动加载文件。Emacs还会自动初始化软件包管理器并激活所有已安装的软件包,但只有在处理init.el
后才会激活
因此,在加载init.el
时,包(以及它们的自动加载)不可用,因此不能在init.el
中使用包
要解决此问题,您可以将所有设置推迟到init hook之后的
,或者通过在init文件顶部添加(package initialize)
来强制Emacs初始化包管理器。您可以使用包生成自动加载:
(package-generate-autoloads "async" "~/.emacs.d/elpa/async-1.9.3/")
它在内部调用更新目录自动加载。我发现,如果您手动将已安装的软件包替换为其他版本,并且希望以package.el在安装时的相同方式自动加载软件包,那么它将非常有用
另请参见此问题:除非您正在做一些特殊的事情,否则您不需要为ELPA软件包生成自动加载。这是在包安装过程中自动完成的。您可能需要将(包初始化)
添加到init.el
,以便实际加载包自动加载以在init.el
中使用。Srv19:另请参见,在Emacs-27中,我们对其进行了更改,以便在加载~/.Emacs
之前调用包初始化
。