Mercurial > emacs
changeset 56840:14c8ead25d14
(prin1-char): Don't turn S-a into A.
Don't return a string that would read as the wrong character code.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Mon, 30 Aug 2004 16:05:38 +0000 |
parents | 8425c441196c |
children | 8cb61798f706 |
files | lisp/emacs-lisp/lisp-mode.el |
diffstat | 1 files changed, 25 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- 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.