如何为本地软件包生成和激活自动加载?


9

显然,并非所有本地/自定义/个人软件包都应正式发布,而仅仅从内置的软件包管理支持中受益,这样做是很愚蠢的。我想知道如何为本地软件包生成和激活自动加载?这类似于package.el从ELPA安装的软件包的处理方式。为了避免重新发明轮子,是否有办法“假装”某些本地目录(每个子目录都是本地/自定义/个人软件包)是ELPA?我也愿意el-get通过定制食谱支持这种情况。

我敢肯定,这项任务非常普遍,并且在高级级别使用Emacs的任何人迟早都会提到这一点。有人可以分享他们在这一领域的经验吗?


3
update-directory-autoloads可以独立于任何程序包管理器使用。
npostavs

@npostavs,我知道,但这不是递归的,在这种情况下,它不是一个全面的解决方案。当然,这还不够,我必须将其包装到自己的实现中。
Alexander Shukaev

1.您可以向提供Dirs的列表(例如,dir及其后代)update-directory-autoloads,以使其递归。2.您可以使用update-file-autoloads每一个你感兴趣的文件,无论是哪个目录的它是英寸
德鲁

仅供参考:package.el也是非递归的(即,它不支持子目录中带有源代码的软件包)。
npostavs

我在Linux上设置了本地MELPA。我对Windows没有任何好的解决方案。我真的希望emacs开箱即用地支持这种类型的事情。可能值得检查use-package看看是否可以。
eflanigan00

Answers:


7

正确的解决方案(IMO)是使用对这个用例有明确支持的程序包管理器。这就是straight.el我为此编写的。

您可以在README中阅读详细的文档,包括与其他软件包管理器的比较,因此,我将坚持使用straight.el如何解决特定问题的方法。

  1. 将您的存储库放在中~/.emacs.d/straight/repos/<my-repo>
  2. 使用加载

    (straight-use-package '(<my-package> :local-repo "<my-repo>"))
    
  3. 你完成了。每当您对源代码进行更改时,都将重做自动加载生成和字节编译(在下次Emacs启动时)。您还可以免费获得依赖管理,可选的版本控制自动化等功能。

  4. 当(如果)要发布软件包时,只需将其推送到某个地方并修改配方以指向该Git存储库即可。
  5. 如果愿意,也可以使用straight.elwith use-package(大部分时间只是语法糖)。

3

我在Linux上执行以下操作:

我通过克隆melpa设置了本地melpa存储库。

我修改了要指向本地软件包的配方。以下是local-melpa/recipies/ace-window

(ace-window
  :url "/home/my_home/.emacs.d/packages/ace-window/"
  :fetcher git)

然后从local-mepla类型make allmake recipies/ace-windowlocal-melpa/packages

然后make packages/archive-contents,将填充软件包列表。

然后使用下面的命令告诉emacs使用我的本地melpa

(setq package-archives '(("local-melpa" . "~/.emacs.d/packages/local-melpa/packages/")))

我还没有弄清楚如何make在Windows 上运行。但是我可以local-melpa在Linux上构建软件包并将其复制到Windows,而emacs可以正确理解并安装软件包。

这样的好处是,我可以通过删除~/.emacs.d/elpa/*目录并将任何自定义更新安装到任何程序包来随时重置。


也许奎尔帕也会引起人们的兴趣?
npostavs

我认为您是正确的npostavs。我必须坐下来看看。
eflanigan00

2

如果您已经用其他版本替换了已经安装的软件包,而缺少的只是自动加载文件,则可以使用package-generate-autoloads生成它:

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

当我需要将软件包降级到较早版本时,我发现使用update-directory-autotools会更容易。

实际上,我认为我还没有真正回答您的问题。我暂时将这个答案留在这里,但我的答案在这里更相关:https : //stackoverflow.com/questions/26348561/how-to-generate-autoloads-for-elpa-packages/50100170

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.