讨论一下 Borg

确实,package-vc 还不成熟,use-package 也还没跟进支持。

请教各位大佬:最近用borg安装hyperbole, Assimilate时产生一些错误,不知道怎么排查。 .gitmodules文件的基础配置:

[submodule "hyperbole"]
	path = lib/hyperbole
	url = [email protected]:emacsmirror/hyperbole.git
	load-path = .
	load-path = kotl

产生如下错误

Error loading autoloads: (file-missing Cannot open load file No such file or directory hact)

于是加入 no-byte-compile = hact.el

[submodule "hyperbole"]
	path = lib/hyperbole
	url = [email protected]:emacsmirror/hyperbole.git
	load-path = .
	load-path = kotl
    no-byte-compile = hact.el

但是出现了以下错误:

In toplevel form:
lib/hyperbole/hactypes.el:19:2: Error: Symbol’s function definition is void: htype:symbol

我又加入了 no-byte-compile = hactypes.el

[submodule "hyperbole"]
	path = lib/hyperbole
	url = [email protected]:emacsmirror/hyperbole.git
	load-path = .
	load-path = kotl
    no-byte-compile = hact.el
    no-byte-compile = hactypes.el

出现的错误和上面的一致。

我没有继续往下排查,因为这样的问题以后应该还会遇到。

目前想法是类似的包都不要byte-compile,但不知应该在gitmodules里加入什么参数,才能使整个包都不编译,因为它的子包数量有10几个,手动添加到 no-byte-compile 是一种办法,但有点儿费劲。

我阅读了borg 文档,没有找到答案,求指点。

修改:更正编译信息

请问下,borg如何加载由package中makefile生成的autoloads.el?

不知道现在你还需不需要解法,不过还是说一下,可以帮一下有同样问题的人 :joy:

这是因为 borg 安装时会自动调用 borg-compile,可以自己定义下 build-step,不让 borg 默认执行 borg-compile:比如说直接啥都别干,生成个 autoload 就完事了。

[submodule "hyperbole"]
	path = lib/hyperbole
	url = [email protected]:emacsmirror/hyperbole.git
	load-path = .
	load-path = kotl
	build-step = borg-update-autoloads

详细内容可以自己找 info 里的 (borg)Top > Variables

3 个赞

(borg-activate "package") 的时候会自动加载的

我当时用了土办法,一直往下找,最终忽略了三个有问题的文件:

no-byte-compile = hact.el
no-byte-compile = hactypes.el
no-byte-compile = hsys-youtube.el

学到了~多谢大佬 :grinning:

是这样的,有的package里的makefile提供自动生成autoload file的命令,但是这个文件的命名与borg生成的autoload file名称不一样。后来我发现只要多加一个build-step将文件名改为borg默认的那种形式就可以被borg加载了

最新的 emacs master 分支已经在 use-package中支持 :vc 关键字。

1 个赞

请教下使用 git submodule 的大佬,为什么在 magit 中执行了 git submodule update --recursive --remote以后,有一些包会被标记 detached? 能否禁用这个行为,保留子模块在原来的分支( main/master)

如下图,是执行后的结果:

我希望在magit 中操作更新字模块中的包,效果和终端中执行git submodule foreach git pull 一样,不会改变分支。

已经解决:
原来这个是 git submodule update --remote 的默认行为,只要加 --merge 参数就可以达到目的。

这样升级时我只要在 magit 中按 o -M -U C-u u 就可以升级全部的包了,不加C-u就只升级选中的包。

参考这里:

  1. Why is my Git Submodule HEAD detached from master? - Stack Overflow
  2. git-submodule manual
2 个赞

多了个 u , 应该改为这样? o -M -U C-u u

更新:楼上已更新。

:+1:已经修改,多谢

新技能学到手,谢大佬分享

迁移到Borg后,时间从原来的1.6s变成了30s,是否需要进行什么配置,为什么会这么慢,是否因为autoload的原因?我看你的配置是全部写到init.el中,我这边是按原来的放到lisp下,分各个模块init-xxx.el,在lisp下大概十多个,除了这个差别,没看出其他差别

是否使用borg只能使用一个文件放配置,不能像这样搞成多个配置文件,分模块存放?

同样使用Borg 也拆分了文件,但是没有启动时间增加的情况,建议用benchmark看看启动时间占比

恩,看了下,竟然是dired的问题 :joy:

find-dired 就是个内置包,怎么会出现这种情况呢

(use-package fd-dired
  :when (executable-find "fd"))

这个导致的问题,去掉后由24s降到4s。这个配置在之前package管理中没有问题

是不是初始化的时候扫描什么目录了?

不晓得,先注释掉后面再慢慢排查,多谢指导