在典型的Emacs会话中,我通常只打开一帧,并将其分成4个窗口,形成2x2网格,每个窗口中都有一些特定的缓冲区(文件)。

每次我使用ediff-buffers比较两个缓冲区时,Emacs都会获取我现有的帧,然后将其垂直拆分成两个窗口(我可以通过随后按-来选择水平)。但是,当我退出ediff会话时,Emacs不会自动恢复框架中窗口的原始布局。

我的问题是:


有什么方法可以自动恢复我的原始布局?”
更好的是,如何让ediff-buffers仅用于ediff会话使用新的单独框架,并在退出ediff会话时自动将其关闭?

最佳答案

您可以在入口/出口挂钩上设置功能,以便ediff保存/恢复窗口配置以及创建新框架。这似乎可以解决Emacs 24.3中的问题-我不明白为什么在旧版本中它不起作用:

(defvar pre-ediff-window-configuration nil
  "window configuration to use")
(defvar new-ediff-frame-to-use nil
  "new frame for ediff to use")
(defun save-my-window-configuration ()
  (interactive)
  (setq pre-ediff-window-configuration (current-window-configuration))
  (select-frame-set-input-focus (setq new-ediff-frame-to-use (new-frame))))
(add-hook 'ediff-before-setup-hook 'save-my-window-configuration)
(defun restore-my-window-configuration ()
  (interactive)
  (when (framep new-ediff-frame-to-use)
    (delete-frame new-ediff-frame-to-use)
    (setq new-ediff-frame-to-use nil))
  (when (window-configuration-p pre-ediff-window-configuration)
    (set-window-configuration pre-ediff-window-configuration)))
(add-hook 'ediff-after-quit-hook-internal 'restore-my-window-configuration)

07-24 20:53