【问题标题】:Git commits in emacs without changing window layout?Git 在 emacs 中提交而不更改窗口布局?
【发布时间】:2011-08-05 22:24:14
【问题描述】:

我通常在 emacs 中工作,将框架分成两个并排的窗口。通过 git (C-x v v) 提交更改会在另一个窗口中为更改注释打开一个缓冲区。问题是当我完成评论并输入C-c C-c 时,包含评论的窗口与VC 日志缓冲区一起被杀死。然后我必须再次将框架拆分为两个窗口,并找到已删除窗口中的缓冲区。

有什么方法可以防止这个过程(C-x v v [commit message] C-c C-c)弄乱我的窗口布局吗?我很乐意让 VC 日志在另一个窗口中打开然后消失而不更改窗口布局,或者让 VC 日志暂时拆分其中一个窗口,只要我的原始缓冲区/窗口布局恢复当我完成提交时。我可以为vc-next-action 编写一个包装函数来保存和恢复窗口配置,但似乎应该有一种更直接的方法来做到这一点。有什么想法吗?

【问题讨论】:

    标签: git emacs


    【解决方案1】:

    快速浏览 vc 选项是不可能的,但您可以建议vc-next-action(绑定到C-x v v)使用恢复窗口的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,所以谢谢!我会玩弄这个,看看我能不能让它做我想做的事。
    • winner-mode 真的很棒。之前的窗口配置只是一个C-c <left> 距离(并重复以继续返回窗口配置历史记录)。对于窗口意外更改的任何情况,拥有这种能力是非常棒的,这意味着你可以做一些事情,比如暂时最大化一个窗口,然后简单地回到以前的状态。
    • 我只是看了一眼,但是赢家模式看起来是我真正需要的东西!我现在正要离开办公室,但今晚晚些时候我会检查一下。谢谢迈克尔和菲尔斯!
    • 好的,赢家模式是解决方案,不仅仅是为了这个,而是在我想恢复我的窗口配置的任何时候。
    【解决方案2】:

    我遇到了同样的问题。这似乎有效。

    (defadvice log-edit-done (around keep-windows activate)
      (save-window-excursion
        ad-do-it))
    

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

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

    【讨论】:

    • 感谢您的提示。我会试试这个。幸运的是,这已在 Emacs 24 中修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 2017-09-09
    • 1970-01-01
    • 2012-01-09
    • 2021-06-23
    相关资源
    最近更新 更多