Emacs:保存和恢复原始框架布局(例如,使用ediff时)

Ame*_*ina 4 emacs

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

每当我ediff-buffers用来比较两个缓冲区时,Emacs就会占用我现有的帧,并将其重新分成两个垂直的窗口(我可以通过后续按下来选择hortizontal -).然而,当我退出ediff会议,Emacs也不会 自动恢复窗口的原始布局在我的框架.

有了这个我的问题是:

  1. 有没有办法自动恢复原来的布局?'
  2. 更好的是,我如何才能为会话ediff-buffers使用一个新的独立框架,ediff并在我退出ediff会话时自动关闭它?

Dre*_*rew 5

在相关的说明中(虽然您询问了如何恢复窗口配置而不是帧配置):Emacs 24的最新开发快照允许您持久保存和恢复当前的帧集.查看新库frameset.el和更新的库desktop.el.请注意,目前正在进行此项工作,因此可能会立即发生变化.


Tre*_*son 5

您可以在入口/出口挂钩上设置功能,以便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)