* Re: master 0e8d8a72284: Fido-mode: never shadow 'external' completion style
[not found] ` <20230505184529.69F06C22EED@vcs2.savannah.gnu.org>
@ 2023-05-05 18:57 ` João Távora
2023-05-06 6:01 ` Eli Zaretskii
0 siblings, 1 reply; 2+ messages in thread
From: João Távora @ 2023-05-05 18:57 UTC (permalink / raw)
To: emacs-devel, Eli Zaretskii, Stefan Monnier
Hello Eli,
I'd like to backport this bugfix to emacs-29.
The commit message explains what's going on.
João
On Fri, May 5, 2023 at 7:45 PM João Távora <joaotavora@gmail.com> wrote:
>
> branch: master
> commit 0e8d8a72284f6b3aaa1bbce73d41c7d84bbc4d3c
> Author: João Távora <joaotavora@gmail.com>
> Commit: João Távora <joaotavora@gmail.com>
>
> Fido-mode: never shadow 'external' completion style
>
> As explained in the manual (20.7.2 Fast minibuffer selection)
> 'fido-mode' and 'fido-vertical-mode' give priority the "flex"
> completion style.
>
> In fact, bug#62015 was recently fixed in commit because that priority
> was not taking place correctly and some completions were missed.
>
> However, an exception must be made for the 'external' completion
> style.
>
> That style, made available by the lisp/external-completion.el library,
> is specifically designed to work with backends that provide only a
> partial view of all completions. If we allow 'flex' to step in front
> of 'external' it could mean that 'flex' matches something and
> 'external' isn't triggered as it probably should.
>
> To reproduce have the rust-mode ELPA package and the rust-analyzer LSP
> server handy. Then:
>
> emacs -Q -f package-initialize main.rs
>
> Where main.rs is this content:
>
> fn foo1() {} fn foo2() {} fn foo3() {}
> fn foobar1() {} fn foobar2() {} fn foobar3() {}
>
> The rust-analyzer server can be quickly configured to return only 3
> workspace symbols max, so evaluate:
>
> (setq-default eglot-workspace-configuration
> '(:rust-analyzer
> (:workspace (:symbol (:search (:limit 3))))))
>
> Now start M-x eglot and M-x fido-vertical-mode and type C-u M-. to
> find an arbitrary symbol in this one-file project.
>
> Type 'f'. You will see the three foo's are listed, correctly.
>
> Now type '3'. You will only see "foo3".
>
> But that's wrong because "foobar3" was available, if only the server
> had been asked for it. This commit fixes the situation and no
> completions are lost.
>
> As an unfortunate side-effect of this commit, the fontification of
> completions-common-part on the matches is lost, but that is not worse
> than missing out on completions and there are better ways to recover
> the fontification anyway (in external-completion.el).
>
> See also:
> https://github.com/joaotavora/eglot/discussions/1219#discussioncomment-5818336
>
> * lisp/icomplete.el (icomplete--fido-ccd): Do not touch entries
> with 'external in them.
> ---
> lisp/icomplete.el | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/lisp/icomplete.el b/lisp/icomplete.el
> index 6ed2cbe395c..e6fdd1f1836 100644
> --- a/lisp/icomplete.el
> +++ b/lisp/icomplete.el
> @@ -427,7 +427,10 @@ if that doesn't produce a completion match."
> for (cat . alist) in completion-category-defaults collect
> `(,cat . ,(cl-loop
> for entry in alist for (prop . val) = entry
> - if (eq prop 'styles)
> + if (and (eq prop 'styles)
> + ;; Never step in front of 'external', as that
> + ;; might lose us completions.
> + (not (memq 'external val)))
> collect `(,prop . (flex ,@(delq 'flex val)))
> else collect entry))))
>
>
--
João Távora
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: master 0e8d8a72284: Fido-mode: never shadow 'external' completion style
2023-05-05 18:57 ` master 0e8d8a72284: Fido-mode: never shadow 'external' completion style João Távora
@ 2023-05-06 6:01 ` Eli Zaretskii
0 siblings, 0 replies; 2+ messages in thread
From: Eli Zaretskii @ 2023-05-06 6:01 UTC (permalink / raw)
To: João Távora; +Cc: emacs-devel, monnier
> From: João Távora <joaotavora@gmail.com>
> Date: Fri, 5 May 2023 19:57:11 +0100
>
> Hello Eli,
>
> I'd like to backport this bugfix to emacs-29.
>
> The commit message explains what's going on.
OK, thanks.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-05-06 6:01 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <168331232875.13507.14756021288523252464@vcs2.savannah.gnu.org>
[not found] ` <20230505184529.69F06C22EED@vcs2.savannah.gnu.org>
2023-05-05 18:57 ` master 0e8d8a72284: Fido-mode: never shadow 'external' completion style João Távora
2023-05-06 6:01 ` Eli Zaretskii
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).