Як встановити тимчасову зупинку після 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)))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.