Як вбити буфери Едіффа на виході?


9

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


Ви дійсно мали на увазі закриття буферів, на відміну від закриття вікон , тобто зазвичай повертаєтесь до одного вікна, де відображається один файл (але залишаєте файли відкритими)?
Жиль "ТАК - перестань бути злим"

Так, я маю на увазі буфери вбивства (Cx k)
заперечує

Чому ти хочеш це зробити? Часто, коли я роблю едіфф, мені потрібно продовжувати роботу над одним із буферів після цього.
Ендрю Сванн

У моєму випадку я використовую ztree-diff для перегляду розбіжностей, і я не цікавлюся файлами після 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-buffersз деякими буферами, з яких ви відкрили для початку.

Якщо ви хочете , щоб ви могли також вбити *ediff-errors*, *ediff-diff*, *Ediff-Registry*і *ediff-fine-diff*як добре, але ті , як правило , не турбують мене.


2

Я додаю відповідь, тому що це перше посилання, яке з’явилося для мене на цю тему, і це дійсно простіше.

Ви можете передати префікс "q", і він запропонує вбити буфери едіффа.

Cu q

Якщо ви налаштуєте, ediff-keep-variantsце змінить поведінку: підкажіть, щоб вбити буфери при виході, і якщо використовувати префікс, вони залишать їх відкритими.

(отримав це з посібника з едіффа)


1

Я використовую цей код (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)

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))))

2
Не рекомендується прив'язувати lambdaфункції до гачків (і порад). Це робить перегляд змінних гачка і видалення функцій з гачків болючим.
Каушал Моді

2
Це ефективно закриває вікна, але питання полягає в тому, щоб вбити буфери .
Жил "ТАК - перестань бути злим"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.