在典型的Emacs会话中,我通常只有一个框架打开,我将它分成4个窗口,形成一个2x2网格,每个窗口中有一些特定的缓冲区(文件).
每当我ediff-buffers用来比较两个缓冲区时,Emacs就会占用我现有的帧,并将其重新分成两个垂直的窗口(我可以通过后续按下来选择hortizontal -).然而,当我退出ediff会议,Emacs也不会 自动恢复窗口的原始布局在我的框架.
有了这个我的问题是:
ediff-buffers使用一个新的独立框架,ediff并在我退出ediff会话时自动关闭它?在相关的说明中(虽然您询问了如何恢复窗口配置而不是帧配置):Emacs 24的最新开发快照允许您持久保存和恢复当前的帧集.查看新库frameset.el和更新的库desktop.el.请注意,目前正在进行此项工作,因此可能会立即发生变化.
您可以在入口/出口挂钩上设置功能,以便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)
Run Code Online (Sandbox Code Playgroud)