unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Drew Adams <drew.adams@oracle.com>
To: HaiJun Zhang <netjune@outlook.com>, Juri Linkov <juri@linkov.net>,
	Eli Zaretskii <eliz@gnu.org>
Cc: 38457@debbugs.gnu.org, stephen.berman@gmx.net
Subject: bug#38457: 27.0.50; dabbrev-expand regression due to message change
Date: Tue, 10 Dec 2019 09:51:59 -0800 (PST)	[thread overview]
Message-ID: <22c4d2d5-be81-471e-a521-4756d08f0c16@default> (raw)
In-Reply-To: <PS1PR03MB3606267CCD08725BFF6BEC85B75B0@PS1PR03MB3606.apcprd03.prod.outlook.com>

> This is not a big problem. But minibuffer is a
> basic UI of emacs. If it always has these bugs, 
> users may think that minibuffer is not a good 
> design.

The minibuffer does _not_ "have these bugs".
The problem is not the minibuffer.

The problems are (1) asynchronous reporting
that simply fires off a `message' blindly and
(2) read-key interaction misused for important,
essentially modal dialog, which, if during a
minibuffer interaction, can be problematic.

Emacs should provide other, safer ways to
report status or impose a separate, modal
dialog - ways that don't interfere with the
minibuffer or the echo area.

`message-box' and similar might be a start.
But the behavior should be loggable, and it
should be manipulable by program in various
ways (prompting, whether modal, etc.), and
it should be customizable by users.

And developers should then be encouraged to
change any existing code that provides async
reporting or intermediate `y-or-n-p'-style
dialogs to use the new constructs.

At least those who use such things should be
made aware that if they interrupt ongoing
interactions then they can cause trouble.
___

And for the record, I disagree with simply
automatically converting `message' behavior
to `minibuffer-message' behavior in any
systematic way.

And I disagree with replacing `read-key'
behavior for code like `y-or-n-p' with
some read-from-the-minibuffer behavior in
any systematic way.

Some given uses of these things might be
misguided and could be switched to using
`minibuffer-message' - i.e., case by case.
I'm not against `minibuffer-message' - it
has its uses.  But its uses mainly involve
providing feedback about the ongoing
minibuffer interaction - not reporting an
outside event.

One of the demonstrations of the "dangerous
problem" was from Juri changing the value of
variable `dired-deletion-confirmer' (which
is _not_ a user option) from `yes-or-no-p'
to `y-or-n-p', and then pointing to a
resulting possible loss of user data.

Well, duh - don't do that.  That variable is
there presumably for possible use by code in
a context where the deletion dialog is sure,
and controlled in some way.

Many users seem to have chosen to just
replace `yes-or-no-p' with `y-or-n-p, e.g.
by aliasing.  I think this is a practice
that should be discouraged, or at least
shouldn't be encouraged.  Code that uses
`yes-or-no-p' should be able to depend on
its response not getting lost.  Blindly
substituting `y-or-n-p' is a bad idea, IMO.

Like the problem of async reporting, reading
a key/char can be problematic.  Emacs can
hopefully come up with additional ways,
better in some contexts, to prompt for a key
that reduce or eliminate the problem.  But
foregoing quick key/char reading by forcing
use of the minibuffer is a bad "fix".

Yes, there is a _real_ problem to be solved.
There may even be more than one problem.
(Async reporting is not the same as reading
a key/char.  The fixes are not necessarily
the same.)

But no, the one-size-fits-all approach taken
so far is not a good solution, IMO.

It screws the minibuffer - an editable
buffer allowing complex user interactions.

It screws with the difference, when using
the minibuffer, between (1) the behavior of
`message' (use the echo area, temporal
interruption dismissable by typing) and (2)
that of `minibuffer-message' (append output
to the minibuffer input, no interruption -
interfere spatially, not temporally).

Each of those, minibuffer-message' and
`message', has its particular uses and
behavior while the minibuffer is active.
And the various key/char-reading functions
also have their particular uses.  None of
these should be tossed or stifled.

Throwing all that to the wind, neutering
it with a one-size-fits-all behavior, is a
step backward.  We should fix the various
problems carefully - very carefully, and
in context.

Don't start with the supposition that the
minibuffer is the problem.  It's code that
interferes with a minibuffer interaction
that's the problem.

Whether, when, and how to interrupt an
existing dialog is the question.  The
answer is, "it depends".

Emacs should be able to let a minibuffer
interaction coexist safely with async
reporting or key/char reading - without
just stuffing in timeouts and tossing
everything into `minibuffer-message'.

In some cases an interaction (user dialog)
may need to be _modal_ - finish reading a
confirmation before allowing other action.
This is about such an interaction coming
about while another, minibuffer, dialog
already exists.

