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