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: Thu, 06 Apr 2023 21:55:48 +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>.