Come impostare l'arresto temporaneo dopo Cx Cc?


10

Se corro C-x C-cin emacs, si chiuderà immediatamente. Se impostato confirm-kill-emacssu y-or-n-p, chiederà conferma prima della chiusura.

Invece di y-or-n-p, voglio impostare un timer temporaneo per 3 secondi prima di chiudere emacs. Quindi, se premo C-x C-c, dovrebbe mostrare qualcosa di simile

Emacs si spegnerà tra 3 secondi. Premere Cg per interrompere

Se non faccio nulla, dovrebbe spegnere emacs, ma se premo C-g, dovrebbe impedire lo spegnimento. Come posso raggiungere questo obiettivo?

Risposte:


13

Puoi ruotare la tua funzione predicato che attende per 3 secondi e invariabilmente restituisce un valore nullo (a meno che non sia interrotto da C-g):

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

o una variante che leggerà qualsiasi tasto:

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

7

Puoi usare sit-forinvece di usare il sleep-forplus t. E la funzione non deve necessariamente essere un comando ( interactive).

sit-forritorna tse ha atteso e nilse l'utente ha interrotto l'attesa.

(setq confirm-kill-emacs
      (lambda (&rest _)
        (message "Quit in 3 sec (`C-g' or other action cancels)")
        (sit-for 3)))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.