话说又没人尝试一下这个 straight.el 竞品呢?
我试了一下发现从straight 迁移很困难。原因在于它这个包安装和加载的异步处理。
用 straight 我大部分配置是这么个格式:
(straight-use-package 'foo)
(once '(:packages foo)
;; setups for foo
)
(straight-use-package 'bar)
(once '(:packages bar)
;; setups for bar
)
但是这在 elpaca 下面实现不了,因为 elpaca-process-queues
还没有执行。所以目前要么是包安装和包配置分开写 (有点烦琐),要么是用它那个 elpaca-use-package
(我本身不用 use-package) ,在这个问题有比较好的解决办法之前就不考虑了。
straight.el 有什么不好用的地方吗?
这个新的 elpaca 有啥优势?
Elpaca is an elisp package manager. It allows users to find, install, update, and remove third-party packages for Emacs. It is a replacement for the built-in Emacs package manager, package.el.
从简介看,elpaca是为了取代package.el,而不是use-package或者straight.el。
只是没把 straight 写上去而已,就是取代 straight 用的,这个作者也是 straight 目前的主要维护者。@aqua0210 相对 straight, elpaca 主要优势是:
- package 是异步安装的,比较直观的方面就是,不像straight 要先安装编译好一切才启动, 用 elpaca 是秒进 Emacs 再处理包队列。
- 代码量比较小,大概是 straight 的 40%
- 有个用来管理包的界面,功能比较齐全。
虽然我基本上用不到 3 那个界面。
取代 package.el 就是 straight.el 的竞品啦w
我看了下,似乎可以这样,把它例子里面 message 换成乃的配置
(elpaca foo (once ‘xxxx))
straight 一次只能安一个包,没有 ui,pin 某个包很麻烦。历史包袱太重了
我应该是试过,好像没那么简单。我依赖 once,但是 once 在包队列处理之前是不可用的。主要问题还是它必须用 elpaca 包一层,不像 straight 很单纯。 我可能会考虑把包安装和配置分开写,就是目前没看到这样做有什么好处。
分开很适合我。准备这周有空去试试看。现在还不知道它是如何管理load- path 的
啊,你看眼它的 elpaca-use-package 这个宏,在 1388 行。
`(elpaca ,order (use-package ,(elpaca–first order) ,@body))
它好像就是这样用的嘛…
如果能下载单个文件的话会想试试
是这样写的没错。我想表达的是,我迁移的话,需要把所有包的配置全部用 elpaca 包裹一遍,我觉得有点麻烦。
;; 这样可以
(elpaca (once :host github :repo "emacs-magus/once"))
(elpaca avy (once '(:packages avy) (message "hello")))
;; 这样不行
(elpaca (once :host github :repo "emacs-magus/once"))
(elpaca 'avy)
(once '(:packages avy) (message "hello"))
。。。换了几次包管理器之后,我觉得不如整个自己的melpa服务器,不愿意进或不达标的包都扔进去自己维护,就用package.el算了
给once加个advice
那意味着所有暴露在 elpaca 之外的东西都需要去 hack 一下。比如 bind-key, general, meow 之类的,不太现实。我估计就只能妥协全部用 elpaca 包一遍。
其实配置和包分开很清晰, 包就用 submodule 管理, 自己定义的配置用 git 管理文件内容就好。
Emacs这些包管理器之所以怎么都别扭的原因是, 他们希望通过语法糖来统一包和自定义配置, 为了优雅的语法糖, 反而把简单的管理工作弄得巨复杂无比。
个人观点供参考。
确实是这样,我曾经用了 use-package 很长时间,最后还是去掉了。我发现我其实就是需要个延迟加载的功能,别的我都不需要。他反而限制了我写配置的方式。
straight 比较接近我理想的包管理形态,它只负责安装,不管配置,提供的命令也够我用了。要分离也可以做到,我只是觉得写在一起比较方便,debug 的时候可以一起comment 掉。如果不是因为我的 emacs 配置本身就是一个 submodule, 我可能也考虑直接用 submodule 管理包了,recursive 的 submodule 对我来说有点绕,哈哈
等你换新电脑后,可能发现延迟加载也不需要了
嵌套submodule一点都不绕,最外层管理配置,里面那一层就是各种包的head hash