Wie setze ich einen vorübergehenden Stopp nach Cx Cc?

10

Wenn ich C-x C-cin Emacs laufe , wird es sofort geschlossen. Wenn ich es einstelle confirm-kill-emacs, y-or-n-pwerde ich vor dem Schließen um Bestätigung gebeten.

Stattdessen y-or-n-pmöchte ich einen temporären Timer für 3 Sekunden einstellen, bevor ich Emacs schließe. Wenn ich also drücke C-x C-c, sollte es so etwas wie zeigen

Emacs wird in 3 Sekunden heruntergefahren. Drücken Sie Cg zu Anschlag

Wenn ich nichts tue, sollte es Emacs herunterfahren, aber wenn ich drücke C-g, sollte es das Herunterfahren verhindern. Wie kann ich das erreichen?

ChillarAnand
quelle

Antworten:

13

Sie können Ihre eigene Prädikatfunktion rollen, die 3 Sekunden wartet und immer ungleich Null zurückgibt (es sei denn, sie wird unterbrochen mit C-g):

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

oder eine Variante, die einen beliebigen Schlüssel liest:

(setq confirm-kill-emacs
      (lambda (&rest args)
        (interactive)
        (null (read-event "Quitting in 3 seconds. Hit any key to stop."
                          nil 3))))
François Févotte
quelle
7

Sie können sit-foranstelle von sleep-forPlus verwenden t. Und die Funktion muss kein Befehl sein ( interactive).

sit-forGibt zurück, twenn es gewartet hat und nilder Benutzer das Warten unterbrochen hat.

(setq confirm-kill-emacs
      (lambda (&rest _)
        (message "Quit in 3 sec (`C-g' or other action cancels)")
        (sit-for 3)))
Drew
quelle