unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Daniel Mendler <mail@daniel-mendler.de>
To: "João Távora" <joaotavora@gmail.com>
Cc: Juri Linkov <juri@linkov.net>,
	monnier@iro.umontreal.ca,
	"emacs-devel@gnu.org" <emacs-devel@gnu.org>
Subject: Re: [PATCH] (icomplete-vertical-mode): Add support for affixations and, annotations
Date: Sun, 23 May 2021 23:31:54 +0200	[thread overview]
Message-ID: <23510125-37b9-e87e-3590-5322f44772ce@daniel-mendler.de> (raw)
In-Reply-To: <87pmxhb1rs.fsf@gmail.com>

On 5/23/21 11:04 PM, João Távora wrote:
>> I would also be happy with an extension to the `annotation-function`,
>> where the returned annotation string is the suffix and can be
>> propertized with an additional string for the prefix.
> 
> Either that, or it could return a list instead of a string, and then the
> list would be interpreted as "affixation function" results.

A list return value is not a good idea since that does not allow to
write forward and backward compatible code. This is actually an
advantage of the `affixation-function`. It is a non-intrusive addition.
The same holds for the recently added `group-function`, which I proposed.

>>> I also don't understand why :affixation-function is given a full list of
>>> completions, when it is presumably meant to return a list of exactly the
>>> same length.  Seems like a potential hazard to allow this function to do
>>> filtering.
>>
>> It is not allowed by the definition of the function.
> 
> Yes, but users love to foot-shoot and who is going to enforce that?
> Your icomplete patch doesn't, for example.  Whereas if it were a unary
> function of a completion string, the hazard wouldn't exist.

Of course.

> and it seems one purported advantage of having `affixation-function` see
> all the candidates is to be able to do layout decisions since it knows
> the longest and shortest candidate. 

Indeed, that was the point. Unfortunately it turns out that having
layout decisions based on all the currently visible candidates will give
bad results when scrolling. So I am never using that capability in my
packages.

