Come uccidere automaticamente (Cx k) i buffer di Ediff (A, B, C) su ciascuno ediff-quit
?
Come uccidere automaticamente (Cx k) i buffer di Ediff (A, B, C) su ciascuno ediff-quit
?
Risposte:
(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)
Nota che questo ucciderà sempre i buffer ediff, anche se non sono stati aperti da ediff, ad esempio hai chiamato ediff-buffers
con alcuni buffer che avevi aperto per cominciare.
Se si vuole si può anche uccidere *ediff-errors*
, *ediff-diff*
, *Ediff-Registry*
e *ediff-fine-diff*
così, ma quelli in genere non mi preoccupa.
Sto aggiungendo una risposta perché questo è il primo link che è apparso per me su questo argomento, e questo è davvero molto più semplice.
È possibile passare un prefisso a "q" e verrà richiesto di eliminare i buffer ediff.
Cu q
Se lo personalizzi ediff-keep-variants
, il comportamento verrà invertito: richiedi di eliminare i buffer all'uscita e se utilizza il prefisso li lascerà aperti.
(preso questo dal manuale di ediff)
Sto usando questo codice (GNU Emacs 25.3.1 x86_64-pc-linux-gnu), seguendo https://emacs.stackexchange.com/a/17089/18662
Come indicato nel Manuale Emacs GNU in merito a ediff-quit-hook ( https://www.gnu.org/software/emacs/manual/html_node/ediff/Hooks.html ):
Tenere presente che gli hook vengono eseguiti prima dell'avvio di ediff-cleanup-mess in ediff-control-buffer; dovrebbero anche lasciare ediff-control-buffer come buffer corrente al termine. Gli hook eseguiti dopo ediff-cleanup-mess dovrebbero aspettarsi che il buffer corrente sia buffer A o buffer B.
Quindi, uccido anche il buffer * Pannello di controllo Ediff * . Potrebbero essere aggiunti anche altri buffer 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)
Puoi provare questo hook:
(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
funzioni a hook (e consigli). Rende dolorosa la revisione delle variabili hook e la rimozione di funzioni dagli hook.
Questo è quello che sto usando per chiudere le finestre:
(add-hook 'ediff-after-quit-hook-internal 'winner-undo)