# HG changeset patch # User Richard M. Stallman # Date 1049411618 0 # Node ID 6ce9db7934cb67e1c28ba80a95e023b537735b44 # Parent 23d82f089582fffe706d1b85dd084c9ace8beb37 (read-quoted-char): Remember the input char before translation thru function-key-map, and use that for unreading. diff -r 23d82f089582 -r 6ce9db7934cb lisp/subr.el --- a/lisp/subr.el Thu Apr 03 23:11:06 2003 +0000 +++ b/lisp/subr.el Thu Apr 03 23:13:38 2003 +0000 @@ -1104,7 +1104,7 @@ The optional argument PROMPT specifies a string to use to prompt the user. The variable `read-quoted-char-radix' controls which radix to use for numeric input." - (let ((message-log-max nil) done (first t) (code 0) char) + (let ((message-log-max nil) done (first t) (code 0) char translated) (while (not done) (let ((inhibit-quit first) ;; Don't let C-h get the help message--only help function keys. @@ -1121,32 +1121,32 @@ ;; We could try and use read-key-sequence instead, but then C-q ESC ;; or C-q C-x might not return immediately since ESC or C-x might be ;; bound to some prefix in function-key-map or key-translation-map. - (and char - (let ((translated (lookup-key function-key-map (vector char)))) - (if (arrayp translated) - (setq char (aref translated 0))))) - (cond ((null char)) - ((not (integerp char)) - (setq unread-command-events (listify-key-sequence (this-single-command-raw-keys)) + (setq translated char) + (let ((translation (lookup-key function-key-map (vector char)))) + (if (arrayp translation) + (setq translated (aref translation 0)))) + (cond ((null translated)) + ((not (integerp translated)) + (setq unread-command-events (list char) done t)) - ((/= (logand char ?\M-\^@) 0) + ((/= (logand translated ?\M-\^@) 0) ;; Turn a meta-character into a character with the 0200 bit set. - (setq code (logior (logand char (lognot ?\M-\^@)) 128) + (setq code (logior (logand translated (lognot ?\M-\^@)) 128) done t)) - ((and (<= ?0 char) (< char (+ ?0 (min 10 read-quoted-char-radix)))) - (setq code (+ (* code read-quoted-char-radix) (- char ?0))) - (and prompt (setq prompt (message "%s %c" prompt char)))) - ((and (<= ?a (downcase char)) - (< (downcase char) (+ ?a -10 (min 26 read-quoted-char-radix)))) + ((and (<= ?0 translated) (< translated (+ ?0 (min 10 read-quoted-char-radix)))) + (setq code (+ (* code read-quoted-char-radix) (- translated ?0))) + (and prompt (setq prompt (message "%s %c" prompt translated)))) + ((and (<= ?a (downcase translated)) + (< (downcase translated) (+ ?a -10 (min 26 read-quoted-char-radix)))) (setq code (+ (* code read-quoted-char-radix) - (+ 10 (- (downcase char) ?a)))) - (and prompt (setq prompt (message "%s %c" prompt char)))) - ((and (not first) (eq char ?\C-m)) + (+ 10 (- (downcase translated) ?a)))) + (and prompt (setq prompt (message "%s %c" prompt translated)))) + ((and (not first) (eq translated ?\C-m)) (setq done t)) ((not first) - (setq unread-command-events (listify-key-sequence (this-single-command-raw-keys)) + (setq unread-command-events (list char) done t)) - (t (setq code char + (t (setq code translated done t))) (setq first nil)) code))