Làm thế nào để giết bộ đệm của ediff khi bỏ thuốc lá?


9

Làm thế nào để tự động giết (Cx k) bộ đệm (A, B, C) của ediff ediff-quit?


Bạn có thực sự muốn đóng các bộ đệm, trái ngược với việc đóng các cửa sổ , tức là thường quay lại một cửa sổ hiển thị một tệp duy nhất (nhưng để các tệp mở)?
Gilles 'SO- ngừng trở nên xấu xa'

Vâng, ý tôi là giết bộ đệm (Cx k)
chối

Tại sao bạn muốn làm điều này? Thông thường khi tôi làm một ediff tôi cần tiếp tục làm việc trên một trong những bộ đệm sau đó.
Andrew Swann

Trong trường hợp của tôi, tôi đang sử dụng ztree-diff để xem các khác biệt và tôi không quan tâm đến các tệp sau phần lớn thời gian.
Alwyn Schoeman

Câu trả lời:


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)

Lưu ý rằng điều này sẽ luôn giết bộ đệm ediff, ngay cả khi chúng không được mở bởi ediff, ví dụ như bạn đã gọi ediff-buffersvới một số bộ đệm mà bạn đã mở để bắt đầu.

Nếu bạn muốn, bạn cũng có thể giết chết *ediff-errors*, *ediff-diff*, *Ediff-Registry**ediff-fine-diff*là tốt, nhưng những người thường không làm phiền tôi.


2

Tôi đang thêm một câu trả lời vì đây là liên kết đầu tiên xuất hiện cho tôi về chủ đề này và đây thực sự là cách đơn giản hơn.

Bạn có thể chuyển tiền tố thành "q" và nó sẽ nhắc giết bộ đệm ediff.

Cu q

Nếu bạn tùy chỉnh, ediff-keep-variantsnó sẽ đảo ngược hành vi: prompt để giết bộ đệm khi thoát và nếu sử dụng tiền tố sẽ để chúng mở.

(lấy cái này từ hướng dẫn sử dụng)


1

Tôi đang sử dụng mã này (GNU Emacs 25.3.1 x86_64-pc-linux-gnu), theo dõi https://emacs.stackexchange.com/a/17089/18662

Như đã nêu trong Hướng dẫn sử dụng GNU Emacs về ediff-Thoát-hook ( https://www.gnu.org/software/emacs/manual/html_node/ediff/Hooks.html ):

Hãy nhớ rằng các hook thực thi trước khi ediff-dọn dẹp-mess bắt đầu trong ediff-control-buffer; họ cũng nên để bộ đệm điều khiển ediff làm bộ đệm hiện tại khi hoàn thành. Các hook được thực thi sau ediff-cleanup-mess nên mong đợi bộ đệm hiện tại là bộ đệm A hoặc bộ đệm B.

Vì vậy, tôi cũng giết bộ đệm * Bảng điều khiển Ediff * . Bộ đệm ediff khác có thể được thêm vào quá.

(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

Bạn có thể thử cái móc này:

 (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
Không nên liên kết các lambdachức năng với hook (và lời khuyên). Nó làm cho việc xem xét các biến hook và loại bỏ các chức năng khỏi hook.
Kaushal Modi

2
Điều này có hiệu quả đóng các cửa sổ, nhưng câu hỏi là yêu cầu giết bộ đệm .
Gilles 'SO- ngừng trở nên xấu xa'

0

Đây là những gì tôi đang sử dụng để đóng các cửa sổ:

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

1
Điều này có hiệu quả đóng các cửa sổ, nhưng câu hỏi là yêu cầu giết bộ đệm .
Gilles 'SO- ngừng trở nên xấu xa'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.