Como matar automaticamente os buffers de (Cx k) ediff (A, B, C) em cada um ediff-quit
?
Como matar automaticamente os buffers de (Cx k) ediff (A, B, C) em cada um ediff-quit
?
Respostas:
(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)
Observe que isso sempre matará ediff-buffers, mesmo que eles não tenham sido abertos por ediff, por exemplo, você ligou ediff-buffers
com alguns buffers que tinha aberto para começar.
Se você quiser, você também pode matar *ediff-errors*
, *ediff-diff*
, *Ediff-Registry*
e *ediff-fine-diff*
bem, mas aqueles geralmente não me incomoda.
Estou adicionando uma resposta, porque este é o primeiro link que apareceu para mim neste tópico, e isso é realmente muito mais simples.
Você pode passar um prefixo para "q" e ele solicitará a eliminação dos buffers ediff.
Cu q
Se você personalizá- ediff-keep-variants
lo, reverterá o comportamento: prompt para eliminar os buffers na saída e, se usar o prefixo, os deixará abertos.
(peguei isso no manual ediff)
Estou usando este código (GNU Emacs 25.3.1 x86_64-pc-linux-gnu), seguindo https://emacs.stackexchange.com/a/17089/18662
Conforme declarado no Manual do GNU Emacs sobre o ediff-quit-hook ( https://www.gnu.org/software/emacs/manual/html_node/ediff/Hooks.html ):
Lembre-se de que os ganchos estão sendo executados antes que o ediff-cleanup-mess comece no ediff-control-buffer; eles também devem deixar ediff-control-buffer como o buffer atual quando terminarem. Ganchos que são executados após a bagunça da limpeza de ediff devem esperar que o buffer atual seja o buffer A ou o buffer B.
Então, eu mato também o buffer * Ediff Control Panel * . Outros buffers ediff também podem ser adicionados.
(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)
Você pode tentar este gancho:
(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
funções a ganchos (e conselhos). Torna dolorosa revisar as variáveis de gancho e remover funções dos ganchos.
Isto é o que eu estou usando para fechar as janelas:
(add-hook 'ediff-after-quit-hook-internal 'winner-undo)