[tips] 如何在 spacemacs 中管理自己 hack 的包?

今天也遇到这个问题,spacemacs 可以很好的解决这个问题。

推荐做法是在 private layer 中这样声明你的本地包:

(my-package :location (recipe :fetcher local))

这样 spacemacs 会利用 quelpa 安装本地包,并满足包的依赖关系(另外一种声明本地包的方式 :location local 是不考虑依赖的)。这种方式同样适用于多文件包

如果你修改的包已经被 spacemacs 内建的 layer 初始化了,没有关系,在 .spacemacs 的 dotspacemacs-additional-packages 变量中加入(以 spaceline 为例):

(spaceline :location (recipe :fetcher github :repo "et2010/spaceline"))

然后删除掉原来安装过的包,重启 spacemacs 即可。

联动贴:

1 个赞

我有一个大胆的想法,将 org-plus-contrib 也用这种方法管理,这样就可以放心大胆的 hack 而不用来回打补丁了。

于是就有一个问题,怎样在 github 上建立一个自动更新的 Org-mode git 镜像?或者干脆用本地包,等下试试。

我感觉 layer 应该是用来做某一项专门任务的;如果是是hack别人的代码,满足自己的极个性化需求,可以用 spacemacs|use-package-add-hook / with-eval-after-load;如果是别人的代码有 bug,最好的还是给它提 issue,等它修复

其实 spacemacs 中也用这种方式加入很多 hack 过的包。有的包早已年久失修,fork 然后修改是最可行的办法。有的要修改的函数太复杂,没法用 advice,又不想在自己的代码中复制整个函数,用这种方式可以保持自己的配置干净。

org-plus-contrib 不容易搞啊,有用 quelpa recipe 安装 org-plus-contrib 成功的吗?

Edit:

还真有:

感谢分享,但多文件包需要develop分支。 https://github.com/syl20bnr/spacemacs/pull/8718