(Cx k) ediff'in (A, B, C) tamponları her birinde otomatik olarak nasıl öldürülür ediff-quit
?
(Cx k) ediff'in (A, B, C) tamponları her birinde otomatik olarak nasıl öldürülür ediff-quit
?
Yanıtlar:
(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)
Bu, ediff tarafından açılmasalar bile her zaman ediff-buffer'ları öldüreceğini unutmayın; örneğin ediff-buffers
, başlamak için açık olduğunuz bazı tamponlarla aradınız .
Ayrıca öldürebilir size isterseniz *ediff-errors*
, *ediff-diff*
, *Ediff-Registry*
ve *ediff-fine-diff*
aynı zamanda, ancak bu genellikle beni rahatsız etmeyin.
Bir cevap ekliyorum, çünkü bu benim için bu konuda açılan ilk bağlantı ve bu gerçekten daha basit.
Bir öneki "q" olarak iletebilirsiniz; ediff arabelleklerini öldürmeniz istenir.
Cu q
Eğer özelleştirirseniz ediff-keep-variants
davranışı tersine çevirir: çıkışta arabellekleri öldürmek istemi ve eğer önek kullanılırsa açık bırakılır.
(ediff kılavuzundan aldı)
Https://emacs.stackexchange.com/a/17089/18662'yi izleyerek bu kodu (GNU Emacs 25.3.1 x86_64-pc-linux-gnu) kullanıyorum
Ediff-quit-hook ile ilgili GNU Emacs El Kitabında belirtildiği gibi ( https://www.gnu.org/software/emacs/manual/html_node/ediff/Hooks.html ):
Ediff-control-buffer'da ediff-cleanup-mess başlamadan önce kancaların çalıştığını unutmayın; ayrıca bittiklerinde geçerli tampon olarak ediff-kontrol-buffer'ı bırakmalıdırlar. Ediff-cleanup-mess'ten sonra yürütülen kancalar, geçerli tamponun tampon A veya tampon B olmasını beklemelidir.
Bu yüzden, * Ediff Kontrol Paneli * arabelleğini de öldürüyorum . Diğer ediff tamponları da ilave edilebilir.
(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)
Bu kancayı deneyebilirsiniz:
(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))))
lambda
İşlevlerin kancalara (ve önerilere) bağlanması önerilmez . Kanca değişkenlerini gözden geçirmeyi ve kancalardan fonksiyonları kaldırmayı acı verici hale getirir.
Bu pencereleri kapatmak için kullanıyorum:
(add-hook 'ediff-after-quit-hook-internal 'winner-undo)