(perform-replace): Don't use an empty match adjacent
[bpt/emacs.git] / lispref / customize.texi
CommitLineData
cc6d0d2c
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
5e0c8a23 3@c Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
cc6d0d2c
RS
4@c See the file elisp.texi for copying conditions.
5@setfilename ../info/customize
6@node Customization, Loading, Macros, Top
7@chapter Writing Customization Definitions
8
969fe9b5
RS
9 This chapter describes how to declare user options for customization,
10and also customization groups for classifying them. We use the term
11@dfn{customization item} to include both kinds of customization
12definitions---as well as face definitions (@pxref{Defining Faces}).
cc6d0d2c
RS
13
14@menu
15* Common Keywords::
16* Group Definitions::
17* Variable Definitions::
cc6d0d2c
RS
18* Customization Types::
19@end menu
20
21@node Common Keywords
8241495d 22@section Common Item Keywords
cc6d0d2c 23
969fe9b5
RS
24 All kinds of customization declarations (for variables and groups, and
25for faces) accept keyword arguments for specifying various information.
26This section describes some keywords that apply to all kinds.
cc6d0d2c 27
969fe9b5
RS
28 All of these keywords, except @code{:tag}, can be used more than once
29in a given item. Each use of the keyword has an independent effect.
30The keyword @code{:tag} is an exception because any given item can only
31display one name.
cc6d0d2c
RS
32
33@table @code
8241495d
RS
34@item :tag @var{label}
35Use @var{label}, a string, instead of the item's name, to label the item
a9f0a989
RS
36in customization menus and buffers.
37
cc6d0d2c
RS
38@item :group @var{group}
39Put this customization item in group @var{group}. When you use
40@code{:group} in a @code{defgroup}, it makes the new group a subgroup of
41@var{group}.
42
43If you use this keyword more than once, you can put a single item into
44more than one group. Displaying any of those groups will show this
8241495d 45item. Please don't overdo this, since the result would be annoying.
cc6d0d2c
RS
46
47@item :link @var{link-data}
48Include an external link after the documentation string for this item.
49This is a sentence containing an active field which references some
50other documentation.
51
52There are three alternatives you can use for @var{link-data}:
53
54@table @code
55@item (custom-manual @var{info-node})
56Link to an Info node; @var{info-node} is a string which specifies the
57node name, as in @code{"(emacs)Top"}. The link appears as
58@samp{[manual]} in the customization buffer.
59
60@item (info-link @var{info-node})
61Like @code{custom-manual} except that the link appears
62in the customization buffer with the Info node name.
63
64@item (url-link @var{url})
969fe9b5
RS
65Link to a web page; @var{url} is a string which specifies the @sc{url}.
66The link appears in the customization buffer as @var{url}.
5e0c8a23
DL
67
68@item (emacs-commentary-link @var{library})
69Link to the commentary section of a library; @var{library} is a string
70which specifies the library name.
cc6d0d2c
RS
71@end table
72
73You can specify the text to use in the customization buffer by adding
74@code{:tag @var{name}} after the first element of the @var{link-data};
75for example, @code{(info-link :tag "foo" "(emacs)Top")} makes a link to
76the Emacs manual which appears in the buffer as @samp{foo}.
77
78An item can have more than one external link; however, most items have
79none at all.
80
81@item :load @var{file}
82Load file @var{file} (a string) before displaying this customization
83item. Loading is done with @code{load-library}, and only if the file is
84not already loaded.
85
86@item :require @var{feature}
87Require feature @var{feature} (a symbol) when installing a value for
88this item (an option or a face) that was saved using the customization
89feature. This is done by calling @code{require}.
90
91The most common reason to use @code{:require} is when a variable enables
92a feature such as a minor mode, and just setting the variable won't have
93any effect unless the code which implements the mode is loaded.
cc6d0d2c
RS
94@end table
95
96@node Group Definitions
97@section Defining Custom Groups
98
969fe9b5 99 Each Emacs Lisp package should have one main customization group which
cc6d0d2c
RS
100contains all the options, faces and other groups in the package. If the
101package has a small number of options and faces, use just one group and
102put everything in it. When there are more than twelve or so options and
103faces, then you should structure them into subgroups, and put the
969fe9b5
RS
104subgroups under the package's main customization group. It is OK to
105put some of the options and faces in the package's main group alongside
cc6d0d2c
RS
106the subgroups.
107
969fe9b5
RS
108 The package's main or only group should be a member of one or more of
109the standard customization groups. (To display the full list of them,
110use @kbd{M-x customize}.) Choose one or more of them (but not too
111many), and add your group to each of them using the @code{:group}
112keyword.
cc6d0d2c 113
969fe9b5 114 The way to declare new customization groups is with @code{defgroup}.
cc6d0d2c 115
cc6d0d2c
RS
116@defmac defgroup group members doc [keyword value]...
117Declare @var{group} as a customization group containing @var{members}.
118Do not quote the symbol @var{group}. The argument @var{doc} specifies
8241495d
RS
119the documentation string for the group. It should not start with a
120@samp{*} as in @code{defcustom}; that convention is for variables only.
cc6d0d2c 121
a9f0a989
RS
122The argument @var{members} is a list specifying an initial set of
123customization items to be members of the group. However, most often
969fe9b5
RS
124@var{members} is @code{nil}, and you specify the group's members by
125using the @code{:group} keyword when defining those members.
cc6d0d2c 126
a9f0a989
RS
127If you want to specify group members through @var{members}, each element
128should have the form @code{(@var{name} @var{widget})}. Here @var{name}
129is a symbol, and @var{widget} is a widget type for editing that symbol.
130Useful widgets are @code{custom-variable} for a variable,
131@code{custom-face} for a face, and @code{custom-group} for a group.
cc6d0d2c 132
3d66f910
DL
133When a new group is introduced into Emacs, use this keyword in
134@code{defgroup}:
135
136@table @code
137@item :version @var{version}
138This option specifies that the group was first introduced in Emacs
139version @var{version}. The value @var{version} must be a string.
140@end table
141
142Tag the group with a version like this when it is introduced, rather
143than the individual members (@pxref{Variable Definitions}).
144
cc6d0d2c 145In addition to the common keywords (@pxref{Common Keywords}), you can
3d66f910 146also use this keyword in @code{defgroup}:
cc6d0d2c
RS
147
148@table @code
149@item :prefix @var{prefix}
150If the name of an item in the group starts with @var{prefix}, then the
151tag for that item is constructed (by default) by omitting @var{prefix}.
152
153One group can have any number of prefixes.
154@end table
155@end defmac
156
969fe9b5
RS
157 The prefix-discarding feature is currently turned off, which means
158that @code{:prefix} currently has no effect. We did this because we
159found that discarding the specified prefixes often led to confusing
160names for options. This happened because the people who wrote the
161@code{defgroup} definitions for various groups added @code{:prefix}
162keywords whenever they make logical sense---that is, whenever the
163variables in the library have a common prefix.
164
165 In order to obtain good results with @code{:prefix}, it would be
166necessary to check the specific effects of discarding a particular
167prefix, given the specific items in a group and their names and
168documentation. If the resulting text is not clear, then @code{:prefix}
169should not be used in that case.
170
171 It should be possible to recheck all the customization groups, delete
cc6d0d2c
RS
172the @code{:prefix} specifications which give unclear results, and then
173turn this feature back on, if someone would like to do the work.
174
175@node Variable Definitions
176@section Defining Customization Variables
177
969fe9b5 178 Use @code{defcustom} to declare user-editable variables.
cc6d0d2c 179
969fe9b5
RS
180@defmac defcustom option default doc [keyword value]...
181Declare @var{option} as a customizable user option variable. Do not
182quote @var{option}. The argument @var{doc} specifies the documentation
8241495d
RS
183string for the variable; it should normally start with a @samp{*}. This
184marks the variable, for other purposes, as one that users may want to
185customize.
969fe9b5
RS
186
187If @var{option} is void, @code{defcustom} initializes it to
188@var{default}. @var{default} should be an expression to compute the
a9f0a989 189value; be careful in writing it, because it can be evaluated on more
cc6d0d2c 190than one occasion.
8241495d
RS
191
192When you evaluate a @code{defcustom} form with @kbd{C-M-x} in Emacs Lisp
193mode (@code{eval-defun}), a special feature of @code{eval-defun}
194arranges to set the variable unconditionally, without testing whether
195its value is void. (The same feature applies to @code{defvar}.)
196@xref{Defining Variables}.
7dd3d99f 197@end defmac
cc6d0d2c 198
7dd3d99f 199 @code{defcustom} accepts the following additional keywords:
cc6d0d2c
RS
200
201@table @code
202@item :type @var{type}
203Use @var{type} as the data type for this option. It specifies which
204values are legitimate, and how to display the value.
205@xref{Customization Types}, for more information.
206
207@item :options @var{list}
208Specify @var{list} as the list of reasonable values for use in this
b6954afd
RS
209option. The user is not restricted to using only these values, but they
210are offered as convenient alternatives.
cc6d0d2c 211
b6954afd
RS
212This is meaningful only for certain types, currently including
213@code{hook}, @code{plist} and @code{alist}. See the definition of the
214individual types for a description of how to use @code{:options}.
cc6d0d2c
RS
215
216@item :version @var{version}
a9f0a989
RS
217This option specifies that the variable was first introduced, or its
218default value was changed, in Emacs version @var{version}. The value
219@var{version} must be a string. For example,
cc6d0d2c
RS
220
221@example
222(defcustom foo-max 34
223 "*Maximum number of foo's allowed."
224 :type 'integer
225 :group 'foo
226 :version "20.3")
227@end example
228
229@item :set @var{setfunction}
230Specify @var{setfunction} as the way to change the value of this option.
231The function @var{setfunction} should take two arguments, a symbol and
232the new value, and should do whatever is necessary to update the value
233properly for this option (which may not mean simply setting the option
234as a Lisp variable). The default for @var{setfunction} is
235@code{set-default}.
236
237@item :get @var{getfunction}
238Specify @var{getfunction} as the way to extract the value of this
239option. The function @var{getfunction} should take one argument, a
240symbol, and should return the ``current value'' for that symbol (which
241need not be the symbol's Lisp value). The default is
242@code{default-value}.
243
244@item :initialize @var{function}
245@var{function} should be a function used to initialize the variable when
246the @code{defcustom} is evaluated. It should take two arguments, the
247symbol and value. Here are some predefined functions meant for use in
248this way:
249
250@table @code
251@item custom-initialize-set
969fe9b5
RS
252Use the variable's @code{:set} function to initialize the variable, but
253do not reinitialize it if it is already non-void. This is the default
cc6d0d2c
RS
254@code{:initialize} function.
255
256@item custom-initialize-default
969fe9b5
RS
257Like @code{custom-initialize-set}, but use the function
258@code{set-default} to set the variable, instead of the variable's
259@code{:set} function. This is the usual choice for a variable whose
260@code{:set} function enables or disables a minor mode; with this choice,
261defining the variable will not call the minor mode function, but
262customizing the variable will do so.
cc6d0d2c
RS
263
264@item custom-initialize-reset
969fe9b5
RS
265Always use the @code{:set} function to initialize the variable. If the
266variable is already non-void, reset it by calling the @code{:set}
267function using the current value (returned by the @code{:get} method).
cc6d0d2c
RS
268
269@item custom-initialize-changed
969fe9b5
RS
270Use the @code{:set} function to initialize the variable, if it is
271already set or has been customized; otherwise, just use
272@code{set-default}.
cc6d0d2c 273@end table
390538c3
RS
274
275@item :set-after @var{variables}
276When setting variables according to saved customizations, make sure to
277set the variables @var{variables} before this one; in other words, delay
278setting this variable until after those others have been handled. Use
279@code{:set-after} if setting this variable won't work properly unless
280those other variables already have their intended values.
969fe9b5 281@end table
cc6d0d2c 282
969fe9b5 283 The @code{:require} option is useful for an option that turns on the
cc6d0d2c
RS
284operation of a certain feature. Assuming that the package is coded to
285check the value of the option, you still need to arrange for the package
969fe9b5
RS
286to be loaded. You can do that with @code{:require}. @xref{Common
287Keywords}. Here is an example, from the library @file{paren.el}:
288
289@example
290(defcustom show-paren-mode nil
29b677db 291 "Toggle Show Paren mode..."
969fe9b5 292 :set (lambda (symbol value)
a9f0a989 293 (show-paren-mode (or value 0)))
969fe9b5
RS
294 :initialize 'custom-initialize-default
295 :type 'boolean
296 :group 'paren-showing
297 :require 'paren)
298@end example
cc6d0d2c 299
b6954afd
RS
300If a customization item has a type such as @code{hook} or @code{alist},
301which supports @code{:options}, you can add additional options to the
302item, outside the @code{defcustom} declaration, by calling
303@code{custom-add-option}. For example, if you define a function
304@code{my-lisp-mode-initialization} intended to be called from
305@code{emacs-lisp-mode-hook}, you might want to add that to the list of
306options for @code{emacs-lisp-mode-hook}, but not by editing its
307definition. You can do it thus:
308
309@example
8241495d
RS
310(custom-add-option 'emacs-lisp-mode-hook
311 'my-lisp-mode-initialization)
b6954afd 312@end example
cc6d0d2c
RS
313
314@defun custom-add-option symbol option
b6954afd 315To the customization @var{symbol}, add @var{option}.
cc6d0d2c 316
b6954afd
RS
317The precise effect of adding @var{option} depends on the customization
318type of @var{symbol}.
cc6d0d2c 319@end defun
cc6d0d2c
RS
320
321Internally, @code{defcustom} uses the symbol property
322@code{standard-value} to record the expression for the default value,
323and @code{saved-value} to record the value saved by the user with the
324customization buffer. The @code{saved-value} property is actually a
325list whose car is an expression which evaluates to the value.
326
cc6d0d2c
RS
327@node Customization Types
328@section Customization Types
329
330 When you define a user option with @code{defcustom}, you must specify
969fe9b5 331its @dfn{customization type}. That is a Lisp object which describes (1)
cc6d0d2c
RS
332which values are legitimate and (2) how to display the value in the
333customization buffer for editing.
334
335 You specify the customization type in @code{defcustom} with the
336@code{:type} keyword. The argument of @code{:type} is evaluated; since
969fe9b5 337types that vary at run time are rarely useful, normally you use a quoted
cc6d0d2c
RS
338constant. For example:
339
340@example
341(defcustom diff-command "diff"
342 "*The command to use to run diff."
969fe9b5 343 :type '(string)
cc6d0d2c
RS
344 :group 'diff)
345@end example
346
969fe9b5
RS
347 In general, a customization type is a list whose first element is a
348symbol, one of the customization type names defined in the following
349sections. After this symbol come a number of arguments, depending on
350the symbol. Between the type symbol and its arguments, you can
351optionally write keyword-value pairs (@pxref{Type Keywords}).
cc6d0d2c 352
969fe9b5
RS
353 Some of the type symbols do not use any arguments; those are called
354@dfn{simple types}. For a simple type, if you do not use any
355keyword-value pairs, you can omit the parentheses around the type
356symbol. For example just @code{string} as a customization type is
357equivalent to @code{(string)}.
cc6d0d2c
RS
358
359@menu
360* Simple Types::
361* Composite Types::
362* Splicing into Lists::
363* Type Keywords::
364@end menu
365
366@node Simple Types
367@subsection Simple Types
368
369 This section describes all the simple customization types.
370
371@table @code
372@item sexp
373The value may be any Lisp object that can be printed and read back. You
374can use @code{sexp} as a fall-back for any option, if you don't want to
375take the time to work out a more specific type to use.
376
377@item integer
378The value must be an integer, and is represented textually
379in the customization buffer.
380
381@item number
382The value must be a number, and is represented textually in the
383customization buffer.
384
385@item string
386The value must be a string, and the customization buffer shows just the
969fe9b5
RS
387contents, with no delimiting @samp{"} characters and no quoting with
388@samp{\}.
cc6d0d2c
RS
389
390@item regexp
969fe9b5
RS
391Like @code{string} except that the string must be a valid regular
392expression.
cc6d0d2c
RS
393
394@item character
395The value must be a character code. A character code is actually an
396integer, but this type shows the value by inserting the character in the
397buffer, rather than by showing the number.
398
399@item file
400The value must be a file name, and you can do completion with
401@kbd{M-@key{TAB}}.
402
403@item (file :must-match t)
404The value must be a file name for an existing file, and you can do
405completion with @kbd{M-@key{TAB}}.
406
407@item directory
408The value must be a directory name, and you can do completion with
409@kbd{M-@key{TAB}}.
410
a9f0a989
RS
411@item hook
412The value must be a list of functions (or a single function, but that is
413obsolete usage). This customization type is used for hook variables.
1911e6e5
RS
414You can use the @code{:options} keyword in a hook variable's
415@code{defcustom} to specify a list of functions recommended for use in
416the hook; see @ref{Variable Definitions}.
a9f0a989 417
b6954afd 418@item alist
08f0f5e9
KH
419The value must be a list of cons-cells, the @sc{car} of each cell
420representing a key, and the @sc{cdr} of the same cell representing an
421associated value. The user can add and delete key/value pairs, and
b6954afd
RS
422edit both the key and the value of each pair.
423
424You can specify the key and value types like this:
425
8241495d
RS
426@smallexample
427(alist :key-type @var{key-type} :value-type @var{value-type})
428@end smallexample
b6954afd
RS
429
430@noindent
431where @var{key-type} and @var{value-type} are customization type
432specifications. The default key type is @code{sexp}, and the default
433value type is @code{sexp}.
434
435The user can add any key matching the specified key type, but you can
436give some keys a preferential treatment by specifying them with the
437@code{:options} (see @ref{Variable Definitions}). The specified keys
438will always be shown in the customize buffer (together with a suitable
439value), with a checkbox to include or exclude or disable the key/value
440pair from the alist. The user will not be able to edit the keys
441specified by the @code{:options} keyword argument.
442
443The argument to the @code{:options} keywords should be a list of option
444specifications. Ordinarily, the options are simply atoms, which are the
445specified keys. For example:
446
8241495d 447@smallexample
b6954afd 448:options '("foo" "bar" "baz")
8241495d 449@end smallexample
b6954afd
RS
450
451@noindent
452specifies that there are three ``known'' keys, namely @code{"foo"},
453@code{"bar"} and @code{"baz"}, which will always be shown first.
454
455You may want to restrict the value type for specific keys, for example,
456the value associated with the @code{"bar"} key can only be an integer.
457You can specify this by using a list instead of an atom in the option
458specification. The first element will specify the key, like before,
459while the second element will specify the value type.
460
8241495d 461@smallexample
b6954afd 462:options '("foo" ("bar" integer) "baz")
8241495d 463@end smallexample
b6954afd
RS
464
465Finally, you may want to change how the key is presented. By default,
466the key is simply shown as a @code{const}, since the user cannot change
467the special keys specified with the @code{:options} keyword. However,
468you may want to use a more specialized type for presenting the key, like
469@code{function-item} if you know it is a symbol with a function binding.
470This is done by using a customization type specification instead of a
471symbol for the key.
472
8241495d 473@smallexample
b6954afd 474:options '("foo" ((function-item some-function) integer) "baz")
8241495d 475@end smallexample
b6954afd 476
08f0f5e9 477Many alists use lists with two elements, instead of cons cells. For
b6954afd
RS
478example,
479
8241495d 480@smallexample
b6954afd
RS
481(defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
482 "Each element is a list of the form (KEY VALUE).")
8241495d 483@end smallexample
b6954afd
RS
484
485@noindent
486instead of
487
8241495d 488@smallexample
b6954afd
RS
489(defcustom cons-alist '(("foo" . 1) ("bar" . 2) ("baz" . 3))
490 "Each element is a cons-cell (KEY . VALUE).")
8241495d 491@end smallexample
b6954afd
RS
492
493Because of the way lists are implemented on top of cons cells, you can
494treat @code{list-alist} in the example above as a cons cell alist, where
495the value type is a list with a single element containing the real
496value.
497
8241495d 498@smallexample
b6954afd
RS
499(defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
500 "Each element is a list of the form (KEY VALUE)."
501 :type '(alist :value-type (group integer)))
8241495d 502@end smallexample
b6954afd
RS
503
504The @code{group} widget is used here instead of @code{list} only because
505the formatting is better suited for the purpose.
506
507Similarily, you can have alists with more values associated with each
508key, using variations of this trick:
509
8241495d 510@smallexample
b6954afd
RS
511(defcustom person-data '(("brian" 50 t)
512 ("dorith" 55 nil)
513 ("ken" 52 t))
3d3df9e1
RS
514 "Alist of basic info about people.
515Each element has the form (NAME AGE MALE-FLAG)."
b6954afd
RS
516 :type '(alist :value-type (group age boolean)))
517
518(defcustom pets '(("brian")
519 ("dorith" "dog" "guppy")
520 ("ken" "cat"))
3d3df9e1
RS
521 "Alist of people's pets.
522In an element (KEY . VALUE), KEY is the person's name,
523and the VALUE is a list of that person's pets."
b6954afd 524 :type '(alist :value-type (repeat string)))
8241495d 525@end smallexample
b6954afd
RS
526
527@item plist
528The @code{plist} custom type is similar to the @code{alist} (see above),
529except that the information is stored as a property list, i.e. a list of
530this form:
531
8241495d 532@smallexample
b6954afd 533(@var{key} @var{value} @var{key} @var{value} @var{key} @var{value} @dots{})
8241495d 534@end smallexample
b6954afd
RS
535
536The default @code{:key-type} for @code{plist} is @code{symbol},
537rather than @code{sexp}.
538
cc6d0d2c
RS
539@item symbol
540The value must be a symbol. It appears in the customization buffer as
541the name of the symbol.
542
543@item function
544The value must be either a lambda expression or a function name. When
545it is a function name, you can do completion with @kbd{M-@key{TAB}}.
546
547@item variable
548The value must be a variable name, and you can do completion with
549@kbd{M-@key{TAB}}.
550
a9f0a989
RS
551@item face
552The value must be a symbol which is a face name, and you can do
553completion with @kbd{M-@key{TAB}}.
554
cc6d0d2c 555@item boolean
969fe9b5
RS
556The value is boolean---either @code{nil} or @code{t}. Note that by
557using @code{choice} and @code{const} together (see the next section),
558you can specify that the value must be @code{nil} or @code{t}, but also
559specify the text to describe each value in a way that fits the specific
560meaning of the alternative.
5e0c8a23
DL
561
562@item coding-system
563The value must be a coding-system name, and you can do completion with
564@kbd{M-@key{TAB}}.
565
566@item color
567The value must be a valid color name, and you can do completion with
568@kbd{M-@key{TAB}}. A sample is provided,
cc6d0d2c
RS
569@end table
570
571@node Composite Types
572@subsection Composite Types
573
574 When none of the simple types is appropriate, you can use composite
969fe9b5
RS
575types, which build new types from other types. Here are several ways of
576doing that:
cc6d0d2c
RS
577
578@table @code
579@item (restricted-sexp :match-alternatives @var{criteria})
580The value may be any Lisp object that satisfies one of @var{criteria}.
a9f0a989 581@var{criteria} should be a list, and each element should be
cc6d0d2c
RS
582one of these possibilities:
583
584@itemize @bullet
585@item
a9f0a989
RS
586A predicate---that is, a function of one argument that has no side
587effects, and returns either @code{nil} or non-@code{nil} according to
588the argument. Using a predicate in the list says that objects for which
589the predicate returns non-@code{nil} are acceptable.
cc6d0d2c
RS
590
591@item
a9f0a989
RS
592A quoted constant---that is, @code{'@var{object}}. This sort of element
593in the list says that @var{object} itself is an acceptable value.
cc6d0d2c
RS
594@end itemize
595
596For example,
597
598@example
a9f0a989
RS
599(restricted-sexp :match-alternatives
600 (integerp 't 'nil))
cc6d0d2c
RS
601@end example
602
603@noindent
604allows integers, @code{t} and @code{nil} as legitimate values.
605
606The customization buffer shows all legitimate values using their read
607syntax, and the user edits them textually.
608
609@item (cons @var{car-type} @var{cdr-type})
610The value must be a cons cell, its @sc{car} must fit @var{car-type}, and
a9f0a989 611its @sc{cdr} must fit @var{cdr-type}. For example, @code{(cons string
cc6d0d2c
RS
612symbol)} is a customization type which matches values such as
613@code{("foo" . foo)}.
614
969fe9b5 615In the customization buffer, the @sc{car} and the @sc{cdr} are
cc6d0d2c
RS
616displayed and edited separately, each according to the type
617that you specify for it.
618
619@item (list @var{element-types}@dots{})
620The value must be a list with exactly as many elements as the
621@var{element-types} you have specified; and each element must fit the
622corresponding @var{element-type}.
623
624For example, @code{(list integer string function)} describes a list of
625three elements; the first element must be an integer, the second a
626string, and the third a function.
627
a9f0a989 628In the customization buffer, each element is displayed and edited
cc6d0d2c
RS
629separately, according to the type specified for it.
630
631@item (vector @var{element-types}@dots{})
632Like @code{list} except that the value must be a vector instead of a
633list. The elements work the same as in @code{list}.
634
635@item (choice @var{alternative-types}...)
636The value must fit at least one of @var{alternative-types}.
637For example, @code{(choice integer string)} allows either an
638integer or a string.
639
640In the customization buffer, the user selects one of the alternatives
641using a menu, and can then edit the value in the usual way for that
642alternative.
643
644Normally the strings in this menu are determined automatically from the
645choices; however, you can specify different strings for the menu by
646including the @code{:tag} keyword in the alternatives. For example, if
647an integer stands for a number of spaces, while a string is text to use
648verbatim, you might write the customization type this way,
649
a9f0a989 650@example
cc6d0d2c
RS
651(choice (integer :tag "Number of spaces")
652 (string :tag "Literal text"))
a9f0a989 653@end example
cc6d0d2c
RS
654
655@noindent
656so that the menu offers @samp{Number of spaces} and @samp{Literal Text}.
657
969fe9b5
RS
658In any alternative for which @code{nil} is not a valid value, other than
659a @code{const}, you should specify a valid default for that alternative
660using the @code{:value} keyword. @xref{Type Keywords}.
661
cc6d0d2c
RS
662@item (const @var{value})
663The value must be @var{value}---nothing else is allowed.
664
665The main use of @code{const} is inside of @code{choice}. For example,
666@code{(choice integer (const nil))} allows either an integer or
969fe9b5
RS
667@code{nil}.
668
669@code{:tag} is often used with @code{const}, inside of @code{choice}.
670For example,
671
a9f0a989 672@example
969fe9b5
RS
673(choice (const :tag "Yes" t)
674 (const :tag "No" nil)
675 (const :tag "Ask" foo))
a9f0a989 676@end example
cc6d0d2c 677
da03dc1d
RS
678@noindent
679describes a variable for which @code{t} means yes, @code{nil} means no,
680and @code{foo} means ``ask.''
681
682@item (other @var{value})
683This alternative can match any Lisp value, but if the user chooses this
684alternative, that selects the value @var{value}.
685
686The main use of @code{other} is as the last element of @code{choice}.
687For example,
688
689@example
690(choice (const :tag "Yes" t)
691 (const :tag "No" nil)
692 (other :tag "Ask" foo))
693@end example
694
695@noindent
696describes a variable for which @code{t} means yes, @code{nil} means no,
697and anything else means ``ask.'' If the user chooses @samp{Ask} from
698the menu of alternatives, that specifies the value @code{foo}; but any
699other value (not @code{t}, @code{nil} or @code{foo}) displays as
700@samp{Ask}, just like @code{foo}.
701
cc6d0d2c
RS
702@item (function-item @var{function})
703Like @code{const}, but used for values which are functions. This
969fe9b5
RS
704displays the documentation string as well as the function name.
705The documentation string is either the one you specify with
706@code{:doc}, or @var{function}'s own documentation string.
cc6d0d2c
RS
707
708@item (variable-item @var{variable})
709Like @code{const}, but used for values which are variable names. This
969fe9b5
RS
710displays the documentation string as well as the variable name. The
711documentation string is either the one you specify with @code{:doc}, or
712@var{variable}'s own documentation string.
cc6d0d2c 713
1f447a50
KH
714@item (set @var{types}@dots{})
715The value must be a list, and each element of the list must match one of
716the @var{types} specified.
717
718This appears in the customization buffer as a checklist, so that each of
719@var{types} may have either one corresponding element or none. It is
720not possible to specify two different elements that match the same one
721of @var{types}. For example, @code{(set integer symbol)} allows one
722integer and/or one symbol in the list; it does not allow multiple
723integers or multiple symbols. As a result, it is rare to use
724nonspecific types such as @code{integer} in a @code{set}.
725
726Most often, the @var{types} in a @code{set} are @code{const} types, as
727shown here:
728
729@example
730(set (const :bold) (const :italic))
731@end example
732
733Sometimes they describe possible elements in an alist:
734
735@example
736(set (cons :tag "Height" (const height) integer)
737 (cons :tag "Width" (const width) integer))
738@end example
739
740@noindent
741That lets the user specify a height value optionally
742and a width value optionally.
cc6d0d2c
RS
743
744@item (repeat @var{element-type})
745The value must be a list and each element of the list must fit the type
746@var{element-type}. This appears in the customization buffer as a
747list of elements, with @samp{[INS]} and @samp{[DEL]} buttons for adding
748more elements or removing elements.
749@end table
750
751@node Splicing into Lists
752@subsection Splicing into Lists
753
754 The @code{:inline} feature lets you splice a variable number of
755elements into the middle of a list or vector. You use it in a
756@code{set}, @code{choice} or @code{repeat} type which appears among the
757element-types of a @code{list} or @code{vector}.
758
759 Normally, each of the element-types in a @code{list} or @code{vector}
760describes one and only one element of the list or vector. Thus, if an
761element-type is a @code{repeat}, that specifies a list of unspecified
762length which appears as one element.
763
764 But when the element-type uses @code{:inline}, the value it matches is
765merged directly into the containing sequence. For example, if it
766matches a list with three elements, those become three elements of the
767overall sequence. This is analogous to using @samp{,@@} in the backquote
768construct.
769
770 For example, to specify a list whose first element must be @code{t}
771and whose remaining arguments should be zero or more of @code{foo} and
772@code{bar}, use this customization type:
773
774@example
775(list (const t) (set :inline t foo bar))
776@end example
777
778@noindent
779This matches values such as @code{(t)}, @code{(t foo)}, @code{(t bar)}
780and @code{(t foo bar)}.
781
782 When the element-type is a @code{choice}, you use @code{:inline} not
783in the @code{choice} itself, but in (some of) the alternatives of the
784@code{choice}. For example, to match a list which must start with a
785file name, followed either by the symbol @code{t} or two strings, use
786this customization type:
787
788@example
789(list file
790 (choice (const t)
791 (list :inline t string string)))
792@end example
793
794@noindent
795If the user chooses the first alternative in the choice, then the
796overall list has two elements and the second element is @code{t}. If
797the user chooses the second alternative, then the overall list has three
798elements and the second and third must be strings.
799
800@node Type Keywords
801@subsection Type Keywords
802
803You can specify keyword-argument pairs in a customization type after the
804type name symbol. Here are the keywords you can use, and their
805meanings:
806
807@table @code
808@item :value @var{default}
809This is used for a type that appears as an alternative inside of
969fe9b5 810@code{choice}; it specifies the default value to use, at first, if and
cc6d0d2c
RS
811when the user selects this alternative with the menu in the
812customization buffer.
813
814Of course, if the actual value of the option fits this alternative, it
815will appear showing the actual value, not @var{default}.
816
969fe9b5
RS
817If @code{nil} is not a valid value for the alternative, then it is
818essential to specify a valid default with @code{:value}.
819
cc6d0d2c
RS
820@item :format @var{format-string}
821This string will be inserted in the buffer to represent the value
822corresponding to the type. The following @samp{%} escapes are available
823for use in @var{format-string}:
824
825@table @samp
cc6d0d2c
RS
826@item %[@var{button}%]
827Display the text @var{button} marked as a button. The @code{:action}
828attribute specifies what the button will do if the user invokes it;
829its value is a function which takes two arguments---the widget which
830the button appears in, and the event.
831
832There is no way to specify two different buttons with different
969fe9b5 833actions.
cc6d0d2c
RS
834
835@item %@{@var{sample}%@}
836Show @var{sample} in a special face specified by @code{:sample-face}.
837
838@item %v
839Substitute the item's value. How the value is represented depends on
840the kind of item, and (for variables) on the customization type.
841
842@item %d
843Substitute the item's documentation string.
844
845@item %h
846Like @samp{%d}, but if the documentation string is more than one line,
847add an active field to control whether to show all of it or just the
848first line.
849
850@item %t
851Substitute the tag here. You specify the tag with the @code{:tag}
852keyword.
853
854@item %%
855Display a literal @samp{%}.
856@end table
857
969fe9b5
RS
858@item :action @var{action}
859Perform @var{action} if the user clicks on a button.
860
cc6d0d2c 861@item :button-face @var{face}
969fe9b5
RS
862Use the face @var{face} (a face name or a list of face names) for button
863text displayed with @samp{%[@dots{}%]}.
cc6d0d2c 864
969fe9b5
RS
865@item :button-prefix @var{prefix}
866@itemx :button-suffix @var{suffix}
cc6d0d2c
RS
867These specify the text to display before and after a button.
868Each can be:
869
870@table @asis
871@item @code{nil}
872No text is inserted.
873
874@item a string
875The string is inserted literally.
876
877@item a symbol
878The symbol's value is used.
879@end table
880
969fe9b5
RS
881@item :tag @var{tag}
882Use @var{tag} (a string) as the tag for the value (or part of the value)
883that corresponds to this type.
884
cc6d0d2c 885@item :doc @var{doc}
969fe9b5
RS
886Use @var{doc} as the documentation string for this value (or part of the
887value) that corresponds to this type. In order for this to work, you
888must specify a value for @code{:format}, and use @samp{%d} or @samp{%h}
889in that value.
cc6d0d2c 890
969fe9b5
RS
891The usual reason to specify a documentation string for a type is to
892provide more information about the meanings of alternatives inside a
893@code{:choice} type or the parts of some other composite type.
cc6d0d2c
RS
894
895@item :help-echo @var{motion-doc}
896When you move to this item with @code{widget-forward} or
19182f77
DL
897@code{widget-backward}, it will display the string @var{motion-doc} in
898the echo area. In addition, @var{motion-doc} is used as the mouse
899@code{help-echo} string and may actually be a function or form evaluated
900to yield a help string as for @code{help-echo} text properties.
e23a63a5 901@c @xref{Text help-echo}.
cc6d0d2c
RS
902
903@item :match @var{function}
969fe9b5
RS
904Specify how to decide whether a value matches the type. The
905corresponding value, @var{function}, should be a function that accepts
906two arguments, a widget and a value; it should return non-@code{nil} if
907the value is acceptable.
cc6d0d2c
RS
908
909@ignore
910@item :indent @var{columns}
911Indent this item by @var{columns} columns. The indentation is used for
912@samp{%n}, and automatically for group names, for checklists and radio
913buttons, and for editable lists. It affects the whole of the
914item except for the first line.
915
916@item :offset @var{columns}
917An integer indicating how many extra spaces to indent the subitems of
918this item. By default, subitems are indented the same as their parent.
919
920@item :extra-offset
921An integer indicating how many extra spaces to add to this item's
922indentation, compared to its parent.
923
924@item :notify
925A function called each time the item or a subitem is changed. The
926function is called with two or three arguments. The first argument is
927the item itself, the second argument is the item that was changed, and
928the third argument is the event leading to the change, if any.
929
930@item :menu-tag
931Tag used in the menu when the widget is used as an option in a
932@code{menu-choice} widget.
933
934@item :menu-tag-get
935Function used for finding the tag when the widget is used as an option
936in a @code{menu-choice} widget. By default, the tag used will be either the
937@code{:menu-tag} or @code{:tag} property if present, or the @code{princ}
938representation of the @code{:value} property if not.
939
940@item :validate
941A function which takes a widget as an argument, and return nil if the
942widgets current value is valid for the widget. Otherwise, it should
943return the widget containing the invalid data, and set that widgets
944@code{:error} property to a string explaining the error.
945
946You can use the function @code{widget-children-validate} for this job;
947it tests that all children of @var{widget} are valid.
948
949@item :tab-order
950Specify the order in which widgets are traversed with
951@code{widget-forward} or @code{widget-backward}. This is only partially
952implemented.
953
954@enumerate a
955@item
956Widgets with tabbing order @code{-1} are ignored.
957
958@item
959(Unimplemented) When on a widget with tabbing order @var{n}, go to the
960next widget in the buffer with tabbing order @var{n+1} or @code{nil},
961whichever comes first.
962
963@item
964When on a widget with no tabbing order specified, go to the next widget
965in the buffer with a positive tabbing order, or @code{nil}
966@end enumerate
967
968@item :parent
a9f0a989 969The parent of a nested widget (e.g., a @code{menu-choice} item or an
cc6d0d2c
RS
970element of a @code{editable-list} widget).
971
972@item :sibling-args
973This keyword is only used for members of a @code{radio-button-choice} or
974@code{checklist}. The value should be a list of extra keyword
975arguments, which will be used when creating the @code{radio-button} or
976@code{checkbox} associated with this item.
977@end ignore
978@end table