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