Splicing into Lists
The :inline
feature lets you splice a variable number of elements into the middle of a list
or vector
customization type. You use it by adding :inline t
to a type specification which is contained in a list
or vector
specification.
Normally, each entry in a list
or vector
type specification describes a single element type. But when an entry contains :inline t
, the value it matches is merged directly into the containing sequence. For example, if the entry matches a list with three elements, those become three elements of the overall sequence. This is analogous to ‘,@’ in a backquote construct (see Backquote).
For example, to specify a list whose first element must be baz
and whose remaining arguments should be zero or more of foo
and bar
, use this customization type:
(list (const baz) (set :inline t (const foo) (const bar)))
This matches values such as (baz)
, (baz foo)
, (baz bar)
and (baz foo bar)
.
When the element-type is a choice
, you use :inline
not in the choice
itself, but in (some of) the alternatives of the choice
. For example, to match a list which must start with a file name, followed either by the symbol t
or two strings, use this customization type:
(list file (choice (const t) (list :inline t string string)))
If the user chooses the first alternative in the choice, then the overall list has two elements and the second element is t
. If the user chooses the second alternative, then the overall list has three elements and the second and third must be strings.
The widgets can specify predicates to say whether an inline value matches the widget with the :match-inline
element.
Copyright © 1990-1996, 1998-2021 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Splicing-into-Lists.html