]> git.eshelyaron.com Git - emacs.git/commitdiff
(read-passwd): Renamed from read-password. New second arg CONFIRM.
authorRichard M. Stallman <rms@gnu.org>
Sun, 8 Mar 1998 00:16:38 +0000 (00:16 +0000)
committerRichard M. Stallman <rms@gnu.org>
Sun, 8 Mar 1998 00:16:38 +0000 (00:16 +0000)
lisp/subr.el

index c14a048fb5231f3214e5b41981aa8a97e80f537b..ba3d131776873d4d814e89f2a6930036093df552 100644 (file)
@@ -763,27 +763,38 @@ any other non-digit terminates the character code and is then used as input."))
       (setq first nil))
     code))
 
-(defun read-password (prompt &optional default)
-  "Read a password, echoing `.' for each character typed.
+(defun read-passwd (prompt &optional confirm default)
+  "Read a password, prompting with PROMPT.  Echo `.' for each character typed.
 End with RET, LFD, or ESC.  DEL or C-h rubs out.  C-u kills line.
-Optional DEFAULT is password to start with."
-  (let ((pass nil)
-       (c 0)
-       (echo-keystrokes 0)
-       (cursor-in-echo-area t))
-    (while (progn (message "%s%s"
-                          prompt
-                          (make-string (length pass) ?.))
-                 (setq c (read-char))
-                 (and (/= c ?\r) (/= c ?\n) (/= c ?\e)))
-      (if (= c ?\C-u)
-         (setq pass "")
-       (if (and (/= c ?\b) (/= c ?\177))
-           (setq pass (concat pass (char-to-string c)))
-         (if (> (length pass) 0)
-             (setq pass (substring pass 0 -1))))))
-    (message nil)
-    (or pass default "")))
+Optional argument CONFIRM, if non-nil, then read it twice to make sure.
+Optional DEFAULT is a default password to use instead of empty input."
+  (if confirm
+      (let (success)
+       (while (not success)
+         (let ((first (read-passwd prompt nil default))
+               (second (read-passwd "Confirm password: " nil default)))
+           (if (equal first second)
+               (setq success first)
+             (message "Password not repeated accurately; please start over")
+             (sit-for 1))))
+       success)
+    (let ((pass nil)
+         (c 0)
+         (echo-keystrokes 0)
+         (cursor-in-echo-area t))
+      (while (progn (message "%s%s"
+                            prompt
+                            (make-string (length pass) ?.))
+                   (setq c (read-char))
+                   (and (/= c ?\r) (/= c ?\n) (/= c ?\e)))
+       (if (= c ?\C-u)
+           (setq pass "")
+         (if (and (/= c ?\b) (/= c ?\177))
+             (setq pass (concat pass (char-to-string c)))
+           (if (> (length pass) 0)
+               (setq pass (substring pass 0 -1))))))
+      (message nil)
+      (or pass default ""))))
 \f
 (defun force-mode-line-update (&optional all)
   "Force the mode-line of the current buffer to be redisplayed.