summaryrefslogtreecommitdiff
path: root/lisp/subr.el
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>2006-05-25 00:19:02 +0000
committerRichard M. Stallman <rms@gnu.org>2006-05-25 00:19:02 +0000
commit113fe928bb71fc6d99b5b0c7220daa9d16359f43 (patch)
tree8f2edcd27b94ef11fcd171fe5ee739d24e0ea80b /lisp/subr.el
parent379ba58e7676783024bfd1cba67e0c9996ae250a (diff)
downloademacs-113fe928bb71fc6d99b5b0c7220daa9d16359f43.tar.gz
(with-local-quit): When handling `quit' signal,
make a chance for quit-flag to cause a quit.
Diffstat (limited to 'lisp/subr.el')
-rw-r--r--lisp/subr.el10
1 files changed, 8 insertions, 2 deletions
diff --git a/lisp/subr.el b/lisp/subr.el
index 67731f4d4c6..711f1822189 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -1617,7 +1617,7 @@ Optional DEFAULT is a default password to use instead of empty input.
This function echoes `.' for each character that the user types.
The user ends with RET, LFD, or ESC. DEL or C-h rubs out. C-u kills line.
C-g quits; if `inhibit-quit' was non-nil around this function,
-then it returns nil if the user types C-g.
+then it returns nil if the user types C-g, but quit-flag remains set.
Once the caller uses the password, it can erase the password
by doing (clear-string STRING)."
@@ -2321,7 +2321,13 @@ is allowed once again."
`(condition-case nil
(let ((inhibit-quit nil))
,@body)
- (quit (setq quit-flag t) nil)))
+ (quit (setq quit-flag t)
+ ;; This call is to give a chance to handle quit-flag
+ ;; in case inhibit-quit is nil.
+ ;; Without this, it will not be handled until the next function
+ ;; call, and that might allow it to exit thru a condition-case
+ ;; that intends to handle the quit signal next time.
+ (eval '(ignore nil)))))
(defmacro while-no-input (&rest body)
"Execute BODY only as long as there's no pending input.