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