Jak automatycznie zabijać bufory (Cx k) Ediffa (A, B, C) na każdym z nich ediff-quit
?
Jak automatycznie zabijać bufory (Cx k) Ediffa (A, B, C) na każdym z nich ediff-quit
?
Odpowiedzi:
(defun my-kill-ediff-buffers ()
(kill-buffer ediff-buffer-A)
(kill-buffer ediff-buffer-B)
(kill-buffer ediff-buffer-C))
(add-hook 'ediff-quit-hook 'my-kill-ediff-buffers)
Zauważ, że to zawsze zabija bufory ediff, nawet jeśli nie były one otwierane przez ediff, np. Sprawdziłeś ediff-buffers
z kilkoma buforami, które miałeś na początek.
Jeśli chcesz, aby was może również zabić *ediff-errors*
, *ediff-diff*
, *Ediff-Registry*
a *ediff-fine-diff*
także, ale te na ogół nie przeszkadza mi.
Dodaję odpowiedź, ponieważ jest to pierwszy link, który pojawił się dla mnie na ten temat, i to jest rzeczywiście o wiele prostsze.
Możesz przekazać prefiks do „q”, a on poprosi o zabicie buforów Ediff.
Cu q
Jeśli dostosujesz ediff-keep-variants
, odwróci to zachowanie: monit o zabicie buforów przy wyjściu, a jeśli użyjesz prefiksu, pozostawi je otwarte.
(otrzymałem to z instrukcji ediff)
Używam tego kodu (GNU Emacs 25.3.1 x86_64-pc-linux-gnu), zgodnie z https://emacs.stackexchange.com/a/17089/18662
Jak stwierdzono w Podręczniku GNU Emacs dotyczącym ediff-quit-hook ( https://www.gnu.org/software/emacs/manual/html_node/ediff/Hooks.html ):
Należy pamiętać, że przechwytywanie wykonywane przed ediff-cleanup-mess start w buforze ediff-control; po zakończeniu powinny również pozostawić bufor kontroli Ediff jako bieżący bufor. Haki, które są wykonywane po bałaganie po czyszczeniu Ediff, powinny oczekiwać, że bieżącym buforem będzie bufor A lub bufor B.
Więc zabijam także bufor * Ediff Control Panel * . Można również dodać inne bufory Ediff.
(setq ediff-window-setup-function 'ediff-setup-windows-plain)
(setq ediff-split-window-function 'split-window-horizontally)
(defvar q-ediff-last-windows nil)
(defun q-store-pre-ediff-winconfig ()
(setq q-ediff-last-windows (current-window-configuration)))
(defun q-restore-pre-ediff-winconfig ()
(progn
(set-window-configuration q-ediff-last-windows)
(ediff-kill-buffer-carefully "*Ediff Control Panel*")))
(add-hook 'ediff-before-setup-hook #'q-store-pre-ediff-winconfig)
(add-hook 'ediff-quit-hook #'q-restore-pre-ediff-winconfig)
Możesz wypróbować ten hak:
(add-hook 'ediff-load-hook
(lambda ()
(add-hook 'ediff-before-setup-hook
(lambda ()
(setq ediff-before-file (buffer-file-name))
(setq ediff-saved-window-configuration (current-window-configuration))))
(let ((restore-window-configuration
(lambda ()
(set-window-configuration ediff-saved-window-configuration))))
(add-hook 'ediff-quit-hook restore-window-configuration 'append)
(add-hook 'ediff-suspend-hook restore-window-configuration 'append))))
lambda
funkcji z hakami (i poradami). Sprawia, że przeglądanie zmiennych haka i usuwanie funkcji z haków jest bolesne.
Właśnie tego używam do zamykania okien:
(add-hook 'ediff-after-quit-hook-internal 'winner-undo)