在典型的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)