Subject: bug#48545: 28.0.50; `icomplete-vertical-mode` does not support the `group-function`

From: João Távora <[email-masked]>
Date: Sat, 21 Aug 2021 13:42:46 +0100

Dmitry Gutov <[email-masked]> writes:

> On 21.08.2021 12:40, João Távora wrote:

>> Yes, I think you see what you mean.  But I also imagine it would be
>> terrifyingly confusing for a user of a scrolling dropdown to see
>> candidates jump back and forth into their groups as the user scrolls
>> down to see a new candidate and hide another.  If what I imagine isn't
>> what you mean, maybe you could code something up and show what you mean.
>
> I suppose yes, if you only group candidates that are visible on the
> screen, it could lead to jumping. Good point. Then I would suggest to
> go back to "global" grouping.

Then do.  Go back to that experiment and its drawbacks and actually
prototype it the way you envision it.  Then share results here.

> The order of completions coming from xref is essentially random. Yes,
> they are grouped by files (usually), but the files are not coming in
> any particular order. So I would prefer not to skip the sorting step.
> Of course, there might be different scenarios and preferences in that
> regard.

If you sort the groups but not _inside_ the groups, you can skip the
expensive sorting and still keep some order.  Though in xref nothing is
particularly expensive anyway.

> Okay. Sorting seems to indeed be costly in this case (if I trust your
> measurements).

You can do them yourself.  I posted what I measured from.  If it's not
clear, you should let me know.

> Sorting is part of the default completion behavior (with grouping or
> not). You want to remove it instead of fixing?

It's very simple: As I've explained some times already, I contend, and
Kévin at least seems to agree, is that when there grouping the current
slow 'a+l+r' sorting is not particularly useful.  At least the "r ===
recently" part seems completely useful there.  But the 'a+l' also seem
to be kinda lame, at least for xref and C-x 8 RET.

Now, if one agrees that sorting not particularly useful when there is
grouping and that is significantly slows things down, then there is a
good case for removing it when there is grouping.  It's super simple.

>>> Try disabling grouping. Is completion still slow? Then it's a problem
>>> with sorting speed that needs to be solved separately anyway.
>> icomplete.el doesn't do any grouping, it merely prints the grouping
>> information as headers for the few matches that it will print.
>> completion-all-sorted-completions also doesn't care about grouping.  So
>> there's nothing to disable in that regard.
>
> That addressed 3 words out of 20.

How in heck could I adress the remaining ones which refer to the first
three if those three were nonsense?  

Look, you're asking me to do vaguely worded experiments that you can
perfectly run yourself.  If you understand what you mean, go run them
yourself, document your findings and share them here for others to work
from.  It'll save us all time.

>>>> This is flex doing its thing.
>>> Yup. This is what I suggested to change.
>> As I explained two or three times now: you can.  In a new
>> dmitry-flex
>> style.  That style is only a few lines of code away, I suppose.  Or a
>> defcustom, if you prefer those.  The current behaviour for 'flex' is the
>> correct one.  It was conceived like this.  flex scoring trumps grouping,
>> table orders, etc...  If you don't like this you can change this, like
>> everything in Emacs.
>
> Nothing I suggested should call for a change in completion style.

Then I misunderstood, again.  You did suggest changes to the 'flex'
completion style in another bug thread, I naturally though you meant
that.  Here, you wrote "this is what I suggested to change" after I
described how the flex completion style worked.  You provide no accurate
description or code of what you want changed.  If you weren't a
programmer or especially versed in Elisp, I would comprehend.  Given
that you are, it is baffling, time-wasting and quite tiring.  I'll just
stop answering your hypothetical questions.

João