unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#3287: GNU/Emacs bug when typed in prompt password fields using keypad
@ 2009-05-14 15:52 ` Borja Tarraso Hueso
  2009-08-20 20:02   ` bug#3287: marked as done (GNU/Emacs bug when typed in prompt password fields using keypad) Emacs bug Tracking System
  0 siblings, 1 reply; 2+ messages in thread
From: Borja Tarraso Hueso @ 2009-05-14 15:52 UTC (permalink / raw)
  To: bug-gnu-emacs

[-- Attachment #1: Type: text/plain, Size: 5066 bytes --]

Hi people,

I just found a bug when is used keypad under password input field in emacs,
that's not doing anything, so these diffs provided by Stefan and slightly
modified by us, to handle C-g case, fix the problem<monnier@iro.umontreal.ca>
.

==> Bug:

Under GNU/Linux trying to write numbers using keypad in a prompt input
password field does not works. This is not happening under Windows OS. Not
other OS tested.

This is reproducible in any gnu/emacs version from cvs (e.g. 23.0.90.2).

==> Fix:

Usage of read-key instead read-event. As read-key is getting each key but
not inserted and handled until pressed return, so we should take care about
C-g case as well to provide user's cancellation.

==> Diffs:

*** emacs/lisp/subr.el  2009-02-14 09:06:56.000000000 +0000
--- emacs_hack/lisp/subr.el     2009-05-14 01:29:52.000000000 +0100
***************
*** 1721,1726 ****
--- 1721,1767 ----
- Mostrar texto citado -


 ;;;; Input and display facilities.

+ (defconst read-key-empty-map (make-sparse-keymap))
+ (defvar read-key-delay 0.1)
+
+ (defun read-key (&optional prompt)
+   "Read a key from the keyboard.
+ Contrary to `read-event' this will not return a raw event but instead will
+ obey the input decoding and translations usually done by
`read-key-sequence'.
+ So escape sequences and keyboard encoding are taken into account.
+ When there's an ambiguity because the key looks like the prefix of
+ some sort of escape sequence, the ambiguity is resolved via
`read-key-delay'."
+   (let ((overriding-terminal-local-map read-key-empty-map)
+       (overriding-local-map nil)
+       (old-global-map (current-global-map))
+         (timer (run-with-idle-timer
+                 ;; Wait long enough that Emacs has the time to receive and
+                 ;; process all the raw events associated with the
single-key.
+                 ;; But don't wait too long, or the user may find the delay
+                 ;; annoying (or keep hitting more keys which may then get
+                 ;; lost or misinterpreted).
+                 ;; This is only relevant for keys which Emacs perceives as
+                 ;; "prefixes", such as C-x (because of the C-x 8 map in
+                 ;; key-translate-table and the C-x @ map in
function-key-map)
+                 ;; or ESC (because of terminal escape sequences in
+                 ;; input-decode-map).
+                 read-key-delay t
+                 (lambda ()
+                   (let ((keys (this-command-keys-vector)))
+                     (unless (zerop (length keys))
+                       ;; `keys' is non-empty, so the user has hit at least
+                       ;; one key; there's no point waiting any longer,
even
+                       ;; though read-key-sequence thinks we should wait
+                       ;; for more input to decide how to interpret the
+                       ;; current input.
+                       (throw 'read-key keys)))))))
+     (unwind-protect
+         (progn
+         (use-global-map read-key-empty-map)
+         (aref (catch 'read-key (read-key-sequence prompt nil t)) 0))
+       (cancel-timer timer)
+       (use-global-map old-global-map))))
+
 (defvar read-quoted-char-radix 8
   "*Radix for \\[quoted-insert] and other uses of `read-quoted-char'.
 Legitimate radix values are 8, 10 and 16.")
***************
*** 1837,1846 ****
        (while (progn (message "%s%s"
                              prompt
                              (make-string (length pass) ?.))
!                     ;; We used to use read-char-exclusive, but that
!                     ;; gives funny behavior when the user presses,
!                     ;; e.g., the arrow keys.
!                     (setq c (read-event nil t))
                      (not (memq c stop-keys)))
         (clear-this-command-keys)
         (cond ((memq c rubout-keys) ; rubout
--- 1878,1884 ----
        (while (progn (message "%s%s"
                              prompt
                              (make-string (length pass) ?.))
!                     (setq c (read-key))
                      (not (memq c stop-keys)))
         (clear-this-command-keys)
         (cond ((memq c rubout-keys) ; rubout
***************
*** 1848,1855 ****
                  (let ((new-pass (substring pass 0 -1)))
                     (and (arrayp pass) (clear-string pass))
                    (setq pass new-pass))))
               ((not (numberp c)))
!               ((= c ?\C-u) ; kill line
                (and (arrayp pass) (clear-string pass))
                 (setq pass ""))
               ((= c ?\C-y) ; yank
--- 1886,1895 ----
                  (let ((new-pass (substring pass 0 -1)))
                     (and (arrayp pass) (clear-string pass))
                    (setq pass new-pass))))
+               ((eq c ?\C-g)
+                (keyboard-quit))
               ((not (numberp c)))
!               ((eq c ?\C-u) ; kill line
                 (and (arrayp pass) (clear-string pass))
                 (setq pass ""))
               ((= c ?\C-y) ; yank


==> End.

Thanks!

Borja Tarraso

[-- Attachment #2: Type: text/html, Size: 6133 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

* bug#3287: marked as done (GNU/Emacs bug when typed in prompt password fields using keypad)
  2009-05-14 15:52 ` bug#3287: GNU/Emacs bug when typed in prompt password fields using keypad Borja Tarraso Hueso
@ 2009-08-20 20:02   ` Emacs bug Tracking System
  0 siblings, 0 replies; 2+ messages in thread
From: Emacs bug Tracking System @ 2009-08-20 20:02 UTC (permalink / raw)
  To: Stefan Monnier

[-- Attachment #1: Type: text/plain, Size: 931 bytes --]

Your message dated Wed, 19 Aug 2009 15:48:07 -0400
with message-id <jwvab1v8u41.fsf-monnier+emacsbugreports@gnu.org>
and subject line Re: GNU/Emacs bug when typed in prompt password fields using keypad
has caused the Emacs bug report #3287,
regarding GNU/Emacs bug when typed in prompt password fields using keypad
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@emacsbugs.donarmstrong.com
immediately.)


-- 
3287: http://emacsbugs.donarmstrong.com/cgi-bin/bugreport.cgi?bug=3287
Emacs Bug Tracking System
Contact owner@emacsbugs.donarmstrong.com with problems

[-- Attachment #2: Type: message/rfc822, Size: 15497 bytes --]

[-- Attachment #2.1.1: Type: text/plain, Size: 5066 bytes --]

Hi people,

I just found a bug when is used keypad under password input field in emacs,
that's not doing anything, so these diffs provided by Stefan and slightly
modified by us, to handle C-g case, fix the problem<monnier@iro.umontreal.ca>
.

==> Bug:

Under GNU/Linux trying to write numbers using keypad in a prompt input
password field does not works. This is not happening under Windows OS. Not
other OS tested.

This is reproducible in any gnu/emacs version from cvs (e.g. 23.0.90.2).

==> Fix:

Usage of read-key instead read-event. As read-key is getting each key but
not inserted and handled until pressed return, so we should take care about
C-g case as well to provide user's cancellation.

==> Diffs:

*** emacs/lisp/subr.el  2009-02-14 09:06:56.000000000 +0000
--- emacs_hack/lisp/subr.el     2009-05-14 01:29:52.000000000 +0100
***************
*** 1721,1726 ****
--- 1721,1767 ----
- Mostrar texto citado -


 ;;;; Input and display facilities.

+ (defconst read-key-empty-map (make-sparse-keymap))
+ (defvar read-key-delay 0.1)
+
+ (defun read-key (&optional prompt)
+   "Read a key from the keyboard.
+ Contrary to `read-event' this will not return a raw event but instead will
+ obey the input decoding and translations usually done by
`read-key-sequence'.
+ So escape sequences and keyboard encoding are taken into account.
+ When there's an ambiguity because the key looks like the prefix of
+ some sort of escape sequence, the ambiguity is resolved via
`read-key-delay'."
+   (let ((overriding-terminal-local-map read-key-empty-map)
+       (overriding-local-map nil)
+       (old-global-map (current-global-map))
+         (timer (run-with-idle-timer
+                 ;; Wait long enough that Emacs has the time to receive and
+                 ;; process all the raw events associated with the
single-key.
+                 ;; But don't wait too long, or the user may find the delay
+                 ;; annoying (or keep hitting more keys which may then get
+                 ;; lost or misinterpreted).
+                 ;; This is only relevant for keys which Emacs perceives as
+                 ;; "prefixes", such as C-x (because of the C-x 8 map in
+                 ;; key-translate-table and the C-x @ map in
function-key-map)
+                 ;; or ESC (because of terminal escape sequences in
+                 ;; input-decode-map).
+                 read-key-delay t
+                 (lambda ()
+                   (let ((keys (this-command-keys-vector)))
+                     (unless (zerop (length keys))
+                       ;; `keys' is non-empty, so the user has hit at least
+                       ;; one key; there's no point waiting any longer,
even
+                       ;; though read-key-sequence thinks we should wait
+                       ;; for more input to decide how to interpret the
+                       ;; current input.
+                       (throw 'read-key keys)))))))
+     (unwind-protect
+         (progn
+         (use-global-map read-key-empty-map)
+         (aref (catch 'read-key (read-key-sequence prompt nil t)) 0))
+       (cancel-timer timer)
+       (use-global-map old-global-map))))
+
 (defvar read-quoted-char-radix 8
   "*Radix for \\[quoted-insert] and other uses of `read-quoted-char'.
 Legitimate radix values are 8, 10 and 16.")
***************
*** 1837,1846 ****
        (while (progn (message "%s%s"
                              prompt
                              (make-string (length pass) ?.))
!                     ;; We used to use read-char-exclusive, but that
!                     ;; gives funny behavior when the user presses,
!                     ;; e.g., the arrow keys.
!                     (setq c (read-event nil t))
                      (not (memq c stop-keys)))
         (clear-this-command-keys)
         (cond ((memq c rubout-keys) ; rubout
--- 1878,1884 ----
        (while (progn (message "%s%s"
                              prompt
                              (make-string (length pass) ?.))
!                     (setq c (read-key))
                      (not (memq c stop-keys)))
         (clear-this-command-keys)
         (cond ((memq c rubout-keys) ; rubout
***************
*** 1848,1855 ****
                  (let ((new-pass (substring pass 0 -1)))
                     (and (arrayp pass) (clear-string pass))
                    (setq pass new-pass))))
               ((not (numberp c)))
!               ((= c ?\C-u) ; kill line
                (and (arrayp pass) (clear-string pass))
                 (setq pass ""))
               ((= c ?\C-y) ; yank
--- 1886,1895 ----
                  (let ((new-pass (substring pass 0 -1)))
                     (and (arrayp pass) (clear-string pass))
                    (setq pass new-pass))))
+               ((eq c ?\C-g)
+                (keyboard-quit))
               ((not (numberp c)))
!               ((eq c ?\C-u) ; kill line
                 (and (arrayp pass) (clear-string pass))
                 (setq pass ""))
               ((= c ?\C-y) ; yank


==> End.

Thanks!

Borja Tarraso

[-- Attachment #2.1.2: Type: text/html, Size: 6133 bytes --]

[-- Attachment #3: Type: message/rfc822, Size: 1667 bytes --]

From: Stefan Monnier <monnier@iro.umontreal.ca>
To: Borja Tarraso Hueso <borja.tarraso.hueso@googlemail.com>
Subject: Re: GNU/Emacs bug when typed in prompt password fields using keypad
Date: Wed, 19 Aug 2009 15:48:07 -0400
Message-ID: <jwvab1v8u41.fsf-monnier+emacsbugreports@gnu.org>

I've just installed a patch that uses read-key into the CVS trunk.
So, I believe the problem is now fixed,


        Stefan

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-08-20 20:02 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <jwvab1v8u41.fsf-monnier+emacsbugreports@gnu.org>
2009-05-14 15:52 ` bug#3287: GNU/Emacs bug when typed in prompt password fields using keypad Borja Tarraso Hueso
2009-08-20 20:02   ` bug#3287: marked as done (GNU/Emacs bug when typed in prompt password fields using keypad) Emacs bug Tracking System

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).