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