Як автоматично вбити буфери (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-buffers
з деякими буферами, з яких ви відкрили для початку.
Якщо ви хочете , щоб ви могли також вбити *ediff-errors*
, *ediff-diff*
, *Ediff-Registry*
і *ediff-fine-diff*
як добре, але ті , як правило , не турбують мене.
Я додаю відповідь, тому що це перше посилання, яке з’явилося для мене на цю тему, і це дійсно простіше.
Ви можете передати префікс "q", і він запропонує вбити буфери едіффа.
Cu q
Якщо ви налаштуєте, ediff-keep-variants
це змінить поведінку: підкажіть, щоб вбити буфери при виході, і якщо використовувати префікс, вони залишать їх відкритими.
(отримав це з посібника з едіффа)
Я використовую цей код (GNU Emacs 25.3.1 x86_64-pc-linux-gnu), дотримуючись https://emacs.stackexchange.com/a/17089/18662
Як зазначено в Посібнику GNU Emacs щодо ediff-quit-hoke ( https://www.gnu.org/software/emacs/manual/html_node/ediff/Hooks.html ):
Майте на увазі, що гачки, що виконуються перед тим, як розпочати очищення едіффа, починаються в буфері ediff-control; вони також повинні залишати буфер ediff-control як поточний буфер, коли вони закінчуються. Гачки, які виконуються після безладу едіффа, повинні очікувати, що поточний буфер буде або буфером A, або буфером B.
Отже, я вбиваю також буфер * Ediff Control Panel * . Також можуть бути додані інші буфери едіффу.
(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)