在不改变窗口布局的情况下,在emacs中进行Git提交?

6
我通常使用 Emacs,将框架分成两个并排的窗口。通过 git 提交更改 (C-x v v) 会在另一个窗口中打开一个缓冲区以进行更改评论。问题在于,当我完成评论并键入 C-c C-c 后,包含评论的窗口和 VC-log 缓冲区都将被关闭。然后,我必须再次将框架拆分为两个窗口,并找到已删除窗口中的缓冲区。
有没有办法使这个过程 (C-x v v [提交信息] C-c C-c) 不会破坏我的窗口布局?只要 VC-log 在另一个窗口中打开并且在不更改窗口布局的情况下消失,或者 VC-log 暂时拆分其中一个窗口,只要我完成提交后能够恢复原始缓冲区/窗口布局即可。我可以为vc-next-action编写包装函数来保存和恢复窗口配置,但似乎应该有更简单的方法来实现此目的。有什么想法吗?
2个回答

8

快速查看提供的vc选项中没有任何可能性,但是您可以使用 C-x v v 绑定的 vc-next-action 并使用 save-window-excursion 恢复窗口。

(defadvice vc-next-action (around keep-windows activate)
  (save-window-excursion
    ad-do-it))

还有winner-mode可以用于一般的恢复。如果你使用git,那么一定要看一下magit。


似乎这并不完全符合我的要求(VC-log缓冲区被创建在视线之外,当我选择它并用C-c C-c完成后,同样的问题出现了),但我认为它很接近。我不知道defadvice,所以谢谢!我会尝试一下,看看能否让它做到我想要的。 - Asher L.
1
winner-mode 真的很棒。以前的窗口配置只需按 C-c <left> 就能回到(重复操作可继续返回窗口配置历史记录)。在任何窗口意外变化的情况下都能轻松应对是非常出色的,这意味着你可以像暂时将窗口最大化,然后简单地回到之前的状态。 - phils
我只是匆匆一瞥,但赢家模式看起来像是我真正需要的东西!我现在就要离开办公室了,但我晚上会再检查一下。谢谢Michael和phils! - Asher L.
好的,获胜者模式是解决方案,不仅对于此问题,而且对于任何需要恢复窗口配置的情况都适用。 - Asher L.

1
我曾经遇到过同样的问题。这个方法似乎有效。
(defadvice log-edit-done (around keep-windows activate)
  (save-window-excursion
    ad-do-it))

C-c C-c在vc-log缓冲区中的帮助显示如下:

C-c C-c运行log-edit-done命令,该命令是'log-edit.el'中一个交互式的编译Lisp函数。


谢谢你的建议。我会试一试的。幸运的是,这个问题已经在Emacs 24中得到了解决。 - Asher L.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接