# HG changeset patch # User Richard M. Stallman # Date 1093881938 0 # Node ID 14c8ead25d142863a0d785db42e1276afb91deeb # Parent 8425c441196cbdeb8e1dfdd6ad0c5c6e25700c84 (prin1-char): Don't turn S-a into A. Don't return a string that would read as the wrong character code. diff -r 8425c441196c -r 14c8ead25d14 lisp/emacs-lisp/lisp-mode.el --- a/lisp/emacs-lisp/lisp-mode.el Sun Aug 29 20:57:42 2004 +0000 +++ b/lisp/emacs-lisp/lisp-mode.el Mon Aug 30 16:05:38 2004 +0000 @@ -460,26 +460,36 @@ (and (integerp char) (eventp char) (let ((c (event-basic-type char)) - (mods (event-modifiers char))) + (mods (event-modifiers char)) + string) ;; Prevent ?A from turning into ?\S-a. (if (and (memq 'shift mods) + (zerop (logand char ?\S-\^@)) (not (let ((case-fold-search nil)) (char-equal c (upcase c))))) (setq c (upcase c) mods nil)) - (concat - "?" - (mapconcat - (lambda (modif) - (cond ((eq modif 'super) "\\s-") - (t (string ?\\ (upcase (aref (symbol-name modif) 0)) ?-)))) - mods "") - (cond - ((memq c '(?\; ?\( ?\) ?\{ ?\} ?\[ ?\] ?\" ?\' ?\\)) (string ?\\ c)) - ((eq c 127) "\\C-?") - (t - (condition-case nil - (string c) - (error nil)))))))) + ;; What string are we considering using? + (condition-case nil + (setq string + (concat + "?" + (mapconcat + (lambda (modif) + (cond ((eq modif 'super) "\\s-") + (t (string ?\\ (upcase (aref (symbol-name modif) 0)) ?-)))) + mods "") + (cond + ((memq c '(?\; ?\( ?\) ?\{ ?\} ?\[ ?\] ?\" ?\' ?\\)) (string ?\\ c)) + ((eq c 127) "\\C-?") + (t + (string c))))) + (error nil)) + ;; Verify the string reads a CHAR, not to some other character. + ;; If it doesn't, return nil instead. + (and string + (= (car (read-from-string string)) char) + string)))) + (defun eval-last-sexp-1 (eval-last-sexp-arg-internal) "Evaluate sexp before point; print value in minibuffer.