You may have seen the Marginalia package by Omar Antolín Camarena and
myself, where we add rich annotations to many commands using the
`annotation/affixation-function` (https://github.com/minad/marginalia).
We are doing manual alignment there.

So from my current experience the advantage is small.

> But I don't understand why these decision should be done in the data
> backend.  The backedn should only annotate a completion with a possible
> _hint_ on how to layout ("prefix" and "suffix" are hints). It's the
> frontend, who is who knows what to display and where, who should be
> responsible for the layout.

Yes, alignment should better happen on the display level.

>>> So, unless I am missing something (known to happen), this seems like a
>>> misdesign which would be nice to correct before the Emacs 28 release
>>> and/or too many external packages start relying on this.
>>
>> For what is worth, my packages already rely on this. But I would have
>> this changed quickly given a modified definition of the
>> `annotation-function`. I am not aware of other packages already using
>> this functionality (I searched around for this at some point).
> 
> That's valuable information.  Let's wait for Juri and Stefan on this.

If it is decided to change this, I think it would be best to use text
properties for this. The `annotation-function` should continue to return
suffix strings and additionally, each suffix has an `annotation-prefix`
text property attached. That would be a more minimal API change than the
addition of the `affixation-function`, while still being fully compatible.

Daniel



  reply	other threads:[~2021-05-23 21:31 UTC|newest]

Thread overview: 177+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-22 21:00 [PATCH] (icomplete-vertical-mode): Add support for affixations and, annotations Daniel Mendler
2021-05-23  9:37 ` João Távora
     [not found]   ` <adbebf98-eb86-9b8b-f191-e2e9f00cf80b@daniel-mendler.de>
2021-05-23 19:55     ` João Távora
2021-05-23 20:14       ` Daniel Mendler
2021-05-23 21:04         ` João Távora
2021-05-23 21:31           ` Daniel Mendler [this message]
2021-05-23 21:54             ` João Távora
2021-05-23 22:38               ` Daniel Mendler
2021-05-24 22:46                 ` João Távora
2021-05-25  3:06                   ` Daniel Mendler
2021-05-25  9:21                     ` João Távora
2021-05-26 18:12                   ` João Távora
2021-05-26 19:32                     ` Daniel Semyonov via Emacs development discussions.
2021-05-23 23:04               ` Daniel Mendler
2021-05-23 23:39                 ` Stefan Monnier
2021-05-24 22:54                   ` João Távora
2021-05-25  1:38                     ` Stefan Monnier
2021-05-25  8:39                       ` João Távora
2021-05-25 11:00                         ` Gregory Heytings
2021-05-26  0:03                           ` João Távora
2021-05-25  3:12                     ` Daniel Mendler
2021-05-25  9:25                       ` João Távora
2021-05-24 19:05                 ` João Távora
2021-05-24 19:13                   ` João Távora
2021-05-24 19:53                     ` Daniel Mendler
2021-05-24 23:04                       ` João Távora
2021-05-25  3:14                         ` Daniel Mendler
2021-05-25  9:31                           ` João Távora
2021-05-25  9:40                             ` Daniel Mendler
2021-05-24 22:05                   ` Dmitry Gutov
2021-05-23 23:37             ` Juri Linkov
2021-05-23 23:39             ` Juri Linkov
2021-05-24 10:26               ` Daniel Mendler
2021-05-24 22:07                 ` Juri Linkov
2021-05-25  2:53                   ` Daniel Mendler
2021-05-25  8:30                     ` João Távora
2021-05-25 16:59                       ` Juri Linkov
2021-05-25 17:46                         ` João Távora
2021-05-25 20:37                           ` Juri Linkov
2021-05-26 21:45                             ` Juri Linkov
2021-05-26 22:20                               ` Dmitry Gutov
2021-05-26 23:17                                 ` João Távora
2021-05-27  1:06                                   ` Dmitry Gutov
2021-05-27  7:29                                     ` João Távora
2021-05-27 13:15                                       ` Dmitry Gutov
2021-05-27 14:19                                         ` João Távora
2021-05-27 18:52                                           ` Dmitry Gutov
2021-05-27 20:58                                             ` João Távora
2021-05-28  8:08                               ` Daniel Mendler
2021-05-28  8:34                                 ` João Távora
2021-05-28  9:06                                   ` Daniel Mendler
2021-05-28 10:09                                     ` João Távora
2021-05-28 11:16                                       ` Daniel Mendler
2021-05-28 11:41                                         ` João Távora
2021-05-28 11:55                                           ` Daniel Mendler
2021-05-28 12:15                                             ` João Távora
2021-05-28 12:32                                               ` Daniel Mendler
2021-05-28 13:17                                                 ` João Távora
2021-05-28 13:55                                                   ` Daniel Mendler
2021-05-28 18:46                                                 ` Juri Linkov
2021-05-29  8:11                                                   ` Daniel Mendler
2021-05-28 12:44                                             ` Dmitry Gutov
2021-05-28 13:14                                               ` Daniel Mendler
2021-05-28 13:57                                                 ` Dmitry Gutov
2021-05-28 14:10                                                   ` Daniel Mendler
2021-05-28 14:57                                                     ` Dmitry Gutov
2021-05-28 16:01                                                       ` Daniel Mendler
2021-06-01  9:56                                         ` João Távora
2021-06-01 11:27                                           ` Daniel Mendler
2021-06-01 12:00                                             ` João Távora
2021-06-01 12:37                                               ` Daniel Mendler
2021-06-01 14:30                                                 ` João Távora
2021-06-01 14:40                                                   ` Daniel Mendler
2021-06-01 15:49                                                     ` João Távora
2021-06-01 16:00                                                       ` Daniel Mendler
2021-06-01 18:47                                                         ` João Távora
2021-06-01 19:03                                                           ` Daniel Mendler
2021-06-01 22:32                                                             ` João Távora
2021-06-01 20:22                                                           ` Stefan Monnier
2021-06-01 22:39                                                             ` João Távora
2021-06-02  2:40                                                               ` Stefan Monnier
2021-06-02  7:53                                                                 ` João Távora
2021-06-02 13:48                                                                   ` Stefan Monnier
2021-06-01 23:04                                                           ` Dmitry Gutov
2021-06-01 23:22                                                             ` João Távora
2021-06-01 23:29                                                               ` João Távora
2021-06-01 23:46                                                               ` Dmitry Gutov
2021-06-02  0:02                                                                 ` João Távora
2021-06-02 11:48                                                                   ` Dmitry Gutov
2021-06-02 12:59                                                                     ` João Távora
2021-06-02 18:29                                                                       ` Dmitry Gutov
2021-06-02 18:52                                                                         ` João Távora
2021-06-02 14:19                                                                   ` complexity in minibuffer (was: (icomplete-vertical-mode): Add support for affixations and, annotations) Stefan Monnier
2021-06-02 14:33                                                                     ` João Távora
2021-06-02 15:06                                                                       ` complexity in minibuffer Stefan Monnier
2021-06-02 15:20                                                                         ` João Távora
2021-06-02 15:29                                                                           ` Dmitry Gutov
2021-06-02 15:37                                                                             ` João Távora
2021-06-02 18:11                                                                               ` Dmitry Gutov
2021-06-02 18:30                                                                                 ` João Távora
2021-06-02 15:38                                                                           ` Stefan Monnier
2021-06-02 15:45                                                                             ` João Távora
2021-06-02 15:59                                                                               ` Daniel Mendler
2021-06-02 16:29                                                                                 ` João Távora
2021-06-02 15:53                                                                             ` Daniel Mendler
2021-06-02 18:31                                                                         ` Dmitry Gutov
2021-06-02 19:03                                                                           ` João Távora
2021-06-02 20:15                                                                             ` Dmitry Gutov
2021-06-02 22:11                                                                       ` Juri Linkov
2021-06-03  9:04                                                                         ` João Távora
2021-06-03 20:28                                                                           ` Juri Linkov
2021-06-01 15:58                                                     ` [PATCH] (icomplete-vertical-mode): Add support for affixations and, annotations Stefan Monnier
2021-06-01 16:04                                                       ` Daniel Mendler
2021-06-02  5:17                                               ` tumashu
2021-06-02  7:48                                                 ` João Távora
2021-06-02 10:40                                                   ` Dmitry Gutov
2021-06-02 11:04                                                     ` João Távora
2021-06-02 11:28                                                       ` Dmitry Gutov
2021-06-02 11:33                                                         ` João Távora
2021-06-02 12:31                                                           ` Dmitry Gutov
2021-06-02 13:16                                                             ` João Távora
2021-06-05  1:48                                                               ` Dmitry Gutov
2021-06-05  9:21                                                                 ` João Távora
2021-06-05 23:06                                                                   ` Dmitry Gutov
2021-06-05 23:25                                                                     ` João Távora
2021-06-05  4:23                                                               ` Stefan Monnier
2021-06-05  9:26                                                                 ` João Távora
2021-06-05 13:02                                                                 ` Ergus
2021-06-05 23:47                                                                 ` Dmitry Gutov
2021-06-06  2:30                                                                   ` Stefan Monnier
2021-06-02 13:38                                                           ` Stefan Monnier
2021-06-02 14:11                                                             ` Dmitry Gutov
2021-06-02 14:54                                                               ` Stefan Monnier
2021-06-02 15:07                                                                 ` João Távora
2021-06-05  1:08                                                                   ` Dmitry Gutov
2021-06-05  9:16                                                                     ` João Távora
2021-06-01 14:47                                           ` Gregory Heytings
2021-06-01 14:53                                             ` Daniel Mendler
2021-06-01 14:58                                               ` Gregory Heytings
2021-06-01 15:06                                                 ` Daniel Mendler
2021-06-01 15:33                                                   ` Gregory Heytings
2021-06-01 15:41                                                     ` Daniel Mendler
2021-06-01 15:09                                                 ` João Távora
2021-06-01 15:12                                                   ` Daniel Mendler
2021-06-01 15:06                                             ` João Távora
     [not found]                                           ` <b49749e34d620592d83a@heytings.org>
     [not found]                                             ` <CALDnm53Wdnp0yAu6uQd8A=6-uLArCBEdj4F+aVzUdFOT00XMWw@mail.gmail.com>
     [not found]                                               ` <b49749e34dc4e4287593@heytings.org>
     [not found]                                                 ` <87lf7t8wfz.fsf@gmail.com>
2021-06-01 15:24                                                   ` Gregory Heytings
2021-06-01 23:05                                                     ` João Távora
2021-05-24 23:02                 ` Dmitry Gutov
2021-05-24 23:04                 ` Dmitry Gutov
2021-05-23 21:35           ` Daniel Mendler
2021-05-23 22:42           ` Dmitry Gutov
2021-05-23 23:33             ` Stefan Monnier
2021-05-23 23:42             ` Juri Linkov
2021-05-24 23:24               ` Dmitry Gutov
2021-05-23 23:35       ` Juri Linkov
2021-05-24  3:23         ` Stefan Monnier
2021-05-24 10:34           ` Daniel Mendler
2021-05-24 16:22             ` Caching where-is-internal (was: (icomplete-vertical-mode): Add support for affixations and, annotations) Stefan Monnier
2021-05-24 16:31               ` Daniel Mendler
2021-05-24 19:53                 ` Caching where-is-internal Stefan Monnier
2021-05-24 20:07                   ` Daniel Mendler
2021-05-24 20:33                     ` Stefan Monnier
2021-05-24 20:45                       ` Daniel Mendler
2021-05-24 21:44                         ` Stefan Monnier
2021-05-24 21:52           ` [PATCH] (icomplete-vertical-mode): Add support for affixations and, annotations Juri Linkov
2021-05-24 22:41             ` João Távora
2021-05-25  1:27             ` Stefan Monnier
2021-05-24 22:37         ` João Távora
2021-05-25 16:53           ` Juri Linkov
2021-05-25 17:24             ` Stefan Monnier
2021-05-25 17:40               ` João Távora
2021-05-25 20:01                 ` Stefan Monnier
2021-05-25 20:27                   ` Dmitry Gutov
2021-05-25 20:46                   ` João Távora
  -- strict thread matches above, loose matches on Subject: below --
2021-06-02  8:25 Manuel Uberti
2021-06-02 11:07 ` João Távora
2021-06-02 11:29   ` Manuel Uberti

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=23510125-37b9-e87e-3590-5322f44772ce@daniel-mendler.de \
    --to=mail@daniel-mendler.de \
    --cc=emacs-devel@gnu.org \
    --cc=joaotavora@gmail.com \
    --cc=juri@linkov.net \
    --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).