Wie töte ich Ediffs Puffer beim Beenden?

9

Wie töte ich (Cx k) Ediffs (A, B, C) Puffer automatisch auf jedem ediff-quit?

leugnet
quelle
Meinten Sie wirklich, die Puffer zu schließen, anstatt die Fenster zu schließen , dh normalerweise zu einem einzelnen Fenster zurückzukehren, in dem eine einzelne Datei angezeigt wird (aber die Dateien offen zu lassen)?
Gilles 'SO - hör auf böse zu sein'
Ja, ich meine Kill Puffer (Cx k)
verweigert
Warum möchtest du das tun? Wenn ich einen Ediff mache, muss ich danach oft an einem der Puffer weiterarbeiten.
Andrew Swann
In meinem Fall verwende ich ztree-diff, um die Unterschiede anzuzeigen, und ich interessiere mich die meiste Zeit nicht für die Dateien nach dem Unterschied.
Alwyn Schoeman

Antworten:

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)

Beachten Sie, dass dies immer Ediff-Puffer tötet, auch wenn sie nicht von Ediff geöffnet wurden, z. B. wenn Sie ediff-buffersmit einigen Puffern angerufen haben, die Sie zu Beginn geöffnet hatten.

Wenn Sie Sie möchten auch töten könnten *ediff-errors*, *ediff-diff*, *Ediff-Registry*und *ediff-fine-diff*auch, aber diejenigen , die allgemein stören mich nicht.

Joakim Hårsman
quelle
2

Ich füge eine Antwort hinzu, da dies der erste Link ist, der für mich zu diesem Thema aufgetaucht ist, und dies ist in der Tat viel einfacher.

Sie können "q" ein Präfix übergeben, das Sie auffordert, die Ediff-Puffer zu löschen.

Cu q

Wenn Sie es anpassen ediff-keep-variants, wird das Verhalten umgekehrt: Wenn Sie aufgefordert werden, die Puffer beim Beenden zu beenden, und wenn Sie das Präfix verwenden, bleiben sie offen.

(habe dies aus dem Ediff-Handbuch)

Hoagie
quelle
1

Ich verwende diesen Code (GNU Emacs 25.3.1 x86_64-pc-linux-gnu) unter https://emacs.stackexchange.com/a/17089/18662

Wie im GNU Emacs-Handbuch zu ediff-quit-hook ( https://www.gnu.org/software/emacs/manual/html_node/ediff/Hooks.html ) angegeben:

Beachten Sie, dass Hooks, die vor dem Start von ediff-cleanup-mess ausgeführt werden, im ediff-control-buffer beginnen. Sie sollten auch ediff-control-buffer als aktuellen Puffer belassen, wenn sie fertig sind. Hooks, die nach ediff-cleanup-mess ausgeführt werden, sollten erwarten, dass der aktuelle Puffer entweder Puffer A oder Puffer B ist.

Also töte ich auch den * Ediff Control Panel * Puffer. Andere Ediff-Puffer können ebenfalls hinzugefügt werden.

(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
quelle
0

Sie können diesen Haken versuchen:

 (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
quelle
2
Es wird nicht empfohlen, lambdaFunktionen an Hooks (und Hinweise) zu binden . Dies macht das Überprüfen der Hook-Variablen und das Entfernen von Funktionen aus Hooks schmerzhaft.
Kaushal Modi
2
Dies schließt effektiv die Fenster, aber die Frage ist, die Puffer zu töten .
Gilles 'SO - hör auf böse zu sein'
0

Dies ist, was ich benutze, um die Fenster zu schließen:

(add-hook 'ediff-after-quit-hook-internal 'winner-undo)
Clemera
quelle
1
Dies schließt effektiv die Fenster, aber die Frage ist, die Puffer zu töten .
Gilles 'SO - hör auf böse zu sein'