Làm thế nào để thiết lập tạm dừng sau Cx Cc?


10

Nếu tôi chạy C-x C-ctrong emacs, nó sẽ đóng lại ngay lập tức. Nếu tôi đặt confirm-kill-emacsthành y-or-n-pnó sẽ yêu cầu xác nhận trước khi đóng.

Thay vì y-or-n-p, tôi muốn đặt một số bộ đếm thời gian tạm thời trong 3 giây trước khi đóng emacs. Vì vậy, nếu tôi nhấn C-x C-cnó sẽ hiển thị một cái gì đó như

Emacs sẽ tắt trong 3 giây. Nhấn Cg để dừng

Nếu tôi không làm gì, nó sẽ tắt emacs, nhưng nếu tôi nhấn C-g, nó sẽ ngăn tắt. Làm thế nào tôi có thể đạt được điều này?

Câu trả lời:


13

Bạn có thể cuộn chức năng vị ngữ của riêng mình chờ trong 3 giây và luôn trả về giá trị không (trừ khi nó bị gián đoạn C-g):

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

hoặc một biến thể sẽ đọc bất kỳ khóa nào:

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

7

Bạn có thể sử dụng sit-forthay vì sử dụng sleep-forcộng t. Và hàm không cần phải là một lệnh ( interactive).

sit-fortrả về tnếu nó chờ và nilnếu người dùng bị gián đoạn thì chờ.

(setq confirm-kill-emacs
      (lambda (&rest _)
        (message "Quit in 3 sec (`C-g' or other action cancels)")
        (sit-for 3)))
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.