最近 vibe 了几个有趣的 Emacs package

gptel-magit(fork)

仓库:GitHub - roife/gptel-magit · GitHub

这是 ragnard/gptel-magit 的维护 fork。原版最主要的功能是根据 staged diff 生成 commit message;上游有一阵子没有更新了,我把一些散落的 PR 合进来,又补了几处自己使用时遇到的问题。

目前除了生成 commit message,还包括:

  • 可选 Conventional Commits、Zed、GNU 三种 prompt 风格;
  • 生成前可以补一段 rationale,告诉模型“为什么这样改”;
  • 流式插入结果;
  • 解释当前 diff section,也可以解释整个可见 diff;
  • 生成时在 buffer 和 mode line 显示状态;重新生成时只清掉可编辑的提交信息,保留 Magit 的注释部分。

在 Magit 的 commit transient 里,g 是直接生成,r 是先写 rationale 再生成。已经进入 git-commit buffer 后也可以用 M-g / M-r

(use-package gptel-magit
  :vc (:url "https://github.com/roife/gptel-magit")
  :hook (magit-mode . gptel-magit-install))

emms-ui

仓库:GitHub - roife/emms-ui: Emacs EMMS album, song list, and now-playing UI · GitHub

我一直在用 EMMS 听本地音乐,但它自带的 browser/playlist 对我来说更像“管理界面”,不太像平时打开音乐播放器时想看到的东西。emms-ui 就是在现有 EMMS 上增加了类 iTunes 的 UI。

常用入口是:

(emms-ui)              ; Albums
(emms-ui-list)         ; 歌曲列表
(emms-ui-now-playing)  ; Now Playing

Albums 和歌曲列表里按 / 可以用 regexp 过滤标题、artist、album、genre 和文件名。键盘和鼠标都能用,不过没有偷偷装全局按键。

要求 EMMS 的 cache、browser、player 已经配好。封面还需要一个能返回 large cover 的 cover backend。

liberime-regexp

一个类似 ace-pinyin, pinyinlib,但是依赖于 liberime

(use-package liberime-regexp
  :vc (:url "https://github.com/roife/liberime-regexp")
  :hook (liberime-after-start . liberime-regexp-enable))

;; 如果还想让 Avy 的字符跳转支持 Rime code:
(liberime-regexp-avy-mode 1)

ezf

ezf 的想法有点像 fzf,但筛选界面不在终端里自己画,而是借用已经运行的 Emacs server,以及我平时就在用的 Consult + Vertico。

比如:

printf '%s\n' alpha beta gamma | ezf
git branch --all | ezf --query main

shell 把候选交给 Emacs,选完以后结果再回到 stdout,所以可以继续放在管道或 command substitution 里。现在有 Fish、Bash、Zsh 三套前端,也带了三个 shell widget:Ctrl-T 选文件、Ctrl-R 搜历史、Alt-C 选目录并 cd。

17 个赞

什么时候更新博客(催更)

大佬忘了附带 ezf 链接了:

大佬,提个需求。能否把 Tab 补全也接管了?参考:

gptel-magit 已经无法正确获取信息了,fork的版本可以吗?

ezf 发完帖子才推送所以忘了放上去 hhhh

tab 补全其实已经可以接管了,用 bind -x '"\ex":ezf_dispatch_widget' 绑定,然后用 alt-x 就可以了

获取什么信息呢,我一直在频繁用这个 fork 版本,没出过问题

查了一下,应该是gptel-include-reasoning的原因,用这个库确实可以解决。

机器人时代,确实是想要什么就有什么了,emacs 变得更加强大和易用了

我用 doom emacs, 其 gptel module 自己配置了 gptel 和 gptel-magit. 有什么简单的办法不用 doom use 的 gptel-magit, 改用这个 fork?