一千萬個為什麽

搜索

在Ediff會話之後恢復窗口和布局

在Ediff會話之後尋找如何恢復我的窗口布局的解決方案,我找到了博客文章,作者建議:

(winner-mode)
(add-hook 'ediff-after-quit-hook-internal 'winner-undo)

這似乎幾乎對我有用。我說幾乎是因為我從 調用 Mx ediff-buffers Helm ,退出Ediff會話,讓我回到原始布局,使用 dead Helm菜單從我選擇 Mx ediff-buffers

讓我解釋:

  1. 在任何時候我都打開了幾個窗口,窗口布局為L1。
  2. 我想編輯一些緩沖區,所以我按 M-x :這會重新使用L1中的一個窗口打開Helm自動完成菜單。到目前為止一切順利。
  3. 我選擇 ediff-buffers ,然後將兩個緩沖區進行比較,一個接一個地
  4. 這會帶我進入 ediff 會話,在那裏我可以檢查差異等。
  5. 一旦我完成了。我退出了我的ediff-session。
  6. 我想在步驟#1中回到我的布局L1。但是,Emacs (贏家模式)將我帶回第2步,其中L1中的一個Emacs窗口用於顯示Helm中的選項。這是毫無意義的,因為我完成了我的ediff會話。

如何將窗口恢復到原始布局L1?

建立:

This is all in Emacs 25.0.50.1 on OS X. More specifically, GNU Emacs 25.0.50.1 (x86_64-apple-darwin14.0.0, NS appkit-1343.16 Version 10.10.1 (Build 14B25))

最佳答案

你想要的東西可以使用ediff提供的鉤子幹凈地實現(如果閱讀文檔似乎是為了這個目的而提供),則不需要建議。相關的鉤子是

1) ediff-quit-hook ,來自文檔

完成Ediff之後,在Ediff控制緩沖區中運行鉤子。

2) ediff-before-setup-hook

在Ediff開始設置窗口和緩沖區之前運行鉤子。這個   hook可以用來保存以前的窗口配置,也可以   在ediff-quit或ediff-suspend上恢復。

該方法類似於@ abo-abo的方法。我們在使用 ediff-before-setup-hook 設置ediff之前保存窗口配置,並在 ediff-quit-hook 中恢復存儲的窗口配置。

(defvar my-ediff-last-windows nil)

(defun my-store-pre-ediff-winconfig ()
  (setq my-ediff-last-windows (current-window-configuration)))

(defun my-restore-pre-ediff-winconfig ()
  (set-window-configuration my-ediff-last-windows))

(add-hook 'ediff-before-setup-hook #'my-store-pre-ediff-winconfig)
(add-hook 'ediff-quit-hook #'my-restore-pre-ediff-winconfig)

轉載註明原文: 在Ediff會話之後恢復窗口和布局