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?


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.


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)


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)

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))))

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'

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.