unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Daniel Mendler <mail@daniel-mendler.de>
To: Dmitry Gutov <dgutov@yandex.ru>,
	"emacs-devel@gnu.org" <emacs-devel@gnu.org>
Cc: Gregory Heytings <gregory@heytings.org>,
	Stefan Monnier <monnier@iro.umontreal.ca>
Subject: Re: [PATCH] `completing-read`: Add `group-function` support to completion metadata
Date: Mon, 26 Apr 2021 00:10:38 +0200	[thread overview]
Message-ID: <b93373b1-6c31-b5f8-f94a-4047471effc9@daniel-mendler.de> (raw)
In-Reply-To: <d9968d80-b299-9a97-00d6-49d8a79b10cc@yandex.ru>

On 4/25/21 11:50 PM, Dmitry Gutov wrote:
> Sorry, I was basically referring to an earlier discussions where the 
> consensus was that xref-show-definitions-completiong-read doesn't play 
> very well with the default completing-read. Its completion table is odd, 
> one could say. The proposed feature simply doesn't change that.

I understand. But in which way do you think the function 
`xref-show-definitions-completiong-read` is odd? If you use completion 
styles like `flex` or `orderless` you can quickly narrow down the number 
of candidates and select. It works well for me and the grouping makes 
the view more clear.

> Perhaps if all currently planned uses of group-function are similarly 
> "odd" (and no additional uses in the core are going to be added in the 
> foreseeable future), you don't need to worry/care about having 
> :group-function added to the core, or at least not yet. Or about 
> updating the *Completions* UI.

I assume there are more commands in Emacs where grouping functionality 
is useful. Grouping is heavily used in Helm and in my Consult package, 
so having such functionality officially present in Emacs is certainly 
valuable.

> And keep it like "unofficial extension", which I'll be happy to support 
> in Xref anyway (and Xref is in ELPA Core, so users will always be able 
> to install the latest version). There are benefits to being such 
> extension: once you're a proper part of the protocol, you become much 
> more set in stone.

Yes, this would be the most minimal change - only define 
`group-function` as an official metadata which can then be used by 
commands and UIs which support it. However it would certainly be more 
encouraging to make use of the functionality if thereis support in the 
default completion UI or Icomplete.

>>> Speaking of group-function's implementation there, the 
>>> text-properties approach seems like an overkill since we can reliably 
>>> string-match anyway. But it's a minor thing.
>>
>> I've chosen the text property approach such that the group title 
>> retrieval does not lead to allocations (transform=nil). The 
>> transform=nil call is performance critical for continuously updating 
>> UIs like Icomplete, Vertico etc., since the candidates are grouped 
>> after sorting.
> 
> But when the list is updated, the elements are basically recreated from 
> the external process's output every time, right? So this only helps if 
> you want to cache the result for repeated invocations of group-function 
> on the same result set.

I am not entirely sure I understand you correctly here. The candidate 
set is generated once from the external process. Then the properties are 
attached once per candidate. In the subsequent filtering/completing of 
the candidates, the candidate set and the attached properties are *not* 
regenerated. This means we save a lot of work here. In particular with 
continuously updating UIs we avoid regenerating the properties every key 
press.

> Also, xref-find-definitions usually deals with a limited number of 
> search results. But I guess some of your users set 
> xref-show-xrefs-function to xref-show-definitions-completiong-read too.

Yes, this the use case I proposed. Then you can have many more candidates.

