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?


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.


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)


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)

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

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)

1
Ini secara efektif menutup jendela, tetapi pertanyaannya adalah meminta untuk membunuh buffer .
Gilles 'SO- stop being evil'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.