The previous message was incomplete, and sent by accident. I have a complete recipe now. Both forms are meant to be evaluated C-M-x, and followed by abort-recursive-edit, or keyboard-quit. ;; QUIT gets inserted, and a Quit message is displayed. (condition-case error (sleep-for 5) (quit (goto-char (point-max)) (insert "QUIT"))) ;; With abort-recursive-edit ;; QUIT doesn't get inserted. Quit isn't displayed in the mini-buffer ;; With keyboard-quit ;; QUIT doesn't get inserted. Quit is displayed in the mini-buffer (condition-case error (let ((inhibit-quit t)) (sleep-for 5)) (quit (goto-char (point-max)) (insert "QUIT"))) I understand why "QUIT" might not be displayed -- the signal is not guaranteed to be sent immediately after then end of (let). But, shouldn't abort-recursive-edit also cause Quit to be displayed in the minibuffer? It so happens that I have abort-recursive-edit bound to C-g, and ((inhibit-quit t)) seems to discard all sent "C-g"s. Evgeni GNU Emacs 24.3.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.6.4) of 2013-11-02 on ubuntu