วิธีฆ่า (Cx k) ediff's (A, B, C) บัฟเฟอร์โดยอัตโนมัติในแต่ละอันediff-quit
?
วิธีฆ่า (Cx k) ediff's (A, B, C) บัฟเฟอร์โดยอัตโนมัติในแต่ละอันediff-quit
?
คำตอบ:
(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*
เช่นกัน แต่ผู้ที่มักจะไม่รำคาญฉัน
ฉันกำลังเพิ่มคำตอบเพราะนี่คือลิงค์แรกที่โผล่ขึ้นมาให้ฉันในหัวข้อนี้และนี่เป็นวิธีที่ง่ายกว่าจริงๆ
คุณสามารถส่งคำนำหน้าไปที่ "q" และจะแจ้งให้ฆ่าบัฟเฟอร์ ediff
คิวคิว
หากคุณปรับแต่งediff-keep-variants
มันจะย้อนกลับพฤติกรรม: แจ้งให้ฆ่าบัฟเฟอร์เมื่อออกและหากใช้คำนำหน้าจะเปิดทิ้งไว้
(ได้สิ่งนี้จากคู่มือ ediff)
ฉันใช้รหัสนี้ (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)
คุณสามารถลองใช้เบ็ดนี้:
(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))))
lambda
ฟังก์ชั่นกับ hooks (และคำแนะนำ) มันทำให้การตรวจสอบตัวแปรของ hook และลบฟังก์ชั่นออกจาก hooks ที่เจ็บปวด
นี่คือสิ่งที่ฉันใช้เพื่อปิดหน้าต่าง:
(add-hook 'ediff-after-quit-hook-internal 'winner-undo)