Skip to main content

15.4.3 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.