[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
When none of the simple types is appropriate, you can use composite types, which build new types from other types. Here are several ways of doing that:
(restricted-sexp :match-alternatives criteria)
nil
or non-nil
according to
the argument. Using a predicate in the list says that objects for which
the predicate returns non-nil
are acceptable.
'object
. This sort of element
in the list says that object itself is an acceptable value.
For example,
(restricted-sexp :match-alternatives (integerp 't 'nil)) |
allows integers, t
and nil
as legitimate values.
The customization buffer shows all legitimate values using their read syntax, and the user edits them textually.
(cons car-type cdr-type)
(cons string
symbol)
is a customization type which matches values such as
("foo" . foo)
.
In the customization buffer, the CAR and the CDR are displayed and edited separately, each according to the type that you specify for it.
(list element-types...)
For example, (list integer string function)
describes a list of
three elements; the first element must be an integer, the second a
string, and the third a function.
In the customization buffer, each element is displayed and edited separately, according to the type specified for it.
(vector element-types...)
list
except that the value must be a vector instead of a
list. The elements work the same as in list
.
(choice alternative-types...)
(choice integer string)
allows either an
integer or a string.
In the customization buffer, the user selects one of the alternatives using a menu, and can then edit the value in the usual way for that alternative.
Normally the strings in this menu are determined automatically from the
choices; however, you can specify different strings for the menu by
including the :tag
keyword in the alternatives. For example, if
an integer stands for a number of spaces, while a string is text to use
verbatim, you might write the customization type this way,
(choice (integer :tag "Number of spaces") (string :tag "Literal text")) |
so that the menu offers `Number of spaces' and `Literal Text'.
In any alternative for which nil
is not a valid value, other than
a const
, you should specify a valid default for that alternative
using the :value
keyword. See section 14.4.4 Type Keywords.
(radio element-types...)
choice
, except that the choices are displayed
using `radio buttons' rather than a menu. This has the advantage of
displaying documentation for the choices when applicable and so is often
a good choice for a choice between constant functions
(function-item
customization types).
(const value)
The main use of const
is inside of choice
. For example,
(choice integer (const nil))
allows either an integer or
nil
.
:tag
is often used with const
, inside of choice
.
For example,
(choice (const :tag "Yes" t) (const :tag "No" nil) (const :tag "Ask" foo)) |
describes a variable for which t
means yes, nil
means no,
and foo
means "ask."
(other value)
The main use of other
is as the last element of choice
.
For example,
(choice (const :tag "Yes" t) (const :tag "No" nil) (other :tag "Ask" foo)) |
describes a variable for which t
means yes, nil
means no,
and anything else means "ask." If the user chooses `Ask' from
the menu of alternatives, that specifies the value foo
; but any
other value (not t
, nil
or foo
) displays as
`Ask', just like foo
.
(function-item function)
const
, but used for values which are functions. This
displays the documentation string as well as the function name.
The documentation string is either the one you specify with
:doc
, or function's own documentation string.
(variable-item variable)
const
, but used for values which are variable names. This
displays the documentation string as well as the variable name. The
documentation string is either the one you specify with :doc
, or
variable's own documentation string.
(set types...)
This appears in the customization buffer as a checklist, so that each of
types may have either one corresponding element or none. It is
not possible to specify two different elements that match the same one
of types. For example, (set integer symbol)
allows one
integer and/or one symbol in the list; it does not allow multiple
integers or multiple symbols. As a result, it is rare to use
nonspecific types such as integer
in a set
.
Most often, the types in a set
are const
types, as
shown here:
(set (const :bold) (const :italic)) |
Sometimes they describe possible elements in an alist:
(set (cons :tag "Height" (const height) integer) (cons :tag "Width" (const width) integer)) |
That lets the user specify a height value optionally and a width value optionally.
(repeat element-type)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |