Mercurial > emacs
changeset 46643:7715f3004d93
(Composite Types): Explain what arguments are. Show what keyword-value
pairs look like. Give list of keywords. Put restricted-sexp last.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Tue, 23 Jul 2002 19:19:32 +0000 |
parents | 79837bb10069 |
children | 0bbb6f2a6ddb |
files | lispref/customize.texi |
diffstat | 1 files changed, 66 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/lispref/customize.texi Tue Jul 23 19:14:36 2002 +0000 +++ b/lispref/customize.texi Tue Jul 23 19:19:32 2002 +0000 @@ -578,42 +578,29 @@ @node Composite Types @subsection Composite Types +@cindex arguments (of composite type) 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: - -@table @code -@item (restricted-sexp :match-alternatives @var{criteria}) -The value may be any Lisp object that satisfies one of @var{criteria}. -@var{criteria} should be a list, and each element should be -one of these possibilities: - -@itemize @bullet -@item -A predicate---that is, a function of one argument that has no side -effects, and returns either @code{nil} or non-@code{nil} according to -the argument. Using a predicate in the list says that objects for which -the predicate returns non-@code{nil} are acceptable. - -@item -A quoted constant---that is, @code{'@var{object}}. This sort of element -in the list says that @var{object} itself is an acceptable value. -@end itemize - -For example, +types, which build new types from other types or from specified data. +The specified types or data are called the @dfn{arguments} of the +composite type. The composite type normally looks like this: @example -(restricted-sexp :match-alternatives - (integerp 't 'nil)) +(@var{constructor} @var{arguments}@dots{}) @end example @noindent -allows integers, @code{t} and @code{nil} as legitimate values. +but you can also add keyword-value pairs before the arguments, like +this: -The customization buffer shows all legitimate values using their read -syntax, and the user edits them textually. +@example +(@var{constructor} @r{@{}@var{keyword} @var{value}@r{@}}@dots{} @var{arguments}@dots{}) +@end example + Here is a table of constructors and how to use them to write +composite types: + +@table @code @item (cons @var{car-type} @var{cdr-type}) The value must be a cons cell, its @sc{car} must fit @var{car-type}, and its @sc{cdr} must fit @var{cdr-type}. For example, @code{(cons string @@ -761,6 +748,58 @@ @var{element-type}. This appears in the customization buffer as a list of elements, with @samp{[INS]} and @samp{[DEL]} buttons for adding more elements or removing elements. + +@item (restricted-sexp :match-alternatives @var{criteria}) +This is the most general composite type construct. The value may be +any Lisp object that satisfies one of @var{criteria}. @var{criteria} +should be a list, and each element should be one of these +possibilities: + +@itemize @bullet +@item +A predicate---that is, a function of one argument that has no side +effects, and returns either @code{nil} or non-@code{nil} according to +the argument. Using a predicate in the list says that objects for which +the predicate returns non-@code{nil} are acceptable. + +@item +A quoted constant---that is, @code{'@var{object}}. This sort of element +in the list says that @var{object} itself is an acceptable value. +@end itemize + +For example, + +@example +(restricted-sexp :match-alternatives + (integerp 't 'nil)) +@end example + +@noindent +allows integers, @code{t} and @code{nil} as legitimate values. + +The customization buffer shows all legitimate values using their read +syntax, and the user edits them textually. +@end table + + Here is a table of the keywords you can use in keyword-value pairs +in a composite type: + +@table @code +@item :tag @var{tag} +Use @var{tag} as the name of this alternative, for user communication +purposes. This is useful for a type that appears inside of a +@code{choice}. + +@item :match-alternatives @var{criteria} +Use @var{criteria} to match possible values. This is used only in +@code{restricted-sexp}. + +@item :args @var{argumentlist} +Use the elements of @var{argumentlist} as the arguments of the type +construct. For instance, @code{(const :args (foo))} is equivalent to +@code{(const foo)}. You rarely need to write @code{:args} explicitly, +because normally the arguments are recognized automatically as +whatever follows the last keyword-value pair. @end table @node Splicing into Lists