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