Как автоматически убить (Cx k) буфера Эдиффа (A, B, C) на каждом ediff-quit
?
Как автоматически убить (Cx k) буфера Эдиффа (A, B, C) на каждом ediff-quit
?
Ответы:
(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)
Обратите внимание, что это всегда убивает ediff-буферы, даже если они не были открыты с помощью ediff, например, вы вызывали ediff-buffers
с некоторыми буферами, с которых у вас были открыты для начала.
Если вы хотите , чтобы вы могли также убить *ediff-errors*
, *ediff-diff*
, *Ediff-Registry*
и *ediff-fine-diff*
как хорошо, но те , как правило , не беспокоят меня.
Я добавляю ответ, потому что это первая ссылка, которая появилась у меня на эту тему, и это действительно намного проще.
Вы можете передать префикс «q», и он предложит уничтожить буферы ediff.
Cu q
Если вы настроите ediff-keep-variants
его, он обратит поведение: предложит уничтожить буферы при выходе и, если использовать префикс, оставит их открытыми.
(получил это из руководства ediff)
Я использую этот код (GNU Emacs 25.3.1 x86_64-pc-linux-gnu), следуя https://emacs.stackexchange.com/a/17089/18662
Как указано в Руководстве по GNU Emacs относительно ediff-quit-hook ( https://www.gnu.org/software/emacs/manual/html_node/ediff/Hooks.html ):
Имейте в виду, что перехваты выполняются до запуска ediff-cleanup-mess в ediff-control-buffer; они также должны оставить ediff-control-buffer в качестве текущего буфера, когда они закончат. Хуки, которые выполняются после ediff-cleanup-mess, должны ожидать, что текущий буфер будет либо буфером A, либо буфером B.
Итак, я убил также буфер * Ediff Control Panel * . Также могут быть добавлены другие буферы ediff.
(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)
Вы можете попробовать этот крючок:
(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
функции к хукам (и советам). Это делает просмотр переменных хуков и удаление функций из хуков болезненным.
Это то, что я использую, чтобы закрыть окна:
(add-hook 'ediff-after-quit-hook-internal 'winner-undo)