วิธีตั้งค่าหยุดชั่วคราวหลังจาก Cx Cc


10

ถ้าฉันทำงานC-x C-cใน emacs มันจะปิดทันที หากฉันตั้งconfirm-kill-emacsไปy-or-n-pก็จะขอคำยืนยันก่อนที่จะปิด

แทนที่จะy-or-n-pผมต้องการที่จะตั้งเวลาชั่วคราวบางเวลา 3 วินาทีก่อนที่จะปิด emacs ดังนั้นถ้าฉันกดC-x C-cมันควรจะแสดงบางอย่างเช่น

Emacs จะถูกปิดใน 3 วินาที กดCgเพื่อหยุด

หากฉันไม่ทำอะไรเลยมันควรปิด emacs แต่ถ้าฉันกดC-gมันควรป้องกันการปิดเครื่อง ฉันจะบรรลุสิ่งนี้ได้อย่างไร

คำตอบ:


13

คุณสามารถหมุนฟังก์ชันเพรดิเคตของคุณเองที่รอเป็นเวลา 3 วินาทีและส่งคืนค่าที่ไม่ใช่ศูนย์ (เว้นแต่จะถูกขัดจังหวะด้วยC-g):

(setq confirm-kill-emacs
      (lambda (&rest args)
        (interactive)
        (message "Quitting in 3 seconds. Press `C-g' to stop.")
        (sleep-for 3)
        t))

หรือตัวแปรที่จะอ่านคีย์ใด ๆ :

(setq confirm-kill-emacs
      (lambda (&rest args)
        (interactive)
        (null (read-event "Quitting in 3 seconds. Hit any key to stop."
                          nil 3))))

7

คุณสามารถใช้sit-forแทนการใช้บวกsleep-for tและฟังก์ชั่นไม่จำเป็นต้องมีคำสั่ง ( interactive)

sit-forผลตอบแทนtถ้ามันรอและnilถ้าผู้ใช้ขัดจังหวะการรอ

(setq confirm-kill-emacs
      (lambda (&rest _)
        (message "Quit in 3 sec (`C-g' or other action cancels)")
        (sit-for 3)))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.