(affixation-function): Allow only three-element list elements

Restrict the definition of the `affixation-function`.  The function
must return a list of three element lists.  Since the
`affixation-function` is part of the widely used `completing-read` API
a simplification is helpful for both authors of completion UIs and
authors of completion tables.

* doc/lispref/minibuf.texi: Update documentation.
* lisp/minibuffer.el: Update documentation.
* lisp/simple.el (read-extended-command--affixation):
Return three-element lists.

https://lists.gnu.org/archive/html/emacs-devel/2021-04/msg01193.html
This commit is contained in:
Daniel Mendler 2021-04-27 19:44:41 +03:00 committed by Juri Linkov
parent 7133a67dcd
commit d8e037eeaa
3 changed files with 20 additions and 21 deletions

View file

@ -1819,12 +1819,10 @@ default to that string.
@item :affixation-function
The value should be a function to add prefixes and suffixes to
completions. This function must accept one argument, a list of
completions, and should return such a list of completions where
each element contains a list of three elements: a completion,
a prefix string, and a suffix string. When this function
returns a list of two elements, it is interpreted as a list
of a completion and a suffix string like in @code{:annotation-function}.
This function takes priority over @code{:annotation-function}.
completions, and should return a list of annotated completions. Each
element of the returned list must be a three-element list, the
completion, a prefix string, and a suffix string. This function takes
priority over @code{:annotation-function}.
@item :exit-function
The value should be a function to run after performing completion.
@ -1942,10 +1940,8 @@ completions. The function should take one argument,
return such a list of @var{completions} where each element contains a list
of three elements: a completion, a prefix which is displayed before
the completion string in the @file{*Completions*} buffer, and
a suffix displayed after the completion string. When this function
returns a list of two elements, it is interpreted as a list of
a completion and a suffix string like in @code{annotation-function}.
This function takes priority over @code{annotation-function}.
a suffix displayed after the completion string. This function
takes priority over @code{annotation-function}.
@item display-sort-function
The value should be a function for sorting completions. The function

View file

@ -122,10 +122,10 @@ This metadata is an alist. Currently understood keys are:
returns a string to append to STRING.
- `affixation-function': function to prepend/append a prefix/suffix to
entries. Takes one argument (COMPLETIONS) and should return a list
of completions with a list of either two elements: completion
and suffix, or three elements: completion, its prefix
and suffix. This function takes priority over `annotation-function'
when both are provided, so only this function is used.
of annotated completions. The elements of the list must be
three-element lists: completion, its prefix and suffix. This
function takes priority over `annotation-function' when both are
provided, so only this function is used.
- `display-sort-function': function to sort entries in *Completions*.
Takes one argument (COMPLETIONS) and should return a new list
of completions. Can operate destructively.
@ -1972,11 +1972,11 @@ These include:
`:affixation-function': Function to prepend/append a prefix/suffix to
completions. The function must accept one argument, a list of
completions, and return a list where each element is a list of
either two elements: a completion, and a suffix, or
three elements: a completion, a prefix and a suffix.
This function takes priority over `:annotation-function'
when both are provided, so only this function is used.
completions, and return a list of annotated completions. The
elements of the list must be three-element lists: completion, its
prefix and suffix. This function takes priority over
`:annotation-function' when both are provided, so only this
function is used.
`:exit-function': Function to run after completion is performed.

View file

@ -2080,8 +2080,11 @@ or (if one of MODES is a minor mode), if it is switched on in BUFFER."
(obsolete
(format " (%s)" (car obsolete)))
((and binding (not (stringp binding)))
(format " (%s)" (key-description binding))))))
(if suffix (list command-name suffix) command-name)))
(format " (%s)" (key-description binding)))
(t ""))))
(put-text-property 0 (length suffix)
'face 'completions-annotations suffix)
(list command-name "" suffix)))
command-names)))
(defcustom suggest-key-bindings t