Daniel



  reply	other threads:[~2021-04-25 22:10 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-25 13:32 [PATCH] `completing-read`: Add `group-function` support to completion metadata Daniel Mendler
2021-04-25 19:35 ` Dmitry Gutov
2021-04-25 19:47   ` Daniel Mendler
2021-04-25 21:50     ` Dmitry Gutov
2021-04-25 22:10       ` Daniel Mendler [this message]
2021-04-25 22:40         ` Dmitry Gutov
2021-04-25 22:58           ` Daniel Mendler
2021-04-26  4:51             ` Protesilaos Stavrou
2021-04-27 16:53               ` Juri Linkov
2021-04-28  6:18                 ` Protesilaos Stavrou
2021-04-25 23:33           ` Stefan Monnier
2021-04-26 10:01             ` Daniel Mendler
2021-04-26 13:50               ` Stefan Monnier
2021-04-27  1:46             ` Dmitry Gutov
2021-04-27  1:59               ` tumashu
2021-04-27  2:45                 ` Daniel Mendler
2021-04-27 15:47                 ` Dmitry Gutov
2021-04-27  3:41               ` Stefan Monnier
2021-04-28  0:08                 ` Dmitry Gutov
2021-04-28  3:21                   ` Stefan Monnier
2021-04-25 19:38 ` [PATCH] `completing-read`: Add `group-function` support to completion metadata (REVISED PATCH) Daniel Mendler
2021-04-25 20:45   ` Juri Linkov
2021-04-25 21:26     ` Daniel Mendler
2021-04-29 16:20   ` Juri Linkov
2021-04-29 16:52     ` Daniel Mendler
2021-04-29 17:07     ` Stefan Monnier
2021-04-29 17:13       ` Daniel Mendler
2021-04-29 22:54         ` Juri Linkov
2021-04-29 23:55           ` [PATCH] `completing-read`: Add `group-function` support to completion metadata (REVISED PATCH VERSION 2) Daniel Mendler
2021-04-30  9:00             ` Daniel Mendler
2021-04-30 17:01               ` Juri Linkov
2021-04-30 18:11                 ` Daniel Mendler
2021-04-30 18:30                   ` Daniel Mendler
2021-05-01 19:57                     ` Juri Linkov
2021-05-02  0:43                       ` Daniel Mendler
2021-05-02  7:07                         ` Eli Zaretskii
2021-05-02 11:01                           ` Daniel Mendler
2021-04-30 16:51             ` Juri Linkov
2021-04-30 18:13               ` Daniel Mendler
2021-05-01 19:54                 ` Juri Linkov
2021-05-02  0:32                   ` Daniel Mendler
2021-05-02 21:38                     ` Juri Linkov
2021-05-07 17:03                       ` Juri Linkov
2021-05-07 17:55                         ` Daniel Mendler
2021-05-08  6:24                           ` Daniel Mendler
2021-05-08  8:45                             ` [PATCH] `completing-read`: Add `group-function` support to completion metadata (REVISED PATCH VERSION 4) Daniel Mendler
2021-05-08  9:10                               ` Daniel Mendler
2021-05-09 17:59                                 ` Juri Linkov
2021-05-09 18:50                                   ` Daniel Mendler
2021-05-09 18:56                                     ` Stefan Monnier
2021-05-09 19:11                                       ` Daniel Mendler
2021-05-10 20:47                                     ` Juri Linkov
2021-05-11  7:51                                       ` [PATCH] `completing-read`: Add `group-function` support to completion metadata (REVISED PATCH VERSION 5) Daniel Mendler
2021-05-11 17:59                                         ` Juri Linkov
2021-05-08 13:15                         ` [PATCH] `completing-read`: Add `group-function` support to completion metadata (REVISED PATCH VERSION 2) Stefan Monnier
2021-05-09 18:05                           ` Juri Linkov
2021-05-09 18:37                             ` Eli Zaretskii
2021-05-11 18:06                               ` Juri Linkov
2021-05-11 18:44                                 ` Eli Zaretskii
2021-05-11 18:58                                   ` Daniel Mendler
2021-05-11 19:22                                     ` Eli Zaretskii
2021-05-11 19:46                                       ` Daniel Mendler
2021-05-11 19:59                                         ` Eli Zaretskii
2021-05-11 20:30                                           ` [PATCH] `completing-read`: Add `group-function` support to completion metadata (REVISED PATCH VERSION 6) Daniel Mendler
2021-05-13 10:32                                             ` Eli Zaretskii
2021-05-13 11:45                                               ` [PATCH] `completing-read`: Add `group-function` support to completion metadata (REVISED PATCH VERSION 7) Daniel Mendler
2021-05-20  9:39                                                 ` Daniel Mendler
2021-05-20 17:53                                                   ` Juri Linkov
2021-05-20 18:51                                                     ` Daniel Mendler
2021-04-29 17:09     ` [PATCH] `completing-read`: Add `group-function` support to completion metadata (REVISED PATCH) Dmitry Gutov
2021-04-29 17:16       ` Daniel Mendler
2021-04-29 17:55         ` Dmitry Gutov
2021-04-29 18:31           ` [External] : " Drew Adams
2021-04-29 20:25             ` Dmitry Gutov
2021-04-29 22:15               ` Drew Adams
2021-04-29 22:28                 ` Dmitry Gutov
2021-04-29 23:31                   ` Drew Adams
2021-04-29 19:21           ` Daniel Mendler
2021-05-02 14:29   ` [PATCH] `completing-read`: Add `group-function` support to completion metadata (REVISED PATCH VERSION 3) Daniel Mendler
2021-05-02 21:49     ` Juri Linkov
2021-05-03 14:40       ` Daniel Mendler

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=b93373b1-6c31-b5f8-f94a-4047471effc9@daniel-mendler.de \
    --to=mail@daniel-mendler.de \
    --cc=dgutov@yandex.ru \
    --cc=emacs-devel@gnu.org \
    --cc=gregory@heytings.org \
    --cc=monnier@iro.umontreal.ca \
    /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).