Come uccidere i buffer di ediff all'uscita?


9

Come uccidere automaticamente (Cx k) i buffer di Ediff (A, B, C) su ciascuno ediff-quit?


Intendevi davvero chiudere i buffer, invece di chiudere le finestre , cioè di solito tornare a una singola finestra che mostra un singolo file (ma lasciando i file aperti)?
Gilles 'SO- smetti di essere malvagio' il

Sì, intendo kill buffer (Cx k)
nega il

Perché desideri farlo? Spesso quando faccio un ediff ho bisogno di continuare a lavorare su uno dei buffer in seguito.
Andrew Swann,

Nel mio caso sto usando ztree-diff per visualizzare le differenze e non mi interessano i file dopo la maggior parte del tempo.
Alwyn Schoeman,

Risposte:


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)

Nota che questo ucciderà sempre i buffer ediff, anche se non sono stati aperti da ediff, ad esempio hai chiamato ediff-bufferscon 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.


2

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)


1

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)

0

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

2
Non è consigliabile associare lambdafunzioni a hook (e consigli). Rende dolorosa la revisione delle variabili hook e la rimozione di funzioni dagli hook.
Kaushal Modi,

2
Questo chiude efficacemente le finestre, ma la domanda è chiedere di uccidere i buffer .
Gilles 'SO- smetti di essere malvagio' il

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.