elisp: Splicing into Lists

 
 14.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 (SeeBackquote).
 
    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.