我已经安装了许多使用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/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放在我的每一个包裹里吗?
发布于 2014-10-14 14:50:30
TL;DR:您可能需要将(package-initialize)添加到init文件中。
您不需要为您的包生成自动加载。包管理器在安装时会自动执行此操作。您将在您的-autoloads.el目录的包目录中找到相应的~/.emacs.d/elpa/文件。
您也不需要要求每个包。然而,与其他所有Emacs文件一样,安装的软件包的自动加载文件需要在包含在其中的自动加载声明可用之前加载(我知道,这让人困惑)。
Emacs包管理器在“激活”包时自动加载包的自动加载文件。Emacs还会自动初始化包管理器并激活所有已安装的包,但只有在处理您的init.el之后才会激活。
因此,在加载时,包(以及它们的自动加载)是不可用的,因此不能在init.el中使用包。
要解决这个问题,可以将所有设置推迟到after-init-hook,或者强制Emacs通过在init文件顶部添加(package-initialize)来初始化包管理器。
发布于 2018-04-30 12:04:18
您可以使用包生成-自动加载:
(package-generate-autoloads "async" "~/.emacs.d/elpa/async-1.9.3/")它在内部调用更新目录-自动加载。我发现如果您用不同的版本手动替换已经安装的包,并且希望像package.el在安装时一样生成它的自动加载程序,我发现它很有用。
发布于 2014-10-13 21:02:44
generated-autoload-file是nil。您需要将其设置为指定要使用的输出文件。请参见update-directory-autoloads的文档字符串。https://stackoverflow.com/questions/26348561
复制相似问题