Emacs 29+ debug 新思路

Emacs 29+ 支持 emacs --init-directory="/path/to/folder" 完全可以替换 Chemacs2 的多配置切换。而且无需 hack。

Git branch 可以让一个文件夹的内容在不同分支之间切换。

二者结合,就可以在一个文件夹内 debug 不同的配置了,而且 debug 完还能 merge。

6 个赞

如果能结合 git 切换 branch 和 restart-emacs 就能快速 debug 了。

记录一下自己的想法:

第一步,获取所有本地 branch 的名称和当前 branch 名称,保存为列表,传递给 restart-emacs

第二步,M-x restart-emacs 先读取列表,以供选择

第三步,根据 branch 名称选择是否切换 branch 并重启 Emacs。

1 个赞

@suliveevil 这个方法是不是只能从终端打开,手滑关掉终端,emacs是不是立马没了?

我不清楚有没有哪个参数可以使emacs启动后立马和终端分离,二者不再互相受影响

你可能需要把它写进脚本里。不过我不知道怎么实现。

我是搭配自己的 Alfred Workflow 用的:

不用唤起 macOS 终端.app,可以同时使用 自己的 Emacs 配置和 Spacemacs 配置。

1 个赞

我去瞄一眼脚本。

OT 一下:

之前我也有类似疑问:我的chromium 白名单了一个扩展,使扩展可以在chromium里所有地方生效,包括 chrome web store, settings, flags。但得在终端里跑,终端不能杀,一杀chromium也会退出:

以whitelist surfingkeys为例,它的extension id是 gfbliohnnapiefjpjlpjnehglfpaknnc

/Applications/Chromium.app/Contents/MacOS/Chromium --whitelisted-extension=bkcjldpnlggemjeagiogdihnnikkhngd

我没这类问题,Command+Q 和 M-x kill-emacs 都只会退出当前配置的 Emacs 不会把另一个配置的 Emacs 杀掉。

https://www.bing.com/search?q=shell+nohup

1 个赞

学到了。

试了一下nohup,跑其他命令都没问题。 但跑emacs一直停留在 “appending output to nohup.out” 状态。

把 stdout 设成 /dev/null

1 个赞

感谢!可以了。 :smile_cat:

@LdBeth 请教,对于没有用nohup跑起来的长进程,有办法使终端与进程脱钩么?

比如:emacs --debug-init 跑起来的emacs我觉得没什么问题,想使用这个新的emacs, 但又不想被终端挂着。

先 C-z 挂起就行。

感谢!C-z 确实挂起了。但关闭终端时,用emacs --debug-init跑起来的emacs窗口还是会被关闭,这个有办法也解除么?

bash 的话用 bg 命令,自己网上查用法吧,我用的 elvish 默认关闭时是不会 kill child process 的。

1 个赞

解决啦,小总结一下:

  1. emacs --debug-init
  2. 使用 C-z 挂起 (process自动成为 job 1)
  3. disown 命令:分离 job 1,使其继续运行不受终端状态干扰。

环境: macOS, iTerm2/fish

多谢指路 :grinning: @LdBeth