emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/subr.el,v


From: Chong Yidong
Subject: [Emacs-diffs] Changes to emacs/lisp/subr.el,v
Date: Sun, 16 Nov 2008 21:02:06 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Chong Yidong <cyd>      08/11/16 21:02:06

Index: subr.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/subr.el,v
retrieving revision 1.621
retrieving revision 1.622
diff -u -b -r1.621 -r1.622
--- subr.el     16 Nov 2008 20:02:49 -0000      1.621
+++ subr.el     16 Nov 2008 21:02:05 -0000      1.622
@@ -1811,16 +1811,27 @@
            (c 0)
            (echo-keystrokes 0)
            (cursor-in-echo-area t)
-           (message-log-max nil))
+           (message-log-max nil)
+           (stop-keys (list 'return ?\r ?\n ?\e))
+           (rubout-keys (list 'backspace ?\b ?\177)))
        (add-text-properties 0 (length prompt)
                             minibuffer-prompt-properties prompt)
        (while (progn (message "%s%s"
                               prompt
                               (make-string (length pass) ?.))
-                     (setq c (read-char-exclusive nil t))
-                     (and (/= c ?\r) (/= c ?\n) (/= c ?\e)))
+                     ;; We used to use read-char-exclusive, that that
+                     ;; gives funny behavior when the user presses,
+                     ;; e.g., the arrow keys.
+                     (setq c (read-event nil t))
+                     (not (memq c stop-keys)))
          (clear-this-command-keys)
-         (cond ((= c ?\C-u) ; kill line
+         (cond ((memq c rubout-keys) ; rubout
+                (when (> (length pass) 0)
+                  (let ((new-pass (substring pass 0 -1)))
+                    (and (arrayp pass) (clear-string pass))
+                    (setq pass new-pass))))
+               ((not (numberp c)))
+               ((= c ?\C-u) ; kill line
                 (and (arrayp pass) (clear-string pass))
                 (setq pass ""))
                ((= c ?\C-y) ; yank
@@ -1835,16 +1846,12 @@
                     (and (arrayp pass) (clear-string pass))
                     (setq c ?\0)
                     (setq pass new-pass))))
-               ((and (/= c ?\b) (/= c ?\177)) ; insert char
+               ((characterp c) ; insert char
                 (let* ((new-char (char-to-string c))
                        (new-pass (concat pass new-char)))
                   (and (arrayp pass) (clear-string pass))
                   (clear-string new-char)
                   (setq c ?\0)
-                  (setq pass new-pass)))
-               ((> (length pass) 0) ; rubout
-                (let ((new-pass (substring pass 0 -1)))
-                  (and (arrayp pass) (clear-string pass))
                   (setq pass new-pass)))))
        (message nil)
        (or pass default "")))))




reply via email to

[Prev in Thread] Current Thread [Next in Thread]