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.