Emacs desktop-save-mode - บันทึกเดสก์ทอปเฉพาะเมื่อเดสก์ทอปก่อนหน้านี้ได้รับการกู้คืนอย่างสมบูรณ์


11

ฉันมีดังต่อไปนี้ในของฉัน.emacs:

(desktop-save-mode 1)
(setq desktop-restore-eager 10)
(setq desktop-save t)

บ่อยครั้งที่ฉันเปิดบัฟเฟอร์จำนวนมาก (100 หรือมากกว่านั้น) สิ่งนี้ช่วยได้จริงๆเพราะ emacs กำลังโหลดบัฟเฟอร์เฉพาะเมื่อไม่ยุ่งกับสิ่งอื่น

บางครั้งเหตุการณ์ต่อไปนี้เกิดขึ้น: ฉันปิด emacs ก่อนที่ฉันจะปิดแล็ปท็อปของฉัน จากนั้นฉันก็รู้ - ฉันต้องแก้ไขไฟล์อีกหนึ่งไฟล์อย่างรวดเร็ว - ดังนั้นฉันเปิด emacs อีกครั้งทำการแก้ไขแล้วปิดมัน หากสิ่งนี้เกิดขึ้นภายในระยะเวลาอันสั้นแสดงว่าdesktop-save-modeไม่สามารถกู้คืนบัฟเฟอร์ที่บันทึกไว้ก่อนหน้านี้ทั้งหมดได้ ในกรณีนี้เมื่อฉันปิด emacs อีกครั้งเฉพาะบัฟเฟอร์ที่ถูกกู้คืนจะถูกบันทึกและสถานะก่อนการปิดเครื่องครั้งแรกจะหายไป

มีวิธีที่จะทำให้desktop-saveเกิดขึ้นเท่านั้นหากเดสก์ท็อปที่บันทึกไว้ก่อนหน้านี้ได้รับการกู้คืนอย่างสมบูรณ์หรือไม่

คำตอบ:


3

มีตะขอที่คุณสามารถใช้: desktop-after-read-hook. เพิ่มฟังก์ชั่นเพื่อตั้งค่าตัวแปรหลังจากที่สถานะเดสก์ท็อปถูกเรียกคืน ใช้defadviceรอบdesktop-saveการตรวจสอบว่าตัวแปรมีการตั้งค่าก่อนที่จะบันทึกรัฐ

ฉันใช้ Emacs 25.3.1 และนี่คือรหัสที่ฉันใช้:

(defvar *my-desktop-save* nil
  "Should I save the desktop when Emacs is shutting down?")

(add-hook 'desktop-after-read-hook
          (lambda () (setq *my-desktop-save* t)))

(advice-add 'desktop-save :around
            (lambda (fn &rest args)
              (if (bound-and-true-p *my-desktop-save*)
                  (apply fn args))))

เพิ่มลงในของคุณ.emacsแล้วรีสตาร์ท


สวัสดีขอบคุณนี่ควรทำเคล็ดลับ อย่างไรก็ตามทักษะการกระเพื่อม emacs ของฉันค่อนข้าง จำกัด คุณสามารถขยายคำตอบของคุณเพื่อรวมตัวอย่างเสียง
กระซิบ

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