[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#1104: pasting a password
From: |
Chong Yidong |
Subject: |
bug#1104: pasting a password |
Date: |
Sun, 16 Nov 2008 01:01:21 -0500 |
> DW> Login Name: myname
>
> DW> Login Password: {SHA}reallylongsodontaskmetotypeitinbyhandplease
>
> DW> Login URL: http://wiki.debian.org/UserPreferences
>
> The problem is C-y is just read as a raw character there at the
> mini buffer Password: prompt. emacs-w3m-version "1.4.263".
>
> KY> That's what `read-passwd' that is an Emacs function does. In
> KY> the function definition, the special keys that it handles are
> KY> only C-h, C-u and C-? (see the doc string).
The following patch allows yanking into the password prompt (I haven't
changed the docstring of read-passwd, which needs doing). What do
people think about the advisability of this?
Note, in particular, that we can detect any key that performs yank or
yank-pop by using `key-binding'---but it works only if the command is a
single-character key sequence. That's fine for C-y, but fails if the
user has customized `yank' to a two-character sequence. I don't see any
way around this, though.
Another shortcoming is that the user can no longer enter a literal C-y;
but this may be a negligble problem---currently, the user can't enter
C-u either, since C-u clears the field.
*** trunk/lisp/subr.el.~1.620.~ 2008-11-06 01:49:41.000000000 -0500
--- trunk/lisp/subr.el 2008-11-16 00:48:31.000000000 -0500
***************
*** 1818,1838 ****
(setq c (read-char-exclusive nil t))
(and (/= c ?\r) (/= c ?\n) (/= c ?\e)))
(clear-this-command-keys)
! (if (= c ?\C-u)
! (progn
! (and (arrayp pass) (clear-string pass))
! (setq pass ""))
! (if (and (/= c ?\b) (/= c ?\177))
! (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))
! (if (> (length pass) 0)
! (let ((new-pass (substring pass 0 -1)))
! (and (arrayp pass) (clear-string pass))
! (setq pass new-pass))))))
(message nil)
(or pass default "")))))
--- 1818,1845 ----
(setq c (read-char-exclusive nil t))
(and (/= c ?\r) (/= c ?\n) (/= c ?\e)))
(clear-this-command-keys)
! (cond ((= c ?\C-u)
! (and (arrayp pass) (clear-string pass))
! (setq pass ""))
! ((memq (key-binding (vector c))
! '(yank yank-pop))
! (let ((new-pass (concat pass
! (substring-no-properties
! (current-kill 0)))))
! (and (arrayp pass) (clear-string pass))
! (setq c ?\0)
! (setq pass new-pass)))
! ((and (/= c ?\b) (/= c ?\177))
! (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)
! (let ((new-pass (substring pass 0 -1)))
! (and (arrayp pass) (clear-string pass))
! (setq pass new-pass)))))
(message nil)
(or pass default "")))))
Diff finished. Sun Nov 16 00:51:53 2008
- bug#1104: pasting a password,
Chong Yidong <=