Comment tuer les tampons d'Ediff en quittant?

9

Comment tuer automatiquement (Cx k) les tampons (A, B, C) d'ediff sur chacun ediff-quit?

denys
la source
Vouliez-vous vraiment dire fermer les tampons, au lieu de fermer les fenêtres , c'est-à-dire revenir généralement à une seule fenêtre affichant un seul fichier (mais laissant les fichiers ouverts)?
Gilles 'SO- arrête d'être méchant'
Oui, je veux dire tuer les tampons (Cx k)
denys
Pourquoi voulez-vous faire ça? Souvent, lorsque je fais un ediff, je dois continuer à travailler sur l'un des tampons par la suite.
Andrew Swann
Dans mon cas, j'utilise ztree-diff pour afficher les différences et je ne suis pas intéressé par les fichiers après la différence la plupart du temps.
Alwyn Schoeman

Réponses:

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)

Notez que cela tuera toujours les tampons ediff, même s'ils n'ont pas été ouverts par ediff, par exemple, vous avez appelé ediff-buffersavec certains tampons que vous aviez ouverts pour commencer.

Si vous voulez vous pouvez aussi tuer *ediff-errors*, *ediff-diff*, *Ediff-Registry*et *ediff-fine-diff*aussi, mais ceux -ci ne généralement me dérange pas.

Joakim Hårsman
la source
2

J'ajoute une réponse parce que c'est le premier lien qui est apparu pour moi sur ce sujet, et c'est en effet beaucoup plus simple.

Vous pouvez passer un préfixe à "q" et il vous demandera de tuer les tampons ediff.

Cu q

Si vous le personnalisez, ediff-keep-variantsil inversera le comportement: invite à tuer les tampons à la sortie et, si vous utilisez le préfixe, les laissera ouverts.

(obtenu cela du manuel ediff)

Hoagie
la source
1

J'utilise ce code (GNU Emacs 25.3.1 x86_64-pc-linux-gnu), en suivant https://emacs.stackexchange.com/a/17089/18662

Comme indiqué dans le manuel GNU Emacs concernant ediff-quit-hook ( https://www.gnu.org/software/emacs/manual/html_node/ediff/Hooks.html ):

Gardez à l'esprit que les hooks s'exécutant avant le démarrage d'ediff-cleanup-mess dans ediff-control-buffer; ils doivent également laisser ediff-control-buffer comme tampon courant à la fin. Les hooks exécutés après ediff-cleanup-mess doivent s'attendre à ce que le tampon actuel soit le tampon A ou le tampon B.

Donc, je tue aussi le tampon * Ediff Control Panel * . D'autres tampons ediff peuvent également être ajoutés.

(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)
quimm2003
la source
0

Vous pouvez essayer ce crochet:

 (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))))
djangoliv
la source
2
Il n'est pas recommandé de lier des lambdafonctions aux crochets (et aux conseils). Cela rend la révision des variables de hook et la suppression des fonctions des hooks pénibles.
Kaushal Modi du
2
Cela ferme effectivement les fenêtres, mais la question demande de tuer les tampons .
Gilles 'SO- arrête d'être méchant'
0

Voici ce que j'utilise pour fermer les fenêtres:

(add-hook 'ediff-after-quit-hook-internal 'winner-undo)
clemera
la source
1
Cela ferme effectivement les fenêtres, mais la question demande de tuer les tampons .
Gilles 'SO- arrête d'être méchant'