summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2016-11-25 12:06:26 +0200
committerEli Zaretskii <eliz@gnu.org>2016-11-25 12:06:26 +0200
commite0884f1d04d90458fb412a488bcda20a9d45bfa4 (patch)
treeb926e4a336ab96cb744dbfb96425d85ef49872af
parenta6213ce4b3ab8435de80e01f6df7de261a0a8c87 (diff)
downloademacs-e0884f1d04d90458fb412a488bcda20a9d45bfa4.tar.gz
Restore keystroke echo in 'C-q'
* lisp/simple.el (read-quoted-char): Use 'read-event' instead of 'read-key', to avoid losing the keystroke echo in 'C-q'. (Bug#24635)
-rw-r--r--lisp/simple.el20
1 files changed, 12 insertions, 8 deletions
diff --git a/lisp/simple.el b/lisp/simple.el
index 295f8c63867..162f6dd89c5 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -681,7 +681,7 @@ for numeric input."
(let ((message-log-max nil)
(help-events (delq nil (mapcar (lambda (c) (unless (characterp c) c))
help-event-list)))
- done (first t) (code 0) translated)
+ done (first t) (code 0) char translated)
(while (not done)
(let ((inhibit-quit first)
;; Don't let C-h or other help chars get the help
@@ -693,15 +693,21 @@ for numeric input."
or the octal character code.
RET terminates the character code and is discarded;
any other non-digit terminates the character code and is then used as input."))
- (setq translated (read-key (and prompt (format "%s-" prompt))))
+ (setq char (read-event (and prompt (format "%s-" prompt)) t))
(if inhibit-quit (setq quit-flag nil)))
+ ;; Translate TAB key into control-I ASCII character, and so on.
+ ;; Note: `read-char' does it using the `ascii-character' property.
+ ;; We tried using read-key instead, but that disables the keystroke
+ ;; echo produced by 'C-q', see bug#24635.
+ (let ((translation (lookup-key local-function-key-map (vector char))))
+ (setq translated (if (arrayp translation)
+ (aref translation 0)
+ char)))
(if (integerp translated)
(setq translated (char-resolve-modifiers translated)))
(cond ((null translated))
((not (integerp translated))
- (setq unread-command-events
- (nconc (listify-key-sequence (this-single-command-raw-keys))
- unread-command-events)
+ (setq unread-command-events (list char)
done t))
((/= (logand translated ?\M-\^@) 0)
;; Turn a meta-character into a character with the 0200 bit set.
@@ -720,9 +726,7 @@ any other non-digit terminates the character code and is then used as input."))
((and (not first) (eq translated ?\C-m))
(setq done t))
((not first)
- (setq unread-command-events
- (nconc (listify-key-sequence (this-single-command-raw-keys))
- unread-command-events)
+ (setq unread-command-events (list char)
done t))
(t (setq code translated
done t)))