Como matar os buffers de ediff ao sair?


9

Como matar automaticamente os buffers de (Cx k) ediff (A, B, C) em cada um ediff-quit?


Você realmente quis dizer fechar os buffers, em vez de fechar as janelas , ou seja, geralmente voltar para uma única janela mostrando um único arquivo (mas deixando os arquivos abertos)?
Gilles 'SO- stop be evil'

Sim, refiro-me a matar buffers (Cx k)
denys

Por que você deseja fazer isso? Muitas vezes, quando faço um ediff, preciso continuar trabalhando em um dos buffers posteriormente.
Andrew Swann

No meu caso, estou usando o ztree-diff para visualizar os diffs e não estou interessado nos arquivos após o diff a maior parte do tempo.
Alwyn Schoeman

Respostas:


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)

Observe que isso sempre matará ediff-buffers, mesmo que eles não tenham sido abertos por ediff, por exemplo, você ligou ediff-bufferscom 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.


2

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-variantslo, reverterá o comportamento: prompt para eliminar os buffers na saída e, se usar o prefixo, os deixará abertos.

(peguei isso no manual ediff)


1

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)

0

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

2
Não é recomendável vincular lambdafunções a ganchos (e conselhos). Torna dolorosa revisar as variáveis ​​de gancho e remover funções dos ganchos.
Kaushal Modi

2
Isso efetivamente fecha as janelas, mas a pergunta está pedindo para matar os buffers .
Gilles 'SO- stop be evil'

0

Isto é o que eu estou usando para fechar as janelas:

(add-hook 'ediff-after-quit-hook-internal 'winner-undo)

11
Isso efetivamente fecha as janelas, mas a pergunta está pedindo para matar os buffers .
Gilles 'SO- stop be evil'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.