วิธีการฆ่าบัฟเฟอร์ของ ediff เมื่อออกจากระบบ?


9

วิธีฆ่า (Cx k) ediff's (A, B, C) บัฟเฟอร์โดยอัตโนมัติในแต่ละอันediff-quit?


คุณหมายถึงการปิดบัฟเฟอร์อย่างแท้จริงไม่ใช่การปิดหน้าต่างนั่นคือกลับไปที่หน้าต่างเดียวที่แสดงไฟล์เดียว (แต่เปิดไฟล์ทิ้งไว้)
Gilles 'หยุดความชั่วร้าย'

ใช่ฉันหมายถึง kill buffers (Cx k)
ปฏิเสธ

ทำไมคุณต้องการทำเช่นนี้? บ่อยครั้งที่ฉันทำอาการจุกเสียดฉันต้องทำงานอย่างต่อเนื่องกับหนึ่งในบัฟเฟอร์หลังจากนั้น
Andrew Swann

ในกรณีของฉันฉันใช้ ztree-diff เพื่อดู diffs และฉันไม่สนใจไฟล์หลังจาก 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-errors*, *ediff-diff*, *Ediff-Registry*และ*ediff-fine-diff*เช่นกัน แต่ผู้ที่มักจะไม่รำคาญฉัน


2

ฉันกำลังเพิ่มคำตอบเพราะนี่คือลิงค์แรกที่โผล่ขึ้นมาให้ฉันในหัวข้อนี้และนี่เป็นวิธีที่ง่ายกว่าจริงๆ

คุณสามารถส่งคำนำหน้าไปที่ "q" และจะแจ้งให้ฆ่าบัฟเฟอร์ ediff

คิวคิว

หากคุณปรับแต่งediff-keep-variantsมันจะย้อนกลับพฤติกรรม: แจ้งให้ฆ่าบัฟเฟอร์เมื่อออกและหากใช้คำนำหน้าจะเปิดทิ้งไว้

(ได้สิ่งนี้จากคู่มือ ediff)


1

ฉันใช้รหัสนี้ (GNU Emacs 25.3.1 x86_64-pc-linux-gnu) ตามhttps://emacs.stackexchange.com/a/17089/18662

ตามที่ระบุไว้ในคู่มือ GNU Emacs เกี่ยวกับediff-quit-hook ( https://www.gnu.org/software/emacs/manual/html_node/ediff/Hooks.html ):

โปรดทราบว่า hooks ที่ดำเนินการก่อน ediff-cleanup-mess เริ่มต้นใน ediff-control-buffer พวกเขาควรปล่อยให้ ediff-control-buffer เป็นบัฟเฟอร์ปัจจุบันเมื่อเสร็จสิ้น hooks ที่ถูกเรียกใช้หลังจาก ediff-cleanup-mess ควรคาดว่าบัฟเฟอร์ปัจจุบันเป็นบัฟเฟอร์ A หรือบัฟเฟอร์ B

ดังนั้นฉันก็ฆ่าบัฟเฟอร์* Ediff Control Panel *ด้วย อาจเพิ่ม ediff buffer อื่นด้วย

(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ฟังก์ชั่นกับ hooks (และคำแนะนำ) มันทำให้การตรวจสอบตัวแปรของ hook และลบฟังก์ชั่นออกจาก hooks ที่เจ็บปวด
Kaushal Modi

2
ได้อย่างมีประสิทธิภาพปิดหน้าต่าง แต่คำถามคือขอให้ฆ่าบัฟเฟอร์
Gilles 'หยุดชั่วร้าย'

0

นี่คือสิ่งที่ฉันใช้เพื่อปิดหน้าต่าง:

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

1
ได้อย่างมีประสิทธิภาพปิดหน้าต่าง แต่คำถามคือขอให้ฆ่าบัฟเฟอร์
Gilles 'หยุดชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.