如何在Cx Cc之后设置临时停止?


10

如果我C-x C-c在emacs中运行,它将立即关闭。如果我将其设置confirm-kill-emacsy-or-n-p关闭前将要求确认。

而不是y-or-n-p,我想在关闭emacs之前设置一些临时计时器3秒钟。所以,如果我按C-x C-c它应该显示类似

Emacs将在3秒钟后关闭。按Cg停止

如果我什么都不做,它应该关闭emacs,但是如果按C-g,它应该防止关机。我该如何实现?

Answers:


13

您可以滚动自己的谓词函数,该函数等待3秒并始终返回non-nil(除非它被中断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-forplus 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)))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.