From: Dmitry Gutov <dgutov@yandex.ru>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: Philip Kaludercic <philipk@posteo.net>,
emacs-devel@gnu.org, Manuel Uberti <manuel.uberti@inventati.org>,
"T.V Raman" <raman@google.com>
Subject: Re: Stepping Back: A Wealth Of Completion systems Re: [ELPA] New package: vertico
Date: Thu, 8 Apr 2021 00:56:42 +0300 [thread overview]
Message-ID: <76a4d0e2-117b-165d-d56e-5bc2f504b50c@yandex.ru> (raw)
In-Reply-To: <jwvmtua9nas.fsf-monnier+emacs@gnu.org>
On 07.04.2021 17:44, Stefan Monnier wrote:
>>> Most completion frameworks I have looked at seem to limit themselves to
>>> the latter. To simplify, they collect all the options of a collection
>>> using all-completions and then narrow it depending on user input. Ido
>>> and all it's descendents (Ivy, Helm, Selectrum and now vertico) seem to
>>> be based on that approach.
>> I don't think that's true.
>
> I don't think the frequency of refreshing the list of candidates is what
> he was referring to, but rather the support for "TAB completion" which
> corresponds to the `(completion-)try-completion` operation which is
> expected to extract the commonality between the various candidates.
>
> Most completion frameworks minimize the importance of this operation (or
> don't support it at all) and instead focus on displaying the set of
> candidates, filtering them, and finally picking one of them.
I don't know if they really do minimize it: the TAB binding in
company-active-map, pressing TAB once in Ivy, and likely equivalent
bindings in other systems, all complete the "common" part to let the
user continue typing to resolve ambiguities.
That's something a pure "selection UI" wouldn't have. And I do think it's
> Seen from the point of view of the implementation, I can understand why
> it's done this way: the more sophisticated your completion style is, the
> harder it gets to implement `try-completion` (and often the less useful
> it gets as well. E.g. for things like `flex` it's very common for there
> to be no commonality at all to extract).
>
> So removing the `try-completion` operation makes for a simpler API
> and a simpler implementation (it also simplifies significantly the
> quote/unquote handling) and users who like things like `flex` won't even
> notice the difference.
A try-completion operation might indeed be complex to implement for some
completion styles, but it's not like we really tried it. Perhaps it
would be difficult to design the "externally filtering" completion
style, together with this new operation, but I feel like we've never
even reached the point if trying to do that, having met other
difficulties along the way.
Perhaps we could dispense with this feature when designing a new
completion table interface, just for simplicity's sake (though I don't
see why we couldn't add it as an option in a later revision).
What I was disagreeing in the previous message, is whether it's worth to
create a semantic distinction between completing-read and
selecting-read. How would a Lisp author choose between the two? The
former should actually be more powerful (it will retain support for TAB
completion, and yet it could still be supported by selection-style
frameworks such as Company or Ivy); the latter, on the other hand, would
effectively mandate a minimum "niceness" of the UI (though not
necessarily nicer than the former, depending on user customization), but
would be unable to support more advanced completion tables. Such as ones
with "fields" (which includes file name completion).
So it seems the guiding principle might be: use selecting-read for
"simple" completion tables. But I don't see why this direction is desirable.
next prev parent reply other threads:[~2021-04-07 21:56 UTC|newest]
Thread overview: 178+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-05 10:22 [ELPA] New package: vertico Daniel Mendler
2021-04-05 14:27 ` Manuel Uberti
2021-04-05 18:30 ` Stepping Back: A Wealth Of Completion systems " T.V Raman
2021-04-05 20:49 ` Philip Kaludercic
2021-04-05 20:55 ` T.V Raman
2021-04-06 6:45 ` Arthur Miller
2021-04-06 15:15 ` Eric Abrahamsen
2021-04-06 15:56 ` Stefan Monnier
2021-04-07 12:09 ` Gregory Heytings
2021-04-07 12:23 ` Joost Kremers
2021-04-07 12:56 ` Daniel Mendler
2021-04-07 18:55 ` Jean Louis
2021-04-07 13:05 ` Yuri Khan
2021-04-07 13:45 ` Eli Zaretskii
2021-04-07 14:15 ` Philip Kaludercic
[not found] ` <87eefm5fzl.fsf@posteo.net>
[not found] ` <3ec7e2e58a106c77370d@heytings.org>
2021-04-07 14:33 ` Philip Kaludercic
2021-04-07 15:17 ` Daniel Mendler
2021-04-07 16:14 ` Stefan Monnier
2021-04-07 16:32 ` Daniel Mendler
2021-04-07 16:20 ` Philip Kaludercic
2021-04-07 16:57 ` Daniel Mendler
2021-04-07 18:19 ` [External] : " Drew Adams
2021-04-07 19:13 ` Philip Kaludercic
2021-04-07 19:47 ` Jean Louis
2021-04-07 20:03 ` Daniel Mendler
2021-04-07 22:31 ` Philip Kaludercic
2021-04-09 6:21 ` Tassilo Horn
2021-04-09 8:53 ` Daniel Mendler
2021-04-09 17:22 ` [External] : " Drew Adams
2021-04-09 18:51 ` Tassilo Horn
2021-04-07 23:07 ` [External] : " Drew Adams
2021-04-07 19:24 ` Jean Louis
2021-04-07 18:19 ` [External] : " Drew Adams
2021-04-07 18:13 ` Drew Adams
2021-04-07 15:24 ` Gregory Heytings
2021-04-07 16:10 ` Philip Kaludercic
2021-04-07 16:49 ` Gregory Heytings
2021-04-07 17:40 ` Philip Kaludercic
2021-04-07 17:48 ` Gregory Heytings
2021-04-07 19:22 ` Philip Kaludercic
2021-04-07 19:03 ` Jean Louis
2021-04-07 14:31 ` T.V Raman
2021-04-07 16:02 ` Eric Abrahamsen
2021-04-07 18:18 ` [External] : " Drew Adams
2021-04-09 6:40 ` Thierry Volpiatto
2021-04-10 4:20 ` Eric Abrahamsen
2021-04-07 18:49 ` Jean Louis
2021-04-07 20:33 ` Juri Linkov
2021-04-09 11:12 ` Jean Louis
2021-04-07 13:01 ` Dmitry Gutov
2021-04-07 14:44 ` Stefan Monnier
2021-04-07 14:55 ` Philip Kaludercic
2021-04-07 21:56 ` Dmitry Gutov [this message]
2021-04-07 22:59 ` Philip Kaludercic
2021-04-08 0:48 ` Dmitry Gutov
2021-04-08 14:44 ` Philip Kaludercic
2021-04-08 16:40 ` T.V Raman
2021-04-08 17:53 ` Philip Kaludercic
2021-04-08 17:57 ` T.V Raman
2021-04-08 17:21 ` [External] : " Drew Adams
2021-04-08 18:03 ` Philip Kaludercic
2021-04-08 18:59 ` Dmitry Gutov
2021-04-09 4:21 ` Eric Abrahamsen
2021-04-09 23:18 ` Dmitry Gutov
2021-04-10 4:31 ` Eric Abrahamsen
2021-04-09 5:56 ` Eli Zaretskii
2021-04-09 23:12 ` Dmitry Gutov
2021-04-09 23:48 ` Stefan Monnier
2021-04-10 1:56 ` Dmitry Gutov
2021-04-10 4:04 ` Stefan Monnier
2021-04-10 13:11 ` Dmitry Gutov
2021-04-11 21:48 ` Stefan Monnier
2021-04-11 22:07 ` [External] : " Drew Adams
2021-04-11 22:10 ` Drew Adams
2021-04-11 21:52 ` Philip Kaludercic
2021-04-11 22:24 ` Dmitry Gutov
2021-04-12 1:32 ` Stefan Monnier
2021-04-12 4:16 ` [External] : " Drew Adams
2021-04-14 0:04 ` Dmitry Gutov
2021-04-10 7:27 ` Eli Zaretskii
2021-04-10 10:53 ` Dmitry Gutov
2021-04-10 11:09 ` Eli Zaretskii
2021-04-10 7:20 ` Eli Zaretskii
2021-04-10 10:52 ` Dmitry Gutov
2021-04-10 11:08 ` Eli Zaretskii
2021-04-10 12:43 ` Dmitry Gutov
2021-04-10 13:10 ` Eli Zaretskii
2021-04-10 14:26 ` Dmitry Gutov
2021-04-10 10:56 ` Stefan Kangas
2021-04-10 11:11 ` Eli Zaretskii
2021-04-11 11:37 ` Stefan Kangas
2021-04-11 12:24 ` Philip Kaludercic
2021-04-11 12:58 ` Stefan Kangas
2021-04-11 13:42 ` Eli Zaretskii
2021-04-11 13:39 ` Eli Zaretskii
2021-04-11 17:16 ` Dmitry Gutov
2021-04-11 18:19 ` Eli Zaretskii
2021-04-11 18:36 ` [External] : " Drew Adams
2021-04-11 21:14 ` Dmitry Gutov
2021-04-11 13:37 ` Eli Zaretskii
2021-04-11 15:32 ` Stefan Kangas
2021-04-11 15:50 ` Eli Zaretskii
2021-04-11 15:55 ` Lars Ingebrigtsen
2021-04-11 16:49 ` Eli Zaretskii
2021-04-10 14:14 ` [External] : " Drew Adams
2021-04-10 13:13 ` Stefan Monnier
2021-04-10 14:00 ` Eli Zaretskii
2021-04-10 11:11 ` Gregory Heytings
2021-04-10 13:15 ` Stefan Monnier
2021-04-10 13:40 ` Gregory Heytings
2021-04-11 21:52 ` Stefan Monnier
2021-04-10 7:09 ` Eli Zaretskii
2021-04-10 14:40 ` Dmitry Gutov
2021-04-10 15:02 ` Eli Zaretskii
2021-04-11 0:04 ` Dmitry Gutov
2021-04-11 7:20 ` Eli Zaretskii
2021-04-10 14:40 ` Philip Kaludercic
2021-04-11 0:18 ` Dmitry Gutov
2021-04-11 11:18 ` Philip Kaludercic
2021-04-11 13:31 ` Jean Louis
2021-04-11 15:53 ` Philip Kaludercic
2021-04-12 9:24 ` Jean Louis
2021-04-12 10:14 ` Philip Kaludercic
2021-04-12 10:56 ` Jean Louis
2021-04-12 11:30 ` Philip Kaludercic
2021-04-12 16:28 ` Eric Abrahamsen
2021-04-12 18:36 ` [External] : " Drew Adams
2021-04-12 19:01 ` Eric Abrahamsen
2021-04-12 19:21 ` Drew Adams
2021-04-12 23:39 ` Eric Abrahamsen
2021-04-13 2:06 ` Drew Adams
2021-04-11 13:34 ` Eli Zaretskii
2021-04-11 16:14 ` Philip Kaludercic
2021-04-11 16:53 ` Eli Zaretskii
2021-04-11 17:39 ` Philip Kaludercic
2021-04-11 18:23 ` Eli Zaretskii
2021-04-12 13:59 ` Stefan Monnier
2021-04-13 23:57 ` Dmitry Gutov
2021-04-21 9:20 ` Philip Kaludercic
2021-04-21 9:29 ` Eli Zaretskii
2021-04-21 10:27 ` Philip Kaludercic
2021-04-21 12:00 ` Eli Zaretskii
2021-04-21 12:50 ` Philip Kaludercic
2021-04-21 13:02 ` Eli Zaretskii
2021-04-21 14:25 ` Jean Louis
2021-04-21 15:43 ` Yuri Khan
2021-04-21 17:29 ` Eli Zaretskii
2021-04-21 19:22 ` Stefan Monnier
2021-04-21 19:25 ` Eli Zaretskii
2021-04-21 19:35 ` Stefan Monnier
2021-04-21 14:13 ` Jean Louis
2021-04-21 14:35 ` Stefan Monnier
2021-04-21 20:31 ` [External] : " Drew Adams
2021-04-21 13:14 ` Daniel Mendler
2021-04-21 14:21 ` Philip Kaludercic
2021-04-05 14:59 ` Stefan Monnier
2021-04-05 15:32 ` Stefan Kangas
2021-04-05 17:55 ` Daniel Mendler
2021-04-05 18:10 ` Stefan Kangas
2021-04-09 21:37 ` Tassilo Horn
2021-04-09 23:23 ` Daniel Mendler
2021-04-10 7:17 ` Tassilo Horn
2021-04-10 9:33 ` Daniel Mendler
2021-04-10 9:44 ` Tassilo Horn
2021-04-10 10:07 ` Daniel Mendler
2021-04-10 13:34 ` Stefan Monnier
2021-04-10 14:07 ` Daniel Mendler
2021-04-10 15:19 ` Stefan Monnier
2021-04-10 17:27 ` Tassilo Horn
2021-04-10 20:58 ` Juri Linkov
2021-04-10 7:18 ` Eli Zaretskii
2021-04-10 9:21 ` Daniel Mendler
2021-04-10 9:30 ` Eli Zaretskii
2021-04-10 9:38 ` Daniel Mendler
2021-04-10 10:00 ` Eli Zaretskii
2021-04-10 10:14 ` Daniel Mendler
2021-04-10 9:38 ` Tassilo Horn
2021-04-10 10:02 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=76a4d0e2-117b-165d-d56e-5bc2f504b50c@yandex.ru \
--to=dgutov@yandex.ru \
--cc=emacs-devel@gnu.org \
--cc=manuel.uberti@inventati.org \
--cc=monnier@iro.umontreal.ca \
--cc=philipk@posteo.net \
--cc=raman@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).