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