Wie töte ich (Cx k) Ediffs (A, B, C) Puffer automatisch auf jedem ediff-quit
?
Wie töte ich (Cx k) Ediffs (A, B, C) Puffer automatisch auf jedem ediff-quit
?
Antworten:
(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-buffers
mit 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.
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)
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)
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))))
lambda
Funktionen an Hooks (und Hinweise) zu binden . Dies macht das Überprüfen der Hook-Variablen und das Entfernen von Funktionen aus Hooks schmerzhaft.
Dies ist, was ich benutze, um die Fenster zu schließen:
(add-hook 'ediff-after-quit-hook-internal 'winner-undo)