bug#42058: Cannot M-x (some?) single-letter commands in ‘fido-mode’

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

bug#42058: Cannot M-x (some?) single-letter commands in ‘fido-mode’

Dario Gjorgjevski
Okay, this one is super weird.

To reproduce, launch ‘emacs -Q’ and then

    M-: (defun T () (interactive) (message "T")) RET
    M-x fido-mode RET
    M-x T RET

This results in “Wrong type argument: number-or-marker-p, nil”.  The
issue seems to stem from the fact that

    M-: (read-extended-command) RET
    T RET

returns ‘icomplete-fido-delete-char’ as opposed to ‘T’, which is
returned when ‘fido-mode’ is disabled.

My Emacs version is 28.0.50, built on 2020-06-26 from commit 89c744c380.

Best regards,
Dario

--
[hidden email] :: +49 1525 8666837
%   gpg --keyserver 'hkps://hkps.pool.sks-keyservers.net' \
\`>     --recv-keys '744A4F0B4F1C9371'



Reply | Threaded
Open this post in threaded view
|

bug#42058: Cannot M-x (some?) single-letter commands in ‘fido-mode’

João Távora
Hello Dario,

Dario Gjorgjevski <[hidden email]> writes:

> Okay, this one is super weird.
>
> To reproduce, launch ‘emacs -Q’ and then
>
>     M-: (defun T () (interactive) (message "T")) RET
>     M-x fido-mode RET
>     M-x T RET
>
> This results in “Wrong type argument: number-or-marker-p, nil”.  The
> issue seems to stem from the fact that
>
>     M-: (read-extended-command) RET
>     T RET
>
> returns ‘icomplete-fido-delete-char’ as opposed to ‘T’, which is
> returned when ‘fido-mode’ is disabled.

Yes, that is exactly it.

First, let's establish that the error happens because you're invoking an
interactive command that doesn't make sense in that context.  The
question becomes why pressing, in succession

   M-x T

does _not_ place the command named "T" in the top of the list so that
typing RET immediately would invoke it.  I don't have a good answer for
this yet.  I do know that two letters don't trigger this problem:

   (defun tt () (interactive) (message "yay TT"))

Will be the first completion to M-x tt ...

The completion to icomplete-fido-delete-char is just accidental: it
could have completed to anything else containing a "t" (since by
default, fido-mode is case-insensitive).

By the way, you can _force_ M-x to complete to the command named T by
typing M-j _instead_ of RET.  

João



Reply | Threaded
Open this post in threaded view
|

bug#42058: Cannot M-x (some?) single-letter commands in ‘fido-mode’

João Távora
OK, though I'd have just continued here. 

No problem.  Let me close this one then.

On Wed, Jul 1, 2020 at 11:45 AM Dario Gjorgjevski <[hidden email]> wrote:
Hi João,

Thanks for getting back to me.  I have identified the culprit and filed
bug#42149 in an attempt to fix it.  Please have a look there!

Best regards,
Dario

--
[hidden email] :: +49 1525 8666837
%   gpg --keyserver 'hkps://hkps.pool.sks-keyservers.net' \
\`>     --recv-keys '744A4F0B4F1C9371'


--
João Távora