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?


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.


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)


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)

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

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'

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.