Subject: RE: bug#23129: 25.1.50; Prefix key is not echoed during minibuffer completion

From: Drew Adams <[email-masked]>
Date: Mon, 28 Mar 2016 10:32:35 -0700 (PDT)

> > Is `C-x' a prefix key in `minibuffer-local-filename-completion-map'
> > at that point?
> 
> What's the significance of minibuffer-local-filename-completion-map
> for the purposes of this issue?

The use case is a prefix-key binding in a minibuffer keymap.
That is, a key that is specifically useful in the context of
minibuffer input.

The bug is not echoing a prefix key for an active minibuffer.
Yes, any prefix key in any accessible keymap will do, to show
the problem.  But the really useful use cases are prefix keys
bound in a minibuffer keymap.

> > > How do you mean "should"?
> >
> > How do I mean "should"?  Should.  It is helpful for a user
> > (as well as consistent) to echo the prefix keys s?he hits.
> 
> There's also "should" as in "it did this yesterday or the last
> year".

OK.  (If that were the case then I would have said that this
was a regression.)  Anyway, it's now clear what I meant by
"should", hopefully.

> > > AFAICT, this is a deliberate feature:
> >
> > Do you have evidence for that?
> 
> I've read the code.  It does this explicitly and purposefully,
> there's no mistake about that.

Fair enough.  But just because someone codes something in a
particular way, that does not say anything, by itself, about
how much thought or user experience went into the design that
it reflects (or creates).

As I said, if this was by design then this is a design-bug
report.  The design is flawed/weak and can be improved in
this regard.

Using prefix keys in the minibuffer might not have been
considered a great deal when this was implemented, even
if the implementation shows that excluding their echo was
deliberate.

Prefix keys certainly are allowed to be used, even if users
do not benefit from their being echoed.

> The function echo_now is the one that echoes the prefix keys;
> look at the conditions (and the commentary, for that matter).
> 
> I hope Richard will be able to shed some light on this.  The code
> is very old, it was present in the initial commit in Jan 1992:
> 
>   /* If in middle of key sequence and minibuffer not active,
>                                       ^^^^^^^^^^^^^^^^^^^^^
>   if (minibuf_level == 0   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<

OK, it was intentionally coded this way - it was not a coding
oversight.  It was a design oversight.  I see no good reason
for the design to exclude the minibuffer case for echoing.
Do you?  Maybe Richard will provide a good argument.