Subject: Re: bug#23543: 25.1.50; Incorrect key binding echoed by `M-x'

From: Lars Ingebrigtsen <[email-masked]>
Date: Sun, 28 Jul 2019 14:39:34 +0200

Drew Adams <[email-masked]> writes:

> emacs -Q
>
> (define-key global-map [remap eval-last-sexp] 'pp-eval-last-sexp)
>
> Put point after a Lisp sexp somewhere, and do `M-x eval-last-sexp'.
>
> You see this echoed:
>
>   You can run the command 'eval-last-sexp' with C-x C-e
>
> But that is incorrect.  You cannot run `eval-last-sexp'
> using `C-x C-e', since it has been remapped to command
> `pp-eval-last-sexp'.  If you use `C-x C-e' you invoke
> the latter, not `eval-last-sexp'.

I can confirm that this is still present in Emacs 27.

> The code that causes this bugged behavior is the call
> to `where-is-internal' in `execute-extended-command'.
> It does, in effect:
>
> (where-is-internal 'eval-last-sexp overriding-local-map t)
>
> And that returns [24 5].  I'm no expert on `overriding-local-map',
> but should it really be used here?  Seems like this is the cause,
> but whatever the cause, the message is incorrect.

When I trace this, `overriding-local-map' is nil, and indeed:

(where-is-internal 'eval-last-sexp)
=> ([24 5])

So that doesn't seem to have anything to do with this bug, and it's just
a bug in `where-is-internal'.  The doc string does talk about remapping,
but I'm not sure whether this is the same kind of remapping we have
here?  In any case, it doesn't make a difference:

The optional 5th arg NO-REMAP alters how command remapping is handled:

- If another command OTHER-COMMAND is remapped to DEFINITION, normally
  search for the bindings of OTHER-COMMAND and include them in the
  returned list.  But if NO-REMAP is non-nil, include the vector
  [remap OTHER-COMMAND] in the returned list instead, without
  searching for those other bindings.

- If DEFINITION is remapped to OTHER-COMMAND, normally return the
  bindings for OTHER-COMMAND.  But if NO-REMAP is non-nil, return the
  bindings for DEFINITION instead, ignoring its remapping.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no