使用 popwin 的 popup-to-buffer 替代默认的 display-buffer 来带来较好的 compilation 体验。

这篇介绍应该是通用的适用于各种编译型语言的 compilation mode.

这里只是以 rust 语言的 rustic-compilation-mode 为例。

默认,在 rustic 下面运行 Ctrl+C Ctrl+C TAB 编译代码时,是会在当前 emacs frame 下面新开一个 window, 然后显示编译错误,这是因为默认 rustic 使用的 display method 是 display-buffer.

(defcustom rustic-compile-display-method 'display-buffer
  "Default function used for displaying compilation buffer."
  :type 'function
  :group 'rustic-compilation)

就我而言,这不是一个很好的体验:

执行编译 => 编译结果 buffer 在新的 window 被打开 => 因为光标没动,仍需手动切换光标到这个新的 window => Meta + P, 光标移动到第一条编译错误 => 回车,跳转回代码 buffer => C-x 0 来关闭 compilation buffer.

在请教过群里的 @Youmu , 使用 popwin 中的 popup-to-buffer 来替换默认的 display-bufffer, 带来针对编译过程更好地交互体验。

(with-eval-after-load 'popwin
  (setq rustic-compile-display-method 'pop-to-buffer)
  (add-to-list 'popwin:special-display-config '(rustic-compilation-mode :noselect t)))

执行编译 => 编译结果 buffer 在新的 popup 窗口打开,光标自动切换到新 buffer => Meta + P, 光标移动到第一条编译错误 => 回车,跳转回代码 buffer => 任何时候,按下 Ctrl + G总是会编译之前 popup 的编译窗口

这里还有一个新的类似于 popwin 的 shackle, 我还没试过它, 也许它比 popwin 更好呢。

另外, 群里的 @anb 给了一个可能更好地选择。

我用的不多,但是常用的一个快捷键是C-x `,会跳转到代码里第一个出错的地方,所以感觉不需要到编译错误的窗口中

突然发现是啊,比较现代的计算机语言(例如 rust), 配合 flycheck, lsp, 可以达到非常好的编程体验,以前素要运行编译才能发现的很多问题,现在在编辑过程中,已经实时的提醒给了用户。

事实上, 就算没那个 红色下划线的提醒, “Ctrl +`” 也会自动将光标放在第一个错误上面, 只不过,我还是更喜欢 old fashion 体验罢了。

2 个赞

愣是没看懂啥意思。。