diff options
| author | Glenn Morris | 2011-07-15 19:59:25 -0400 |
|---|---|---|
| committer | Glenn Morris | 2011-07-15 19:59:25 -0400 |
| commit | 03ea5b873a2f8c5d19bfe0e5682a9700e86d1160 (patch) | |
| tree | d4413f2446c9e573bcc0794fc936aa4a040c2863 | |
| parent | c152c1d6bea9addaedf7a99eb33ff4d327ce7a5a (diff) | |
| download | emacs-03ea5b873a2f8c5d19bfe0e5682a9700e86d1160.tar.gz emacs-03ea5b873a2f8c5d19bfe0e5682a9700e86d1160.zip | |
* lisp/subr.el (read-char-choice): Respect help-form. (Bug#9001)
| -rw-r--r-- | lisp/ChangeLog | 1 | ||||
| -rw-r--r-- | lisp/subr.el | 43 |
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 @@ | |||
| 1 | 2011-07-15 Glenn Morris <rgm@gnu.org> | 1 | 2011-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 | ||
| 5 | 2011-07-09 Lawrence Mitchell <wence@gmx.li> | 6 | 2011-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 | |||
| 2145 | keyboard-quit events while waiting for a valid input." | 2145 | keyboard-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)) |