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.