]> code.delx.au - gnu-emacs/blobdiff - lisp/subr.el
Merge from mainline.
[gnu-emacs] / lisp / subr.el
index 9b557dcfd208c37adef77b126f1b102a30f8bd77..fad624f6a50cd294e384975cc7fb62d6b063d705 100644 (file)
@@ -2154,6 +2154,13 @@ any other non-digit terminates the character code and is then used as input."))
       (setq first nil))
     code))
 
+(defconst read-passwd-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map minibuffer-local-map)
+    (define-key map "\C-u" #'delete-minibuffer-contents) ;bug#12570
+    map)
+  "Keymap used while reading passwords.")
+
 (defun read-passwd (prompt &optional confirm default)
   "Read a password, prompting with PROMPT, and return it.
 If optional CONFIRM is non-nil, read the password twice to make sure.
@@ -2191,18 +2198,11 @@ by doing (clear-string STRING)."
             (setq minibuf (current-buffer))
             ;; Turn off electricity.
             (set (make-local-variable 'post-self-insert-hook) nil)
+            (use-local-map read-passwd-map)
             (add-hook 'after-change-functions hide-chars-fun nil 'local))
         (unwind-protect
-            (let ((enable-recursive-minibuffers t)
-                 (map minibuffer-local-map)
-                 result)
-             (define-key map "\C-u"    ; bug#12570
-               (lambda () (interactive) (delete-minibuffer-contents)))
-             (setq result
-                   ;; t = no history.
-                   (read-from-minibuffer prompt nil map nil t default))
-             (if (and (equal "" result) default) default
-               result))
+            (let ((enable-recursive-minibuffers t))
+              (read-string prompt nil t default)) ; t = "no history"
           (when (buffer-live-p minibuf)
             (with-current-buffer minibuf
               ;; Not sure why but it seems that there might be cases where the