Bagaimana cara membunuh buffer ediff saat berhenti?

9

Bagaimana cara membunuh buffer (Cx k) ediff (A, B, C) secara otomatis di masing-masing ediff-quit?

denys
sumber
Apakah maksud Anda benar-benar menutup buffer, daripada menutup jendela , yaitu biasanya kembali ke jendela tunggal yang menunjukkan satu file (tetapi membiarkan file tetap terbuka)?
Gilles 'SANGAT berhenti menjadi jahat'
Ya, maksud saya membunuh buffer (Cx k)
denys
Mengapa Anda ingin melakukan ini? Seringkali ketika saya melakukan ediff saya harus terus bekerja pada salah satu buffer sesudahnya.
Andrew Swann
Dalam kasus saya, saya menggunakan ztree-diff untuk melihat diff dan saya tidak tertarik pada file setelah diff sebagian besar waktu.
Alwyn Schoeman

Jawaban:

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)

Perhatikan bahwa ini akan selalu membunuh buffer-ediff, bahkan jika itu tidak dibuka oleh ediff misalnya Anda menelepon ediff-buffersdengan beberapa buffer yang Anda buka untuk memulai.

Jika Anda ingin Anda juga bisa membunuh *ediff-errors*, *ediff-diff*, *Ediff-Registry*dan *ediff-fine-diff*juga, tetapi mereka umumnya tidak mengganggu saya.

Joakim Hårsman
sumber
2

Saya menambahkan jawaban karena ini adalah tautan pertama yang muncul untuk saya tentang topik ini, dan ini memang cara yang lebih sederhana.

Anda bisa memberikan awalan ke "q" dan itu akan meminta untuk membunuh buffer ediff.

Cu q

Jika Anda menyesuaikannya ediff-keep-variantsakan membalik perilaku: prompt untuk membunuh buffer saat keluar dan jika menggunakan awalan akan membiarkannya terbuka.

(dapatkan ini dari manual ediff)

Hoagie
sumber
1

Saya menggunakan kode ini (GNU Emacs 25.3.1 x86_64-pc-linux-gnu), mengikuti https://emacs.stackexchange.com/a/17089/18662

Sebagaimana dinyatakan dalam Manual Emacs GNU tentang ediff-quit-hook ( https://www.gnu.org/software/emacs/manual/html_node/ediff/Hooks.html ):

Perlu diingat bahwa kait yang dijalankan sebelum ediff-cleanup-mess dimulai pada ediff-control-buffer; mereka juga harus meninggalkan ediff-control-buffer sebagai buffer saat ini ketika mereka selesai. Kait yang dieksekusi setelah ediff-cleanup-mess seharusnya mengharapkan buffer saat ini berupa buffer A atau buffer B.

Jadi, saya bunuh juga buffer * Ediff Control Panel * . Buffer ediff lainnya dapat ditambahkan juga.

(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
sumber
0

Anda dapat mencoba pengait ini:

 (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
sumber
2
Tidak disarankan untuk mengikat lambdafungsi ke pengait (dan saran). Itu membuat meninjau variabel kait dan menghapus fungsi dari kait menyakitkan.
Kaushal Modi
2
Ini secara efektif menutup jendela, tetapi pertanyaannya adalah meminta untuk membunuh buffer .
Gilles 'SO- stop being evil'
0

Ini yang saya gunakan untuk menutup windows:

(add-hook 'ediff-after-quit-hook-internal 'winner-undo)
clemera
sumber
1
Ini secara efektif menutup jendela, tetapi pertanyaannya adalah meminta untuk membunuh buffer .
Gilles 'SO- stop being evil'