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