aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlenn Morris2011-07-15 19:59:25 -0400
committerGlenn Morris2011-07-15 19:59:25 -0400
commit03ea5b873a2f8c5d19bfe0e5682a9700e86d1160 (patch)
treed4413f2446c9e573bcc0794fc936aa4a040c2863
parentc152c1d6bea9addaedf7a99eb33ff4d327ce7a5a (diff)
downloademacs-03ea5b873a2f8c5d19bfe0e5682a9700e86d1160.tar.gz
emacs-03ea5b873a2f8c5d19bfe0e5682a9700e86d1160.zip
* lisp/subr.el (read-char-choice): Respect help-form. (Bug#9001)
-rw-r--r--lisp/ChangeLog1
-rw-r--r--lisp/subr.el43
2 files changed, 27 insertions, 17 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 1a2c8daed5b..5efd11e542b 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,6 +1,7 @@
12011-07-15 Glenn Morris <rgm@gnu.org> 12011-07-15 Glenn Morris <rgm@gnu.org>
2 2
3 * subr.el (read-char-choice): Allow quitting. (Bug#9001) 3 * subr.el (read-char-choice): Allow quitting. (Bug#9001)
4 Respect help-form.
4 5
52011-07-09 Lawrence Mitchell <wence@gmx.li> 62011-07-09 Lawrence Mitchell <wence@gmx.li>
6 7
diff --git a/lisp/subr.el b/lisp/subr.el
index d462283b7bd..ef19797012a 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -2145,25 +2145,34 @@ If optional argument INHIBIT-KEYBOARD-QUIT is non-nil, ignore
2145keyboard-quit events while waiting for a valid input." 2145keyboard-quit events while waiting for a valid input."
2146 (unless (consp chars) 2146 (unless (consp chars)
2147 (error "Called `read-char-choice' without valid char choices")) 2147 (error "Called `read-char-choice' without valid char choices"))
2148 (let (char done) 2148 (let (char done show-help (helpbuf " *Char Help*"))
2149 (let ((cursor-in-echo-area t) 2149 (let ((cursor-in-echo-area t)
2150 (executing-kbd-macro executing-kbd-macro)) 2150 (executing-kbd-macro executing-kbd-macro))
2151 (while (not done) 2151 (save-window-excursion ; in case we call help-form-show
2152 (unless (get-text-property 0 'face prompt) 2152 (while (not done)
2153 (setq prompt (propertize prompt 'face 'minibuffer-prompt))) 2153 (unless (get-text-property 0 'face prompt)
2154 (setq char (let ((inhibit-quit inhibit-keyboard-quit)) 2154 (setq prompt (propertize prompt 'face 'minibuffer-prompt)))
2155 (read-key prompt))) 2155 (setq char (let ((inhibit-quit inhibit-keyboard-quit))
2156 (cond 2156 (read-key prompt)))
2157 ((not (numberp char))) 2157 (and show-help (buffer-live-p helpbuf)
2158 ((memq char chars) 2158 (kill-buffer helpbuf))
2159 (setq done t)) 2159 (cond
2160 ((and executing-kbd-macro (= char -1)) 2160 ((not (numberp char)))
2161 ;; read-event returns -1 if we are in a kbd macro and 2161 ;; If caller has set help-form, that's enough.
2162 ;; there are no more events in the macro. Attempt to 2162 ;; They don't explicitly have to add help-char to chars.
2163 ;; get an event interactively. 2163 ((and help-form
2164 (setq executing-kbd-macro nil)) 2164 (eq char help-char)
2165 ((and (not inhibit-keyboard-quit) (eq char ?\C-g)) 2165 (setq show-help t)
2166 (keyboard-quit))))) 2166 (help-form-show)))
2167 ((memq char chars)
2168 (setq done t))
2169 ((and executing-kbd-macro (= char -1))
2170 ;; read-event returns -1 if we are in a kbd macro and
2171 ;; there are no more events in the macro. Attempt to
2172 ;; get an event interactively.
2173 (setq executing-kbd-macro nil))
2174 ((and (not inhibit-keyboard-quit) (eq char ?\C-g))
2175 (keyboard-quit))))))
2167 ;; Display the question with the answer. But without cursor-in-echo-area. 2176 ;; Display the question with the answer. But without cursor-in-echo-area.
2168 (message "%s%s" prompt (char-to-string char)) 2177 (message "%s%s" prompt (char-to-string char))
2169 char)) 2178 char))