unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Spencer Baugh <sbaugh@janestreet.com>
To: Juri Linkov <juri@linkov.net>
Cc: sbaugh@catern.com,  emacs-devel@gnu.org
Subject: Re: Updating *Completions* as you type
Date: Mon, 20 Nov 2023 13:50:37 -0500	[thread overview]
Message-ID: <iercyw445tu.fsf@janestreet.com> (raw)
In-Reply-To: <86v89ws5t3.fsf@mail.linkov.net> (Juri Linkov's message of "Mon,  20 Nov 2023 19:47:12 +0200")

Juri Linkov <juri@linkov.net> writes:
>> For buffers, for example, sorting by the buffer-list can be done by just
>> setting display-sort-function to identity, but we probably shouldn't
>> expose that fact to the user.  (We could expose a generic "sort by
>> defaults" but that would be less efficient.)
>
> It should be fine to use 'identity' as a value when the Customization UI
> will show a more meaningful tag like "Unsorted".

Yes, that's fine.  But "Unsorted" is different from "Sorted by
buffer-list", which is the behavior one gets with read-buffer.  In other
words, the documentation can be more specific for read-buffer-sort.

>> The sorting style might even require the sorting option to actually
>> change the completion table's behavior.  File name completion could be
>> sorted by mtime, for example, by having the completion table include
>> mtime as a text property when read-file-name-sort=mtime, and then
>> setting display-sort-function to something which reads that property.  I
>> think that can only work if we have separate sorting options.
>
> Also a separate option might be needed when a completion table
> supports a non-standard sorting order such as
> 'mule--ucs-names-sort-by-code' when 'read-char-by-name-sort'
> is customized to 'code'.  But the users still should have freedom
> to override all metadata: display-sort-function, affixation-function,
> group-function, etc.
>
>>>   (setopt completion-category-overrides
>>>     '((buffer (display-sort-function . minibuffer-sort-by-history))
>>>       (project-file (display-sort-function . minibuffer-sort-by-history))
>>>
>>> And default values could be specified in completion-category-defaults.
>>
>> I think the default values would be part of the completion table itself;
>> a completion table can just set display-sort-function itself, it doesn't
>> need completion-category-defaults to do that.
>
> OTOH, the completion table needs only to return its category in metadata.
> Otherwise every completion table of the same category would need to
> duplicate display-sort-function in its completing-read.

Interesting point.  In some sense, the category gives us an inheritance
mechanism for completion tables, where a completion table can just use
the defaults for its category rather than specifying all the details.
But if the completion table has some specific sorting function it wants,
it can provide that by explicitly returning it in the metadata.

And completion-category-overrides gives the user a way to do
customization of the category defaults.

So perhaps, for a given metadata, display-sort-function would be:

(or
 (alist-get 'display-sort-function metadata)
 (alist-get 'display-sort-function (alist-get category completion-category-overrides))
 (alist-get 'display-sort-function (alist-get category completion-category-defaults))
 completions-sort)

That makes sense to me.

And (alist-get 'display-sort-function metadata) is configurable with
separate completion-table-specific options, like read-buffer-sort.

If we do this, completions-sort acts like a "default" entry in
completion-category-defaults, which acts for categories which aren't
otherwise matched.  Which makes a lot of sense, and makes it behave like
completion-styles and completion-cycle-threshold.

I expect some disagreement about the following question: should
completion-category-overrides override the display-sort-function
returned by the completion table?  That is, should it instead be:

(or
 (alist-get 'display-sort-function (alist-get category completion-category-overrides))
 (alist-get 'display-sort-function metadata)
 (alist-get 'display-sort-function (alist-get category completion-category-defaults))
 completions-sort)

I think no.  The most specific customization (customizing an individual
completion table) should override more broad customizations (customizing
an entire category).  I don't think there's a reasonable use-case for
overriding a display-sort-function explicitly returned by a table - we
can just make that display-sort-function configurable directly.

We probably will want to make this clear in the documentation, of
course.

>> Maybe we should decide what things are supposed to be configured by
>> category and what things are supposed to be configured by the table
>> itself.  Because in theory we could allow setting completion-styles and
>> completion-cycle-threshold with completion table metadata, and I'm not
>> sure why we didn't do it that way - it could even be nice to have a
>> completion style which is specific to an individual completion table.
>
> I guess when an individual completion table needs to use metadata
> slightly different from other similar cases then it should provide
> a different category/subcategory.

Or the individual completion table just returns that slightly different
metadata itself, and it overrides the metadata pulled from its category.



  reply	other threads:[~2023-11-20 18:50 UTC|newest]

Thread overview: 107+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-12 23:53 Updating *Completions* as you type sbaugh
2023-10-13  6:31 ` Eli Zaretskii
2023-10-13 18:01   ` Spencer Baugh
2023-10-14  7:09     ` Eli Zaretskii
2023-10-14 19:26       ` Björn Bidar
     [not found]       ` <874jit2ef7.fsf@>
2023-10-14 19:38         ` Eli Zaretskii
2023-10-14 16:51     ` Juri Linkov
2023-10-14 17:56       ` sbaugh
2023-10-14 19:51       ` Dmitry Gutov
2023-10-13  6:34 ` Juri Linkov
2023-10-13 19:04   ` Spencer Baugh
2023-10-14 16:58     ` Juri Linkov
2023-10-14 20:05       ` sbaugh
2023-10-15  6:06         ` Eli Zaretskii
2023-10-15 15:55           ` sbaugh
2023-10-16 11:38             ` Eli Zaretskii
2023-10-16 14:50               ` Michael Albinus
2023-10-16 15:58                 ` [External] : " Drew Adams
2023-10-16 12:16             ` sbaugh
2023-10-17 18:23               ` Juri Linkov
2023-10-18 23:27                 ` Spencer Baugh
2023-10-15  7:32         ` Juri Linkov
2023-10-16 19:28           ` Rudolf Adamkovič
2023-10-17 18:38             ` Juri Linkov
2023-10-15 20:31         ` Eshel Yaron
2023-10-16  3:18           ` [External] : " Drew Adams
2023-10-16 16:54           ` Juri Linkov
2023-10-17 13:48         ` sbaugh
2023-10-17 18:35           ` Juri Linkov
2023-10-17 22:57             ` Spencer Baugh
2023-10-18  3:04               ` [External] : " Drew Adams
2023-10-18  6:56               ` Juri Linkov
2023-10-18 12:25                 ` Spencer Baugh
2023-10-18 17:32                   ` Juri Linkov
2023-10-18 23:33                     ` Spencer Baugh
2023-10-19  2:29                       ` Spencer Baugh
2023-10-19  6:55                         ` Juri Linkov
2023-11-19 19:22                           ` sbaugh
2023-11-20  7:51                             ` Juri Linkov
2023-11-20 15:24                               ` Spencer Baugh
2023-11-20 17:47                                 ` Juri Linkov
2023-11-20 18:50                                   ` Spencer Baugh [this message]
2023-11-21  7:58                                     ` Juri Linkov
2023-11-21 12:40                                       ` sbaugh
2023-11-21 17:09                                         ` Juri Linkov
2023-11-21 20:45                                           ` Spencer Baugh
2023-11-22  7:51                                             ` Juri Linkov
2023-11-22 16:11                                               ` Spencer Baugh
2023-11-23  7:58                                                 ` Juri Linkov
2023-11-23 12:36                                                   ` sbaugh
2023-11-24  7:58                                                     ` Juri Linkov
2023-11-25 16:44                                                       ` Spencer Baugh
2023-11-25 18:31                                                         ` Juri Linkov
2023-11-26 13:33                                                           ` sbaugh
2023-11-27  7:28                                                             ` Juri Linkov
2023-11-28 14:38                                                               ` Spencer Baugh
2023-11-28 15:03                                                                 ` Eli Zaretskii
2023-11-28 17:13                                                                   ` Juri Linkov
2023-11-28 17:36                                                                     ` Eli Zaretskii
2023-11-29  7:11                                                                       ` Juri Linkov
2023-11-29 13:09                                                                         ` Eli Zaretskii
2023-11-29 14:14                                                                           ` Spencer Baugh
2023-11-29 14:54                                                                             ` Eli Zaretskii
2023-11-29 15:21                                                                               ` Spencer Baugh
2023-11-29 15:52                                                                                 ` Eli Zaretskii
2023-11-29 19:17                                                                                   ` Spencer Baugh
2023-11-30  6:12                                                                                     ` Eli Zaretskii
2023-11-30 12:33                                                                                       ` Spencer Baugh
2023-11-30 14:10                                                                                         ` Eli Zaretskii
2023-11-28 23:56                                                                   ` Spencer Baugh
2023-11-29  3:33                                                                     ` Eli Zaretskii
2023-12-03 17:25                                                                     ` Juri Linkov
2023-12-03 17:56                                                                       ` Eli Zaretskii
2023-12-06 17:17                                                                         ` Juri Linkov
2023-11-28 17:16                                                                 ` Juri Linkov
2023-11-28 23:36                                                                   ` Turning completion table lambdas into symbols Spencer Baugh
2023-11-28 23:51                                                                     ` Dmitry Gutov
2023-11-29 19:26                                                                       ` Spencer Baugh
2023-12-01  0:36                                                                         ` Dmitry Gutov
2023-11-29  7:18                                                                     ` Juri Linkov
2023-11-21 12:54                                       ` Updating *Completions* as you type John Yates
2023-11-21 17:03                                         ` Juri Linkov
2023-11-21 22:27                                           ` John Yates
2023-10-20  6:49         ` Juri Linkov
2023-10-17 15:01       ` sbaugh
2023-10-17 18:20         ` Juri Linkov
2023-10-17 23:37           ` Spencer Baugh
2023-10-17 23:44             ` Spencer Baugh
2023-10-18  6:51             ` Juri Linkov
2023-10-18 12:47               ` Spencer Baugh
2023-10-18 17:28                 ` Juri Linkov
2023-10-18 23:32                   ` Spencer Baugh
2023-10-16  3:19   ` [External] : " Drew Adams
2023-10-20  9:35   ` zcomplete Philip Kaludercic
2023-10-22 17:28     ` zcomplete Juri Linkov
2023-10-23  5:00       ` zcomplete Protesilaos Stavrou
2023-10-23  6:45         ` zcomplete Juri Linkov
2023-10-13 18:11 ` Updating *Completions* as you type Daniel Semyonov
2023-10-13 18:48   ` Spencer Baugh
2023-10-16  3:16     ` [External] : " Drew Adams
2023-10-16  9:25       ` Philip Kaludercic
2023-10-16 16:03         ` Drew Adams
2023-10-20  7:45           ` Philip Kaludercic
2023-10-20 16:10             ` Drew Adams
2023-10-16 22:55         ` Emanuel Berg
2023-10-17  6:09           ` Emanuel Berg
2023-10-17  0:44 ` Michael Heerdegen

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=iercyw445tu.fsf@janestreet.com \
    --to=sbaugh@janestreet.com \
    --cc=emacs-devel@gnu.org \
    --cc=juri@linkov.net \
    --cc=sbaugh@catern.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).