Jak zabić bufory Ediffa przy wyjściu?

9

Jak automatycznie zabijać bufory (Cx k) Ediffa (A, B, C) na każdym z nich ediff-quit?

denys
źródło
Czy naprawdę miałeś na myśli zamknięcie buforów, a nie zamknięcie okien , tzn. Zwykle powrót do pojedynczego okna z jednym plikiem (ale pozostawienie plików otwartych)?
Gilles 'SO - przestań być zły'
Tak, mam na myśli bufory zabijania (Cx k)
den
Dlaczego chcesz to zrobić? Często, kiedy robię ediff, muszę później kontynuować pracę nad jednym z buforów.
Andrew Swann
W moim przypadku używam ztree-diff do przeglądania różnic i nie jestem zainteresowany plikami po tym przez większość czasu.
Alwyn Schoeman

Odpowiedzi:

1
(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-buffersz 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.

Joakim Hårsman
źródło
2

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)

Hoagie
źródło
1

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)
quimm2003
źródło
0

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))))
djangoliv
źródło
2
Nie zaleca się łączenia lambdafunkcji z hakami (i poradami). Sprawia, że ​​przeglądanie zmiennych haka i usuwanie funkcji z haków jest bolesne.
Kaushal Modi
2
To skutecznie zamyka okna, ale pytaniem jest zabić bufory .
Gilles „SO- przestań być zły”
0

Właśnie tego używam do zamykania okien:

(add-hook 'ediff-after-quit-hook-internal 'winner-undo)
Clemera
źródło
1
To skutecznie zamyka okna, ale pytaniem jest zabić bufory .
Gilles „SO- przestań być zły”