讨论一下 Borg

:+1:多谢 ,命令行操作其实也挺方便的,不一定都用 magit

这个和手动git submodule add相比有什么优势吗?

我使用下来觉得主要好处有以下几点:

  1. 通过 epkg 可以更加方便地查看包之间的依赖关系(这个包也可以单独使用)
  2. 更加方便地添加和删除包
  3. 更加方便编译包,生成 autoloads 文件,配合 use-package 实现懒加载,从而减少 Emacs 启动时间。Linux 和 Mac 可以控制在 1s 左右,Windows 就别想了。

才刚开始用,其他的好处还有待慢慢体验。

borg有点像半自动。需要自己考虑的:

  1. 包的依赖
  2. 具体配置

其他像生成 autoloads,byte-compile,make info,添加load-path都不用考虑。borg-assimilate下载后编译可以发现少的依赖。还可以用submodule.DRONE.variable作好些微调。

比如最近看到一个包 org-appear好玩,直接 M-x borg-assimilate ,它就自动下载、编译,也没报错。看看它的readme,只有 (add-hook 'org-mode-hook 'org-appear-mode) 一行必须,就直接加在原来的 org配置下。就这么简单,好些都不用考虑。删除包只要 borg-remove

需要微调的:

  1. 包的目录不符合borg约定的:在目录、在lisp目录下、在elisp目录下。如 all-the-icons,就在 .gitmodules文件中用 load-path调整:
[submodule "all-the-icons"]
	path = lib/all-the-icons
	url = https://github.com/domtronn/all-the-icons.el.git
	load-path = .
	load-path = data
  1. 不想编译的。如没用 helm,则在 org-ref中:
[submodule "org-ref"]
	path = lib/org-ref
	url = https://github.com/jkitchin/org-ref.git
	no-byte-compile = org-ref-helm-bibtex.el
	no-byte-compile = org-ref-helm-cite.el
	no-byte-compile = org-ref-helm.el
  1. 要使用自己的fork,直接在 .gitmodules下修改url。

暂时遇到的主要是这几种。我向作者提的像doom一样生成一个大的 autoloads.el,这样包装好后就可以不依赖 git, 对于windows用户也可以提高点速度。对于我要离线同步配置来说,真是太方便了。不用其他工具diff了。

1 个赞

请问下像 flyspell-correct 这个包,提供了很多功能,但我只用到默认的那个,根本不想安装他所有的依赖。应该怎么处理才能使得 ivy 和 helm 不参与编译并加入autoload?

目前我是强行编译,虽然有报错,但能正常使用。

这个包的依赖如下:

 flyspell-correct 

[-] Dependencies:
 |-[+] avy-menu  github  avy-menu
 |-[+] buttercup  github  buttercup
 |-[+] emacs  builtin  subr-x
 |-[+] flyspell  builtin  flyspell
 |-[+] helm  github  helm
 |-[+] ido  builtin  ido
 |-[+] ivy  github  ivy
 `-[+] popup  github  popup

前面这个就行。把不要的列在这个里面

1 个赞

请教一下 Borg 的 .gitsubmodule 中能够对不同平台设定不同的编译参数吗? 比如我要安装 mu4e 的时候,只想在 macOS 上定义特殊的编译步骤,在 Linux 平台用不同的参数。

[submodule "mu4e"]
        path = lib/mu4e
        url = [email protected]:djcb/mu.git
        build-step = test -e ./configure || autoreconf -i
        build-step = ./configure
        build-step = make -C mu4e > /dev/null
        build-step = borg-update-autoloads
        load-path = mu4e

执行 make all 进行对 .emacs.d 进行 native compile 时, PC-Doctor Module 吃了 50G 内存,有人遇到这个问题吗?是否是正常情况?

/.emacs.d/etc/borg/config.el 中加入了下面的设置:

(when (native-comp-available-p)
  (setq borg-compile-function #'native-compile))

使用 Borg 的朋友,如果启用了预先进行 native-compile 的要注意下,这个功能有个问题:

虽然已经生成了.eln 文件,但加载的函数并不是 native-compile 的

在 Borg 还没解决之前,建议还是用默认的 byte-compile。

参考这个讨论:

更新:
目前作者已经修复了这个 bug,但是还没全部完成,我尝试了 work 分支,已经可用了。

请问在windows上怎么编译,最近想换成29试试。

编译 Emacs 还是 Borg 编译包?

Window 10 上编译 Emacs 29 可以参考下我的Blog

Borg 编译的话,我这边需要通过 git 的命令窗口进入 mingw64 环境才能用 Borg 下面的 make 命令。

谢谢,我试下。

能麻烦你用 emacs -Q 看下有没有 read-symbol-positions-list 这个变量吗?我编译出来的版本没有这个变量了。helpful 这个包依赖它。

这个变量没了。你需要升级 helpful 到最新版本,应该就能解决了。

大佬,load-path 这个字段哪里有介绍啊,我看文档里似乎没提啊?

C-h v load-path可以看到说明

我的意思是在 .gitmodules 文件中,使用 load-path 字段有没有相关说明?

文档在这里:

最近从 package.el 换到了 borg ,总体来说体验不错。

只是有个小问题,删除包的时候怎么方便删除其依赖?

Borg 是半自动,依赖要自己管理,要自己手动通过 epkg 查询包的依赖关系,然后执行 M-x borg-remove 移除不想要的包。