Subject: Re: bug#62700: 29.0.60; minibuffer-{previous,next,choose}-completion behave unintuitively when point is not at end of buffer

From: Juri Linkov <[email-masked]>
Date: Sun, 07 Apr 2024 20:16:03 +0300

>>> 6. C-h v -path
>>> 7. C-a to move point to before -path
>>> 8. <tab> to show completions of variables ending in -path
>>> 9. Use M-<up> and M-<down> to switch between completions.  Now as you
>>> switch completions, they are inserted at point, *without* replacing the
>>> text already in the buffer.  So e.g. the minibuffer will contain
>>> "load-path-path".
>>> 10. Likewise, if you (setq minibuffer-completion-auto-choose nil), M-RET
>>> inserts the completion string at point, without replacing the text in
>>> the minibuffer, so you will get "load-path-path".
>>>
>>> I think this is basically just a bug.  Hopefully we can fix this before
>>> Emacs 29 is released, because this is the last thing which stops these
>>> new commands from being a really great improvement to the Emacs
>>> completion defaults.
>>
>> I agree that it would be nice to fix this in Emacs 29.
>> But the problem is that this would require non-trivial changes.
>> We need to apply a small part of the patch mentioned in
>> bug#47711, bug#48356, bug#48841, bug#60313 and located at
>> https://lists.gnu.org/archive/html/emacs-devel/2021-08/msg00412.html
>> that implements the following FIXME item in 'completion-all-completions':
>>
>>   ;; FIXME: We need to additionally return the info needed for the
>>   ;; second part of completion-base-position.
>>
>> When it will return from 'completion-all-completions' not only the start
>> position of a completion, but also its end, then we could use this
>> additional information for M-<up> and M-<down>.
>
> BTW: do you know if anyone has done any more work on resolving this
> FIXME?

I'm not aware of anyone working on this FIXME.
The last complete patch was posted by Daniel Mendler to
https://lists.gnu.org/archive/html/emacs-devel/2021-08/msg00412.html
and to bug#47711.

> Maybe there's an open bug for it, or some work I could start
> from?

There are two open bug reports: bug#47711 and bug#48356.

> I'm running into bug#62700 again for completion tables which use
> boundaries but aren't file completion.  The heuristic I added only works
> for file completion, but I'm working on a completion table which uses
> boundaries for completing dotted.field.paths in OCaml, and so completing
> at dotted.fie|.paths inserts "dotted.field." and deletes the "paths"
> part.  To fix this, I think I should just fix this FIXME once and for
> all (and then we can delete the heuristic I added)

The patch created by Daniel Mendler should resolve this FIXME,
maybe after some minor updates.