종료시 ediff의 버퍼를 죽이는 방법?


9

각각의 (Cx k) ediff (A, B, C) 버퍼를 자동으로 죽이는 방법은 ediff-quit무엇입니까?


윈도우 를 닫는 것과는 반대로 버퍼를 닫는 것을 의미 했습니까? 즉, 일반적으로 단일 파일을 표시하는 단일 창으로 돌아 가지 만 파일은 열어 둡니다.
Gilles 'SO- 악마 그만해

예, 킬 버퍼를 의미합니다 (Cx k)
6:13에

왜 이렇게 하시겠습니까? 내가 ediff를 할 때 종종 버퍼 중 하나에 대한 작업을 계속해야합니다.
Andrew Swann

제 경우에는 ztree-diff를 사용하여 diff를보고 있으며 diff 이후의 파일에는 관심이 없습니다.
Alwyn Schoeman

답변:


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-buffers가 ediff에 의해 열리지 않았더라도 항상 ediff-buffers를 죽일 것 ediff-buffers입니다.

당신은 또한 죽일 수 당신이 원하는 경우 *ediff-errors*, *ediff-diff*, *Ediff-Registry**ediff-fine-diff*도 있지만 보통은 나를 귀찮게하지 않습니다.


2

이것이이 주제에 대해 나에게 나타난 첫 번째 링크이기 때문에 대답을 추가하고 있으며 실제로 이것은 더 간단합니다.

접두사를 "q"에 전달하면 ediff 버퍼를 종료하라는 메시지가 표시됩니다.

Cu q

사용자 정의 ediff-keep-variants하면 종료시 버퍼를 종료하는 동작 : 프롬프트를 반대로하고 접두사를 사용하면 버퍼를 열어 둡니다.

(ediff 매뉴얼에서 얻었습니다)


1

https://emacs.stackexchange.com/a/17089/18662에 따라이 코드 (GNU Emacs 25.3.1 x86_64-pc-linux-gnu)를 사용하고 있습니다

ediff-quit-hook ( https://www.gnu.org/software/emacs/manual/html_node/ediff/Hooks.html ) 에 관한 GNU Emacs 매뉴얼에 명시된 바와 같이 :

ediff-cleanup-mes가 시작되기 전에 실행되는 후크는 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)

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함수를 후크 (및 조언) 에 바인딩하지 않는 것이 좋습니다 . 후크 변수를 검토하고 후크에서 함수를 제거하는 것이 고통 스럽습니다.
Kaushal Modi

2
이것은 효과적으로 창을 닫지 만 문제는 버퍼 를 죽이는 것 입니다.
Gilles 'SO- 악마 그만해

0

이것은 창을 닫는 데 사용하는 것입니다.

(add-hook 'ediff-after-quit-hook-internal 'winner-undo)

1
이것은 효과적으로 창을 닫지 만 문제는 버퍼 를 죽이는 것 입니다.
Gilles 'SO- 악마 그만해
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.