Как убить буфера Эдифа при выходе?

9

Как автоматически убить (Cx k) буфера Эдиффа (A, B, C) на каждом ediff-quit?

Denys
источник
Вы действительно имели в виду закрыть буферы, а не закрывать окна , то есть обычно возвращаться к одному окну, отображающему один файл (но оставляя файлы открытыми)?
Жиль "ТАК - перестань быть злым"
Да, я имею в виду буферы уничтожения (Cx k)
отрицает
Почему вы хотите это сделать? Часто, когда я делаю ediff, мне нужно продолжить работу над одним из буферов впоследствии.
Эндрю Суонн
В моем случае я использую ztree-diff для просмотра различий и большую часть времени меня не интересуют файлы после различий.
Элвин Шоуман

Ответы:

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)

Обратите внимание, что это всегда убивает ediff-буферы, даже если они не были открыты с помощью ediff, например, вы вызывали ediff-buffersс некоторыми буферами, с которых у вас были открыты для начала.

Если вы хотите , чтобы вы могли также убить *ediff-errors*, *ediff-diff*, *Ediff-Registry*и *ediff-fine-diff*как хорошо, но те , как правило , не беспокоят меня.

Йоаким Хорсман
источник
2

Я добавляю ответ, потому что это первая ссылка, которая появилась у меня на эту тему, и это действительно намного проще.

Вы можете передать префикс «q», и он предложит уничтожить буферы ediff.

Cu q

Если вы настроите ediff-keep-variantsего, он обратит поведение: предложит уничтожить буферы при выходе и, если использовать префикс, оставит их открытыми.

(получил это из руководства ediff)

Hoagie
источник
1

Я использую этот код (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)
quimm2003
источник
0

Вы можете попробовать этот крючок:

 (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))))
djangoliv
источник
2
Не рекомендуется привязывать lambdaфункции к хукам (и советам). Это делает просмотр переменных хуков и удаление функций из хуков болезненным.
Каушал Моди
2
Это эффективно закрывает окна, но вопрос заключается в том, чтобы убить буферы .
Жиль "ТАК - перестань быть злым"
0

Это то, что я использую, чтобы закрыть окна:

(add-hook 'ediff-after-quit-hook-internal 'winner-undo)
clemera
источник
1
Это эффективно закрывает окна, но вопрос заключается в том, чтобы убить буферы .
Жиль "ТАК - перестань быть злым"