Subject: bug#40152: 27.0.90; icomplete vs recursive prompts

From: Kévin Le Gouguec <[email-masked]>
Date: Sat, 21 Mar 2020 21:03:39 +0100

Eli Zaretskii <[email-masked]> writes:

>> For example, if I'm in a buffer whose default-directory is the root of
>> the Emacs source repository (e.g. in a Dired buffer, visiting the
>> Makefile…) and I hit C-.
>
> You mean, M-., right?

Right 🤦.

>>(and point is not on something that looks like an identifier),
>
> How do you do that?  If I type M-. in *scratch*, Emacs doesn't ask me
> whether to visit a tags table (because the major mode is emacs-lisp).
> I need to visit a C file in src/ or lib-src/, but then all I need to
> type at the prompt is RET, nothing else.  And if I do the above from a
> Dired buffer which shows the Emacs's root directory, then I get the
> prompt about visiting the tags table without any "Find definitions"
> prompt, and the problem doesn't happen.
>
> So please show the exact recipe for how to reproduce the problem you
> see.
>
>> here's what happens:
>> 
>> 1. the "Find definitions of" prompt appears,
>> 2. I start typing an identifier,
>> 3. the "Visit tags table" prompt interrupts,
>> 4. I'd like to input "src/ C-j", but every self-inserting character
>>    makes the prompt go back-and-forth between "Find definitions of" and
>>    "Visit tags table".  Worse, when the prompt comes back to "Visit tags
>>    table", any character I had previously input has disappeared.
>
> So the problem happens _after_ the prompt, not _with_ the prompt.
> That wasn't quite clear, at least to me, from your original report:
> there was no sign in it what was the actual problem and what was the
> expected and result.  Now I think it's becoming clearer, thanks.

My apologies for being unclear.  Do those 4 steps you quoted (preceded
by M-x icomplete-mode) demonstrate the problem well enough then, or is
there anything I should add?

To recap:

- The problem only happens
    - with icomplete-mode,
    - with the etags backend,
    - when there is no "identifier-like" symbol under point,
    - when either
        - the user starts typing self-inserting characters when the xref
          identifier prompt shows up, or
        - icomplete-show-matches-on-no-input is t.

- The problem is that one cannot fill in the tags table prompt easily:
  self-inserting characters cause the minibuffer to move back-and-forth
  between the tags table prompt and the xref identifier prompt.

  The tags table prompt interrupting the xref prompt is not an issue (to
  me, at least); what I would like is being able to complete the tags
  table prompt, then go back to the xref prompt.

- A workaround consists in calling minibuffer-complete (TAB) immediately
  when the xref prompt shows up; this brings up a functional tags table
  prompt.
  (This workaround cannot work when icomplete-show-matches-on-no-input
  is t.)

Let me know if I managed to muddy things up further.

Thank you for your patience.