終了時にエディフのバッファを殺す方法は?


9

(Cx k)ediffの(A、B、C)バッファーを自動的に強制終了する方法はediff-quit


ウィンドウを閉じるのではなく、実際にバッファを閉じることを意味しましたか。つまり、通常は単一のファイルを表示している単一のウィンドウに戻ります(ただし、ファイルは開いたままにします)。
Gilles「SO-邪悪なことをやめなさい」15/10/12

はい、バッファのキル(Cx k)を意味します
2015年

なぜこれをしたいのですか?多くの場合、私がエディフを行うとき、私はその後、バッファーの1つで作業を続ける必要があります。
Andrew Swann、2015年

私の場合、私はztree-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によって開かれていなくても、常にediff-bufferを強制終了することに注意してください。たとえばediff-buffers、最初に開いていたバッファーで呼び出した場合などです。

あなたがしたい場合も殺すことができる*ediff-errors**ediff-diff**Ediff-Registry**ediff-fine-diff*だけでなく、しかし、それらは一般的に私を気にしないでください。


2

これは、このトピックで最初に表示されたリンクであり、これは確かに非常に簡単なので、回答を追加します。

プレフィックスを "q"に渡すと、ediffバッファを削除するように要求されます。

Cu q

カスタマイズediff-keep-variantsすると、動作が逆になります:終了時にバッファを強制終了するプロンプトが表示され、接頭辞を使用すると、バッファが開いたままになります。

(これはediffのマニュアルから入手したものです)


1

私はこのコードを使用しています(GNU Emacs 25.3.1 x86_64-pc-linux-gnu)、https: //emacs.stackexchange.com/a/17089/18662

ediff-quit-hookに関するGNU Emacsマニュアル(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)

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、2015

2
これは事実上ウィンドウを閉じますが、問題はバッファを強制終了することです。
Gilles「SO-邪悪になるのをやめる」

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.