unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Yuri Khan <yuri.v.khan@gmail.com>
To: Marcin Borkowski <mbork@mbork.pl>
Cc: Po Lu <luangruo@yahoo.com>,
	Help Gnu Emacs mailing list <help-gnu-emacs@gnu.org>
Subject: Re: How to read an integer from the minibuffer
Date: Fri, 12 Nov 2021 14:21:32 +0700	[thread overview]
Message-ID: <CAP_d_8VnfQafo6a=7CN+U7zfD7g+eA+LUT38m_2oJRVfbiArDQ@mail.gmail.com> (raw)
In-Reply-To: <87czn7qhx7.fsf@mbork.pl>

On Thu, 11 Nov 2021 at 14:19, Marcin Borkowski <mbork@mbork.pl> wrote:

> >> How do I do that?  One way would be to use `read-from-minibuffer' with
> >> a suitable keymap, but that seems slightly low-level.  If that is the
> >> way to go, is there a good way to set up a keymap so that nothing except
> >> some specified characters are self-inserting?  IOW, is `suppress-keymap'
> >> the way to go or is there some other way?
> >
> > Perhaps you're looking for `read-number'?
>
> Thanks, that is nice, but not very general.  Another value I want to
> read is a time in the hh:mm format, for example.

There are lots of examples out there of form controls trying to
prevent the user from entering invalid data, and they demonstrate many
things you can get wrong while implementing one.

A form control for integer numbers only permits typing digits (as you
initially asked). Now the user cannot enter -42.

Okay, after a bug report and a fix, the control now permits the minus
sign. But the control validates the entry after every keypress, so, as
soon as the user starts typing, they are presented with an error
message, “‘-’ is not a valid integer”. Well, duh, I just started
typing, let me finish it!

My bank’s money transfer web form’s amount field filters keypresses to
only allow digits. One, I cannot paste a number I copied from an
invoice opened elsewhere. Two, I cannot press Ctrl+L to activate my
browser’s address bar, or switch to another tab with Ctrl+PgUp,
Ctrl+PgDn, or Alt+[1…9]. Three, I can’t move my cursor if I
inadvertently skip or mistype a digit, e.g., to correct a 1000 to
15000, I cannot type ‘← ← ← 5’, I have to type ‘backspace backspace
backspace 5 0 0 0’.

A license activation input box in a proprietary software installer
wants a string of 20 semi-random letters. Since no one can reliably
enter that in one go, it splits those 20 letters into 4 groups of 5
and presents them as separate input boxes. As a courtesy to the user,
as soon as 5 letters are typed in the first box, the cursor
automatically moves to the second box. However, if you mistype the
last of those 5 letters, Backspace does not delete it, because
technically you’re in the second box and it’s technically empty,
there’s nothing to delete. Also, you can’t paste the whole 20-letter
code in one go, because the first box is limited to 5 letters.

A bank money transfer is confirmed with a 4-digit code that is sent in
an SMS message. As soon as you type the 4th digit, it goes on to
verify the code, without you having to press Enter. However, this
means you cannot immediately correct a mistyped 4th digit; you get a
“verification failed” message first.


Guideline: Perform input validation only after the user has indicated
they are finished with data entry.



  reply	other threads:[~2021-11-12  7:21 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-11  4:53 How to read an integer from the minibuffer Marcin Borkowski
2021-11-11  5:11 ` Po Lu
2021-11-11  7:18   ` Marcin Borkowski
2021-11-12  7:21     ` Yuri Khan [this message]
2021-11-13  6:59       ` Marcin Borkowski
2021-11-13  8:43         ` tomas
2021-11-13  7:33       ` Jean Louis
2021-11-16  6:39         ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-16  7:37           ` Yuri Khan
2021-11-16  8:00             ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-11  6:27 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-11 10:25 ` Gregory Heytings
2021-11-11 10:28   ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-11 11:00     ` Gregory Heytings
2021-11-11 13:20       ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-11 11:17 ` Gregory Heytings
2021-11-11 13:39   ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-11 14:30     ` Gregory Heytings
2021-11-12  0:28       ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-12  0:37         ` Gregory Heytings
2021-11-12  0:41           ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-12  0:52             ` Gregory Heytings
2021-11-12  0:57               ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-12 19:05                 ` Jean Louis
2021-11-12 19:25                   ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-12 19:55                     ` Jean Louis
2021-11-12 21:14                       ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-13  6:37                         ` Jean Louis
2021-11-16  6:21                           ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-12 19:56                     ` Jean Louis
2021-11-12 20:02                     ` Jean Louis
2021-11-12 20:24                       ` tomas
2021-11-12 21:15                         ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-12 21:30                           ` tomas
2021-11-12 21:34                             ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-13  6:46                           ` Jean Louis
2021-11-13  7:32                             ` tomas
2021-11-16  6:24                             ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-13  6:36                         ` Jean Louis
2021-11-13  8:17                           ` tomas
2021-11-13  8:44                             ` Jean Louis
2021-11-16  6:15                               ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-16  6:03                             ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-12  1:09               ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-12  1:12                 ` Gregory Heytings
2021-11-12  3:07                   ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-12  6:21 ` Marcin Borkowski
2021-11-16  7:52   ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-16  8:05     ` Yuri Khan
2021-11-16  9:38       ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-16 11:18         ` Yuri Khan
2021-11-16 11:37           ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-16 11:52             ` Yuri Khan
2021-11-16 12:00               ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-11-16 13:10               ` Emanuel Berg via Users list for the GNU Emacs text editor

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAP_d_8VnfQafo6a=7CN+U7zfD7g+eA+LUT38m_2oJRVfbiArDQ@mail.gmail.com' \
    --to=yuri.v.khan@gmail.com \
    --cc=help-gnu-emacs@gnu.org \
    --cc=luangruo@yahoo.com \
    --cc=mbork@mbork.pl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).