In other cases that's not necessary.  The
calling code that prompts for what should
be a modal interaction should DTRT.  It's
not up to another, minibuffer, interaction
to protect against such disruption.
___

Just one opinion - expressed in more detail
in this and some other bug threads.

The fact that this "fix" is spread over
several bug threads, dealing with different 
problematic behaviors, is perhaps a sign
that this approach is not TRT.

And such a far-reaching change should, I
think, have been discussed in emacs-devel.

Instead, in these bug threads we've been
told that this is only a minor, localized
change that will not affect 3rd-party code.
That does _not_ seem to be the case, and I
don't see how it could be.





  parent reply	other threads:[~2019-12-10 17:51 UTC|newest]

Thread overview: 115+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-02 11:06 bug#38457: 27.0.50; dabbrev-expand regression due to message change Stephen Berman
2019-12-02 16:02 ` Eli Zaretskii
2019-12-02 23:00 ` Juri Linkov
2019-12-03  0:15   ` Stephen Berman
2019-12-03  3:36   ` Eli Zaretskii
2019-12-03 23:44     ` Juri Linkov
2019-12-04  3:38       ` Eli Zaretskii
2019-12-04 23:16         ` Juri Linkov
2019-12-05  3:43           ` Eli Zaretskii
2019-12-06  0:10             ` Juri Linkov
2019-12-06  7:44               ` Eli Zaretskii
2019-12-07 23:05                 ` Juri Linkov
2019-12-08  3:28                   ` Eli Zaretskii
2019-12-08  5:18                     ` Eli Zaretskii
2019-12-08 21:50                       ` Juri Linkov
2019-12-09  3:36                         ` Eli Zaretskii
2019-12-09  7:43                           ` Lars Ingebrigtsen
2019-12-09 14:00                             ` Eli Zaretskii
2019-12-09 15:55                               ` Eli Zaretskii
2019-12-11  7:32                               ` Lars Ingebrigtsen
2019-12-11  7:35                                 ` Lars Ingebrigtsen
2019-12-11 16:30                                   ` Eli Zaretskii
2019-12-11 16:28                                 ` Eli Zaretskii
2019-12-24 16:30                                   ` Lars Ingebrigtsen
2019-12-24 17:50                                     ` Eli Zaretskii
2019-12-09 23:45                           ` Juri Linkov
2019-12-10  3:36                             ` Eli Zaretskii
2019-12-10  7:19                               ` HaiJun Zhang
2019-12-10 16:11                                 ` Eli Zaretskii
2019-12-10 17:52                                   ` Drew Adams
2019-12-10 17:51                                 ` Drew Adams [this message]
2019-12-10 16:34                               ` Eli Zaretskii
2019-12-10 17:08                                 ` Stefan Monnier
2019-12-10 17:49                                   ` Eli Zaretskii
2019-12-10 17:57                                     ` Eli Zaretskii
2019-12-10 23:45                                       ` Juri Linkov
2019-12-11 16:19                                         ` Eli Zaretskii
2019-12-11 17:34                                           ` Stefan Monnier
2019-12-11 17:50                                             ` Eli Zaretskii
2019-12-11 18:53                                               ` Stefan Monnier
2019-12-11 23:12                                           ` Juri Linkov
2019-12-12  4:39                                             ` Eli Zaretskii
2019-12-12 22:45                                               ` Juri Linkov
2019-12-13  8:25                                                 ` Eli Zaretskii
2019-12-10 19:45                                     ` Stefan Monnier
2019-12-10 20:11                                       ` Eli Zaretskii
2019-12-10 21:45                                         ` Stefan Monnier
2019-12-11  3:24                                     ` HaiJun Zhang
2019-12-11  3:40                                       ` Eli Zaretskii
2019-12-11  3:59                                         ` HaiJun Zhang
2019-12-11 16:26                                           ` Eli Zaretskii
2019-12-12  4:33                                             ` HaiJun Zhang
2019-12-12  5:29                                               ` Eli Zaretskii
2019-12-12 22:58                                               ` Juri Linkov
2019-12-13  7:02                                                 ` Eli Zaretskii
2019-12-13  9:07                                                   ` Eli Zaretskii
2019-12-12 13:21                                             ` Stefan Monnier
2019-12-11  3:35                                 ` HaiJun Zhang
2019-12-11 16:11                                   ` Eli Zaretskii
2019-12-11 16:42                                 ` Eli Zaretskii
2019-12-11 23:24                                   ` Juri Linkov
2019-12-12  5:36                                     ` Eli Zaretskii
2019-12-12 11:08                                       ` Dmitry Gutov
2019-12-12 23:07                                       ` Juri Linkov
2019-12-13  8:46                                         ` Eli Zaretskii
2019-12-11 23:28                               ` Juri Linkov
2019-12-12  5:41                                 ` Eli Zaretskii
2019-12-12 23:12                                   ` Juri Linkov
2019-12-13  8:57                                     ` Eli Zaretskii
2019-12-14 23:10                                       ` Juri Linkov
2019-12-15 15:35                                         ` Eli Zaretskii
2019-12-15 23:59                                           ` Juri Linkov
2019-12-16 16:09                                             ` Eli Zaretskii
2019-12-16 22:29                                               ` Juri Linkov
2019-12-16 23:26                                                 ` Dmitry Gutov
2019-12-17  6:27                                                   ` HaiJun Zhang
2019-12-17 16:19                                                     ` Eli Zaretskii
2019-12-17 23:53                                                     ` Juri Linkov
2019-12-18  3:38                                                       ` HaiJun Zhang
2019-12-17 16:11                                                 ` Eli Zaretskii
2019-12-17 23:51                                                   ` Juri Linkov
2019-12-18 16:24                                                     ` Eli Zaretskii
2019-12-19  0:12                                                       ` Juri Linkov
2019-12-19 15:36                                                         ` Eli Zaretskii
2019-12-19 22:16                                                           ` Juri Linkov
2019-12-19 22:30                                                             ` Dmitry Gutov
2019-12-19 23:17                                                               ` Juri Linkov
2019-12-20  7:34                                                                 ` Eli Zaretskii
2019-12-19 22:52                                                             ` Juri Linkov
2019-12-20  7:59                                                               ` Eli Zaretskii
2019-12-21 22:09                                                                 ` Juri Linkov
2019-12-20  7:54                                                             ` Eli Zaretskii
2019-12-21 22:02                                                               ` Juri Linkov
2019-12-22 19:02                                                                 ` Eli Zaretskii
2019-12-20 14:29                                                             ` Dmitry Gutov
2019-12-21 22:03                                                               ` Juri Linkov
2019-12-23 10:10                                                                 ` Dmitry Gutov
2019-12-23 22:58                                                                   ` Juri Linkov
2019-12-24  0:42                                                                     ` Dmitry Gutov
2019-12-24 23:47                                                                       ` Juri Linkov
2019-12-25 16:30                                                                         ` Dmitry Gutov
2019-12-25 16:44                                                                           ` Eli Zaretskii
2019-12-25 16:49                                                                             ` Dmitry Gutov
2020-01-18  0:59                                                                               ` Dmitry Gutov
2020-01-18  8:19                                                                                 ` Eli Zaretskii
2020-01-20 12:30                                                                                   ` Dmitry Gutov
2020-01-21 16:15                                                                                     ` Eli Zaretskii
2020-01-22  0:46                                                                                       ` Dmitry Gutov
2020-01-18  1:00                                                                           ` Dmitry Gutov
2019-12-05 15:24         ` Kévin Le Gouguec
2019-12-05 16:36           ` Eli Zaretskii
2019-12-06  0:06           ` Juri Linkov
2019-12-06  7:41             ` Eli Zaretskii
2019-12-06 17:15               ` Kévin Le Gouguec
     [not found] <<8736e3vve8.fsf@gmx.net>
     [not found] ` <<8736e2coyv.fsf@mail.linkov.net>
     [not found]   ` <<83y2vujd0y.fsf@gnu.org>
     [not found]     ` <<87blspm0sm.fsf@mail.linkov.net>
     [not found]       ` <<837e3ckbem.fsf@gnu.org>
     [not found]         ` <<871rtjn0kt.fsf@mail.linkov.net>
     [not found]           ` <<83lfrrigj8.fsf@gnu.org>
     [not found]             ` <<87eexiqps5.fsf@mail.linkov.net>
     [not found]               ` <<83lfrphp94.fsf@gnu.org>
     [not found]                 ` <<87wob7g2jk.fsf@mail.linkov.net>
     [not found]                   ` <<83k177ebs0.fsf@gnu.org>
     [not found]                     ` <<AE02ADC8-6567-4EB1-8A44-E60BC4B5807A@gnu.org>
     [not found]                       ` <<87muc27prn.fsf@mail.linkov.net>
     [not found]                         ` <<83tv6acgq5.fsf@gnu.org>
     [not found]                           ` <<87eexdoygh.fsf@mail.linkov.net>
     [not found]                             ` <<83tv68c0nb.fsf@gnu.org>
     [not found]                               ` <<83h828b0lz.fsf@gnu.org>
2019-12-10 17:53                                 ` Drew Adams

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=22c4d2d5-be81-471e-a521-4756d08f0c16@default \
    --to=drew.adams@oracle.com \
    --cc=38457@debbugs.gnu.org \
    --cc=eliz@gnu.org \
    --cc=juri@linkov.net \
    --cc=netjune@outlook.com \
    --cc=stephen.berman@gmx.net \
    /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.
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).