emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Updating *Completions* as you type


From: Juri Linkov
Subject: Re: Updating *Completions* as you type
Date: Tue, 17 Oct 2023 21:20:39 +0300
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/30.0.50 (x86_64-pc-linux-gnu)

> What if the concept of "current selected completion" was unified with
> "the default completion"?  This could be a nice, general UI.
>
> Specifically, with switch-to-buffer and a default of init.el:
>
> - If init.el is present in *Completions*, start out with point on it.
>   This would be purely a display nicety, it wouldn't actually affect
>   anything yet.  (This would be easy with my patch which I posted
>   elsewhere in this thread to preserve the location of point in
>   *Completions*)

I think preselecting the default value in the middle of completions
would make sense only when completions were sorted by the order of the
list of default values (from M-n M-n ...).  Then the first default value
would be at the top of completions, and it would easier for users
to navigate completions top-down.

> - If and when the user invokes minibuffer-next-completion:
>   - The default changes to whatever the new selected completion is
>   - The prompt text "(default init.el)" changes permanently to literally
>     "(default selected completion)"

Changing the prompt might interfere with such packages as minibuf-eldef.el
and other cases of customized minibuffer-default-prompt-format.
Also this might break commands that manually handle the default value
for empty input.

> - RET, as always, chooses the default if the minibuffer is empty; if the
>   user has done minibuffer-next-completion, the default is the selected
>   completion, so RET will choose that.
> - M-RET (minibuffer-choose-completion) is replaced with a new command
>   which immediately chooses the default, whatever it is, ignoring the
>   current contents of the minibuffer

What should RET do after the user navigated in *Completions* and
switched back to the minibuffer.  A different candidate is highlighted
in *Completions*, while the default value remains unchanged.

BTW, while looking at this case I found a problem with your first patch:
after navigating in *Completions* and switching back to the minibuffer
point is reset to the beginning of the *Completions* buffer.

> - C-u M-RET inserts the default in the the minibuffer, without exiting
>   (matching the behavior of C-u minibuffer-choose-completion)

Usually the default is inserted by M-n.

> I think this has some nice benefits in reducing the number of concepts
> people need to track.  If the minibuffer is empty, they can just use
> minibuffer-next-completion a few times followed by RET to select a
> completion, no need to use M-RET.  Plus, the new M-RET and C-u M-RET
> would be useful even to users who don't use minibuffer-next-completion.

It seems this is intended to solve the problem of a mismatch between
the highlighted candidate and the contents of the minibuffer?
Such problem exists, for example, in icomplete-mode where
RET returns the contents of the minibuffer, so a special key 'C-j'
is dedicated to select the highlighted candidate.  For selecting
a highlighted candidate from *Completions* such key is 'M-RET'.

> I also think this would make it less painful to set
> minibuffer-completion-auto-choose to nil, which matches
> completion-in-region better and also works much better with
> completions-auto-update.

Sorry, I don't understand how this would make
minibuffer-completion-auto-choose=nil less painful.

Since there is no concept of the default value for completion-in-region,
'M-RET' is the only way to choose the highlighted candidate.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]