From 44071d6b2ca7de02160903e46d47e9037acd7627 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Sun, 8 Mar 1998 00:16:38 +0000 Subject: [PATCH] (read-passwd): Renamed from read-password. New second arg CONFIRM. --- lisp/subr.el | 51 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/lisp/subr.el b/lisp/subr.el index c14a048fb52..ba3d1317768 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -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 "")))) (defun force-mode-line-update (&optional all) "Force the mode-line of the current buffer to be redisplayed. -- 2.39.2