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