diff --git a/lisp/subr.el b/lisp/subr.el index 06ea503da6..da9253cedd 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -2820,6 +2820,7 @@ read-passwd-map ;; minibuffer-local-map along the way! (let ((map (make-sparse-keymap))) (set-keymap-parent map minibuffer-local-map) + (define-key map "\C-c\C-c" #'read-passwd-toggle-visibility) (define-key map "\C-u" #'delete-minibuffer-contents) ;bug#12570 map) "Keymap used while reading passwords.") @@ -2830,6 +2831,14 @@ read-password--hide-password (put-text-property (+ i beg) (+ 1 i beg) 'display (string (or read-hide-char ?*)))))) +(defun read-passwd-toggle-visibility () + (interactive) + (if (member #'read-password--hide-password post-command-hook) + (progn + (remove-hook 'post-command-hook #'read-password--hide-password t) + (remove-text-properties (minibuffer-prompt-end) (point-max) '(display))) + (add-hook 'post-command-hook #'read-password--hide-password nil t))) + (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.