(bahai-holidays): Re-order.
[emacs.git] / doc / lispref / customize.texi
blobf5f8565b912900019b2f04c6e655607411b8e0f1
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
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}).
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
24 @node Common Keywords
25 @section Common Item Keywords
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.
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.
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:
46 @example
47 (defcustom cursor-in-non-selected-windows @dots{}
48   :tag "Cursor In Non-selected Windows"
49 @end example
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}.
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.
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.
67 There are several alternatives you can use for @var{link-data}:
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}.
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.
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}.
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.
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.
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.
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.
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.
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
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}.
118 An item can have more than one external link; however, most items have
119 none at all.
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.
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.
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.
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.
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.
149 This keyword takes priority over @code{:version}.
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
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.
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:
166 @example
167 (@var{package} (@var{pversion} . @var{eversion})@dots{})
168 @end example
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:
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
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
188 @node Group Definitions
189 @section Defining Customization Groups
190 @cindex define customization group
191 @cindex customization groups, defining
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.
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.
208   The way to declare new customization groups is with @code{defgroup}.
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.
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.
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.
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.
230 In addition to the common keywords (@pxref{Common Keywords}), you can
231 also use this keyword in @code{defgroup}:
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}.
239 One group can have any number of prefixes.
240 @end table
241 @end defmac
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.
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.
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.
261 @node Variable Definitions
262 @section Defining Customization Variables
263 @cindex define customization options
264 @cindex customization variables, how to define
266   Use @code{defcustom} to declare user-customizable variables.
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}).
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.
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.
293 Every @code{defcustom} should specify @code{:group} at least once.
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.
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
307   @code{defcustom} accepts the following additional keywords:
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.
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.
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}.
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}.
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}.
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.
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:
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.
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.
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.
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}.
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.
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
396 @item :risky @var{value}
397 @kindex risky@r{, @code{defcustom} keyword}
398 Set this variable's @code{risky-local-variable} property to @var{value}.
400 @item :safe @var{function}
401 @kindex safe@r{, @code{defcustom} keyword}
402 Set this variable's @code{safe-local-variable} property to @var{function}.
404 @item :set-after @var{variables}
405 @kindex set-after@r{, @code{defcustom} keyword}
406 When setting variables according to saved customizations, make sure to
407 set the variables @var{variables} before this one; in other words, delay
408 setting this variable until after those others have been handled.  Use
409 @code{:set-after} if setting this variable won't work properly unless
410 those other variables already have their intended values.
411 @end table
413   The @code{:require} keyword is useful for an option that turns on the
414 operation of a certain feature.  Assuming that the package is coded to
415 check the value of the option, you still need to arrange for the package
416 to be loaded.  You can do that with @code{:require}.  @xref{Common
417 Keywords}.  Here is an example, from the library @file{saveplace.el}:
419 @example
420 (defcustom save-place nil
421   "Non-nil means automatically save place in each file..."
422   :type 'boolean
423   :require 'saveplace
424   :group 'save-place)
425 @end example
427 If a customization item has a type such as @code{hook} or
428 @code{alist}, which supports @code{:options}, you can add additional
429 values to the list from outside the @code{defcustom} declaration by
430 calling @code{custom-add-frequent-value}.  For example, if you define a
431 function @code{my-lisp-mode-initialization} intended to be called from
432 @code{emacs-lisp-mode-hook}, you might want to add that to the list of
433 reasonable values for @code{emacs-lisp-mode-hook}, but not by editing
434 its definition.  You can do it thus:
436 @example
437 (custom-add-frequent-value 'emacs-lisp-mode-hook
438    'my-lisp-mode-initialization)
439 @end example
441 @defun custom-add-frequent-value symbol value
442 For the customization option @var{symbol}, add @var{value} to the
443 list of reasonable values.
445 The precise effect of adding a value depends on the customization type
446 of @var{symbol}.
447 @end defun
449 Internally, @code{defcustom} uses the symbol property
450 @code{standard-value} to record the expression for the standard value,
451 and @code{saved-value} to record the value saved by the user with the
452 customization buffer.  Both properties are actually lists whose car is
453 an expression which evaluates to the value.
455 @node Customization Types
456 @section Customization Types
458 @cindex customization types
459   When you define a user option with @code{defcustom}, you must specify
460 its @dfn{customization type}.  That is a Lisp object which describes (1)
461 which values are legitimate and (2) how to display the value in the
462 customization buffer for editing.
464 @kindex type@r{, @code{defcustom} keyword}
465   You specify the customization type in @code{defcustom} with the
466 @code{:type} keyword.  The argument of @code{:type} is evaluated, but
467 only once when the @code{defcustom} is executed, so it isn't useful
468 for the value to vary.  Normally we use a quoted constant.  For
469 example:
471 @example
472 (defcustom diff-command "diff"
473   "The command to use to run diff."
474   :type '(string)
475   :group 'diff)
476 @end example
478   In general, a customization type is a list whose first element is a
479 symbol, one of the customization type names defined in the following
480 sections.  After this symbol come a number of arguments, depending on
481 the symbol.  Between the type symbol and its arguments, you can
482 optionally write keyword-value pairs (@pxref{Type Keywords}).
484   Some of the type symbols do not use any arguments; those are called
485 @dfn{simple types}.  For a simple type, if you do not use any
486 keyword-value pairs, you can omit the parentheses around the type
487 symbol.  For example just @code{string} as a customization type is
488 equivalent to @code{(string)}.
490 @menu
491 * Simple Types::
492 * Composite Types::
493 * Splicing into Lists::
494 * Type Keywords::
495 * Defining New Types::
496 @end menu
498 All customization types are implemented as widgets; see @ref{Top, ,
499 Introduction, widget, The Emacs Widget Library}, for details.
501 @node Simple Types
502 @subsection Simple Types
504   This section describes all the simple customization types.
506 @table @code
507 @item sexp
508 The value may be any Lisp object that can be printed and read back.  You
509 can use @code{sexp} as a fall-back for any option, if you don't want to
510 take the time to work out a more specific type to use.
512 @item integer
513 The value must be an integer, and is represented textually
514 in the customization buffer.
516 @item number
517 The value must be a number (floating point or integer), and is
518 represented textually in the customization buffer.
520 @item float
521 The value must be a floating point number, and is represented
522 textually in the customization buffer.
524 @item string
525 The value must be a string, and the customization buffer shows just the
526 contents, with no delimiting @samp{"} characters and no quoting with
527 @samp{\}.
529 @item regexp
530 Like @code{string} except that the string must be a valid regular
531 expression.
533 @item character
534 The value must be a character code.  A character code is actually an
535 integer, but this type shows the value by inserting the character in the
536 buffer, rather than by showing the number.
538 @item file
539 The value must be a file name, and you can do completion with
540 @kbd{M-@key{TAB}}.
542 @item (file :must-match t)
543 The value must be a file name for an existing file, and you can do
544 completion with @kbd{M-@key{TAB}}.
546 @item directory
547 The value must be a directory name, and you can do completion with
548 @kbd{M-@key{TAB}}.
550 @item hook
551 The value must be a list of functions (or a single function, but that is
552 obsolete usage).  This customization type is used for hook variables.
553 You can use the @code{:options} keyword in a hook variable's
554 @code{defcustom} to specify a list of functions recommended for use in
555 the hook; see @ref{Variable Definitions}.
557 @item alist
558 The value must be a list of cons-cells, the @sc{car} of each cell
559 representing a key, and the @sc{cdr} of the same cell representing an
560 associated value.  The user can add and delete key/value pairs, and
561 edit both the key and the value of each pair.
563 You can specify the key and value types like this:
565 @smallexample
566 (alist :key-type @var{key-type} :value-type @var{value-type})
567 @end smallexample
569 @noindent
570 where @var{key-type} and @var{value-type} are customization type
571 specifications.  The default key type is @code{sexp}, and the default
572 value type is @code{sexp}.
574 The user can add any key matching the specified key type, but you can
575 give some keys a preferential treatment by specifying them with the
576 @code{:options} (see @ref{Variable Definitions}).  The specified keys
577 will always be shown in the customize buffer (together with a suitable
578 value), with a checkbox to include or exclude or disable the key/value
579 pair from the alist.  The user will not be able to edit the keys
580 specified by the @code{:options} keyword argument.
582 The argument to the @code{:options} keywords should be a list of
583 specifications for reasonable keys in the alist.  Ordinarily, they are
584 simply atoms, which stand for themselves as.  For example:
586 @smallexample
587 :options '("foo" "bar" "baz")
588 @end smallexample
590 @noindent
591 specifies that there are three ``known'' keys, namely @code{"foo"},
592 @code{"bar"} and @code{"baz"}, which will always be shown first.
594 You may want to restrict the value type for specific keys, for
595 example, the value associated with the @code{"bar"} key can only be an
596 integer.  You can specify this by using a list instead of an atom in
597 the list.  The first element will specify the key, like before, while
598 the second element will specify the value type.  For example:
600 @smallexample
601 :options '("foo" ("bar" integer) "baz")
602 @end smallexample
604 Finally, you may want to change how the key is presented.  By default,
605 the key is simply shown as a @code{const}, since the user cannot change
606 the special keys specified with the @code{:options} keyword.  However,
607 you may want to use a more specialized type for presenting the key, like
608 @code{function-item} if you know it is a symbol with a function binding.
609 This is done by using a customization type specification instead of a
610 symbol for the key.
612 @smallexample
613 :options '("foo" ((function-item some-function) integer)
614            "baz")
615 @end smallexample
617 Many alists use lists with two elements, instead of cons cells.  For
618 example,
620 @smallexample
621 (defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
622   "Each element is a list of the form (KEY VALUE).")
623 @end smallexample
625 @noindent
626 instead of
628 @smallexample
629 (defcustom cons-alist '(("foo" . 1) ("bar" . 2) ("baz" . 3))
630   "Each element is a cons-cell (KEY . VALUE).")
631 @end smallexample
633 Because of the way lists are implemented on top of cons cells, you can
634 treat @code{list-alist} in the example above as a cons cell alist, where
635 the value type is a list with a single element containing the real
636 value.
638 @smallexample
639 (defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
640   "Each element is a list of the form (KEY VALUE)."
641   :type '(alist :value-type (group integer)))
642 @end smallexample
644 The @code{group} widget is used here instead of @code{list} only because
645 the formatting is better suited for the purpose.
647 Similarly, you can have alists with more values associated with each
648 key, using variations of this trick:
650 @smallexample
651 (defcustom person-data '(("brian"  50 t)
652                          ("dorith" 55 nil)
653                          ("ken"    52 t))
654   "Alist of basic info about people.
655 Each element has the form (NAME AGE MALE-FLAG)."
656   :type '(alist :value-type (group integer boolean)))
658 (defcustom pets '(("brian")
659                   ("dorith" "dog" "guppy")
660                   ("ken" "cat"))
661   "Alist of people's pets.
662 In an element (KEY . VALUE), KEY is the person's name,
663 and the VALUE is a list of that person's pets."
664   :type '(alist :value-type (repeat string)))
665 @end smallexample
667 @item plist
668 The @code{plist} custom type is similar to the @code{alist} (see above),
669 except that the information is stored as a property list, i.e. a list of
670 this form:
672 @smallexample
673 (@var{key} @var{value} @var{key} @var{value} @var{key} @var{value} @dots{})
674 @end smallexample
676 The default @code{:key-type} for @code{plist} is @code{symbol},
677 rather than @code{sexp}.
679 @item symbol
680 The value must be a symbol.  It appears in the customization buffer as
681 the name of the symbol.
683 @item function
684 The value must be either a lambda expression or a function name.  When
685 it is a function name, you can do completion with @kbd{M-@key{TAB}}.
687 @item variable
688 The value must be a variable name, and you can do completion with
689 @kbd{M-@key{TAB}}.
691 @item face
692 The value must be a symbol which is a face name, and you can do
693 completion with @kbd{M-@key{TAB}}.
695 @item boolean
696 The value is boolean---either @code{nil} or @code{t}.  Note that by
697 using @code{choice} and @code{const} together (see the next section),
698 you can specify that the value must be @code{nil} or @code{t}, but also
699 specify the text to describe each value in a way that fits the specific
700 meaning of the alternative.
702 @item coding-system
703 The value must be a coding-system name, and you can do completion with
704 @kbd{M-@key{TAB}}.
706 @item color
707 The value must be a valid color name, and you can do completion with
708 @kbd{M-@key{TAB}}.  A sample is provided.
709 @end table
711 @node Composite Types
712 @subsection Composite Types
713 @cindex Composite Types (customization)
715   When none of the simple types is appropriate, you can use composite
716 types, which build new types from other types or from specified data.
717 The specified types or data are called the @dfn{arguments} of the
718 composite type.  The composite type normally looks like this:
720 @example
721 (@var{constructor} @var{arguments}@dots{})
722 @end example
724 @noindent
725 but you can also add keyword-value pairs before the arguments, like
726 this:
728 @example
729 (@var{constructor} @r{@{}@var{keyword} @var{value}@r{@}}@dots{} @var{arguments}@dots{})
730 @end example
732   Here is a table of constructors and how to use them to write
733 composite types:
735 @table @code
736 @item (cons @var{car-type} @var{cdr-type})
737 The value must be a cons cell, its @sc{car} must fit @var{car-type}, and
738 its @sc{cdr} must fit @var{cdr-type}.  For example, @code{(cons string
739 symbol)} is a customization type which matches values such as
740 @code{("foo" . foo)}.
742 In the customization buffer, the @sc{car} and the @sc{cdr} are
743 displayed and edited separately, each according to the type
744 that you specify for it.
746 @item (list @var{element-types}@dots{})
747 The value must be a list with exactly as many elements as the
748 @var{element-types} given; and each element must fit the
749 corresponding @var{element-type}.
751 For example, @code{(list integer string function)} describes a list of
752 three elements; the first element must be an integer, the second a
753 string, and the third a function.
755 In the customization buffer, each element is displayed and edited
756 separately, according to the type specified for it.
758 @item (group @var{element-types}@dots{})
759 This works like @code{list} except for the formatting
760 of text in the Custom buffer.  @code{list} labels each
761 element value with its tag; @code{group} does not.
763 @item (vector @var{element-types}@dots{})
764 Like @code{list} except that the value must be a vector instead of a
765 list.  The elements work the same as in @code{list}.
767 @item (choice @var{alternative-types}@dots{})
768 The value must fit at least one of @var{alternative-types}.
769 For example, @code{(choice integer string)} allows either an
770 integer or a string.
772 In the customization buffer, the user selects an alternative
773 using a menu, and can then edit the value in the usual way for that
774 alternative.
776 Normally the strings in this menu are determined automatically from the
777 choices; however, you can specify different strings for the menu by
778 including the @code{:tag} keyword in the alternatives.  For example, if
779 an integer stands for a number of spaces, while a string is text to use
780 verbatim, you might write the customization type this way,
782 @example
783 (choice (integer :tag "Number of spaces")
784         (string :tag "Literal text"))
785 @end example
787 @noindent
788 so that the menu offers @samp{Number of spaces} and @samp{Literal text}.
790 In any alternative for which @code{nil} is not a valid value, other than
791 a @code{const}, you should specify a valid default for that alternative
792 using the @code{:value} keyword.  @xref{Type Keywords}.
794 If some values are covered by more than one of the alternatives,
795 customize will choose the first alternative that the value fits.  This
796 means you should always list the most specific types first, and the
797 most general last.  Here's an example of proper usage:
799 @example
800 (choice (const :tag "Off" nil)
801         symbol (sexp :tag "Other"))
802 @end example
804 @noindent
805 This way, the special value @code{nil} is not treated like other
806 symbols, and symbols are not treated like other Lisp expressions.
808 @item (radio @var{element-types}@dots{})
809 This is similar to @code{choice}, except that the choices are displayed
810 using `radio buttons' rather than a menu.  This has the advantage of
811 displaying documentation for the choices when applicable and so is often
812 a good choice for a choice between constant functions
813 (@code{function-item} customization types).
815 @item (const @var{value})
816 The value must be @var{value}---nothing else is allowed.
818 The main use of @code{const} is inside of @code{choice}.  For example,
819 @code{(choice integer (const nil))} allows either an integer or
820 @code{nil}.
822 @code{:tag} is often used with @code{const}, inside of @code{choice}.
823 For example,
825 @example
826 (choice (const :tag "Yes" t)
827         (const :tag "No" nil)
828         (const :tag "Ask" foo))
829 @end example
831 @noindent
832 describes a variable for which @code{t} means yes, @code{nil} means no,
833 and @code{foo} means ``ask.''
835 @item (other @var{value})
836 This alternative can match any Lisp value, but if the user chooses this
837 alternative, that selects the value @var{value}.
839 The main use of @code{other} is as the last element of @code{choice}.
840 For example,
842 @example
843 (choice (const :tag "Yes" t)
844         (const :tag "No" nil)
845         (other :tag "Ask" foo))
846 @end example
848 @noindent
849 describes a variable for which @code{t} means yes, @code{nil} means no,
850 and anything else means ``ask.''  If the user chooses @samp{Ask} from
851 the menu of alternatives, that specifies the value @code{foo}; but any
852 other value (not @code{t}, @code{nil} or @code{foo}) displays as
853 @samp{Ask}, just like @code{foo}.
855 @item (function-item @var{function})
856 Like @code{const}, but used for values which are functions.  This
857 displays the documentation string as well as the function name.
858 The documentation string is either the one you specify with
859 @code{:doc}, or @var{function}'s own documentation string.
861 @item (variable-item @var{variable})
862 Like @code{const}, but used for values which are variable names.  This
863 displays the documentation string as well as the variable name.  The
864 documentation string is either the one you specify with @code{:doc}, or
865 @var{variable}'s own documentation string.
867 @item (set @var{types}@dots{})
868 The value must be a list, and each element of the list must match one of
869 the @var{types} specified.
871 This appears in the customization buffer as a checklist, so that each of
872 @var{types} may have either one corresponding element or none.  It is
873 not possible to specify two different elements that match the same one
874 of @var{types}.  For example, @code{(set integer symbol)} allows one
875 integer and/or one symbol in the list; it does not allow multiple
876 integers or multiple symbols.  As a result, it is rare to use
877 nonspecific types such as @code{integer} in a @code{set}.
879 Most often, the @var{types} in a @code{set} are @code{const} types, as
880 shown here:
882 @example
883 (set (const :bold) (const :italic))
884 @end example
886 Sometimes they describe possible elements in an alist:
888 @example
889 (set (cons :tag "Height" (const height) integer)
890      (cons :tag "Width" (const width) integer))
891 @end example
893 @noindent
894 That lets the user specify a height value optionally
895 and a width value optionally.
897 @item (repeat @var{element-type})
898 The value must be a list and each element of the list must fit the type
899 @var{element-type}.  This appears in the customization buffer as a
900 list of elements, with @samp{[INS]} and @samp{[DEL]} buttons for adding
901 more elements or removing elements.
903 @item (restricted-sexp :match-alternatives @var{criteria})
904 This is the most general composite type construct.  The value may be
905 any Lisp object that satisfies one of @var{criteria}.  @var{criteria}
906 should be a list, and each element should be one of these
907 possibilities:
909 @itemize @bullet
910 @item
911 A predicate---that is, a function of one argument that has no side
912 effects, and returns either @code{nil} or non-@code{nil} according to
913 the argument.  Using a predicate in the list says that objects for which
914 the predicate returns non-@code{nil} are acceptable.
916 @item
917 A quoted constant---that is, @code{'@var{object}}.  This sort of element
918 in the list says that @var{object} itself is an acceptable value.
919 @end itemize
921 For example,
923 @example
924 (restricted-sexp :match-alternatives
925                  (integerp 't 'nil))
926 @end example
928 @noindent
929 allows integers, @code{t} and @code{nil} as legitimate values.
931 The customization buffer shows all legitimate values using their read
932 syntax, and the user edits them textually.
933 @end table
935   Here is a table of the keywords you can use in keyword-value pairs
936 in a composite type:
938 @table @code
939 @item :tag @var{tag}
940 Use @var{tag} as the name of this alternative, for user communication
941 purposes.  This is useful for a type that appears inside of a
942 @code{choice}.
944 @item :match-alternatives @var{criteria}
945 @kindex match-alternatives@r{, customization keyword}
946 Use @var{criteria} to match possible values.  This is used only in
947 @code{restricted-sexp}.
949 @item :args @var{argument-list}
950 @kindex args@r{, customization keyword}
951 Use the elements of @var{argument-list} as the arguments of the type
952 construct.  For instance, @code{(const :args (foo))} is equivalent to
953 @code{(const foo)}.  You rarely need to write @code{:args} explicitly,
954 because normally the arguments are recognized automatically as
955 whatever follows the last keyword-value pair.
956 @end table
958 @node Splicing into Lists
959 @subsection Splicing into Lists
961   The @code{:inline} feature lets you splice a variable number of
962 elements into the middle of a list or vector.  You use it in a
963 @code{set}, @code{choice} or @code{repeat} type which appears among the
964 element-types of a @code{list} or @code{vector}.
966   Normally, each of the element-types in a @code{list} or @code{vector}
967 describes one and only one element of the list or vector.  Thus, if an
968 element-type is a @code{repeat}, that specifies a list of unspecified
969 length which appears as one element.
971   But when the element-type uses @code{:inline}, the value it matches is
972 merged directly into the containing sequence.  For example, if it
973 matches a list with three elements, those become three elements of the
974 overall sequence.  This is analogous to using @samp{,@@} in the backquote
975 construct.
977   For example, to specify a list whose first element must be @code{baz}
978 and whose remaining arguments should be zero or more of @code{foo} and
979 @code{bar}, use this customization type:
981 @example
982 (list (const baz) (set :inline t (const foo) (const bar)))
983 @end example
985 @noindent
986 This matches values such as @code{(baz)}, @code{(baz foo)}, @code{(baz bar)}
987 and @code{(baz foo bar)}.
989   When the element-type is a @code{choice}, you use @code{:inline} not
990 in the @code{choice} itself, but in (some of) the alternatives of the
991 @code{choice}.  For example, to match a list which must start with a
992 file name, followed either by the symbol @code{t} or two strings, use
993 this customization type:
995 @example
996 (list file
997       (choice (const t)
998               (list :inline t string string)))
999 @end example
1001 @noindent
1002 If the user chooses the first alternative in the choice, then the
1003 overall list has two elements and the second element is @code{t}.  If
1004 the user chooses the second alternative, then the overall list has three
1005 elements and the second and third must be strings.
1007 @node Type Keywords
1008 @subsection Type Keywords
1010 You can specify keyword-argument pairs in a customization type after the
1011 type name symbol.  Here are the keywords you can use, and their
1012 meanings:
1014 @table @code
1015 @item :value @var{default}
1016 This is used for a type that appears as an alternative inside of
1017 @code{choice}; it specifies the default value to use, at first, if and
1018 when the user selects this alternative with the menu in the
1019 customization buffer.
1021 Of course, if the actual value of the option fits this alternative, it
1022 will appear showing the actual value, not @var{default}.
1024 If @code{nil} is not a valid value for the alternative, then it is
1025 essential to specify a valid default with @code{:value}.
1027 @item :format @var{format-string}
1028 @kindex format@r{, customization keyword}
1029 This string will be inserted in the buffer to represent the value
1030 corresponding to the type.  The following @samp{%} escapes are available
1031 for use in @var{format-string}:
1033 @table @samp
1034 @item %[@var{button}%]
1035 Display the text @var{button} marked as a button.  The @code{:action}
1036 attribute specifies what the button will do if the user invokes it;
1037 its value is a function which takes two arguments---the widget which
1038 the button appears in, and the event.
1040 There is no way to specify two different buttons with different
1041 actions.
1043 @item %@{@var{sample}%@}
1044 Show @var{sample} in a special face specified by @code{:sample-face}.
1046 @item %v
1047 Substitute the item's value.  How the value is represented depends on
1048 the kind of item, and (for variables) on the customization type.
1050 @item %d
1051 Substitute the item's documentation string.
1053 @item %h
1054 Like @samp{%d}, but if the documentation string is more than one line,
1055 add an active field to control whether to show all of it or just the
1056 first line.
1058 @item %t
1059 Substitute the tag here.  You specify the tag with the @code{:tag}
1060 keyword.
1062 @item %%
1063 Display a literal @samp{%}.
1064 @end table
1066 @item :action @var{action}
1067 @kindex action@r{, customization keyword}
1068 Perform @var{action} if the user clicks on a button.
1070 @item :button-face @var{face}
1071 @kindex button-face@r{, customization keyword}
1072 Use the face @var{face} (a face name or a list of face names) for button
1073 text displayed with @samp{%[@dots{}%]}.
1075 @item :button-prefix @var{prefix}
1076 @itemx :button-suffix @var{suffix}
1077 @kindex button-prefix@r{, customization keyword}
1078 @kindex button-suffix@r{, customization keyword}
1079 These specify the text to display before and after a button.
1080 Each can be:
1082 @table @asis
1083 @item @code{nil}
1084 No text is inserted.
1086 @item a string
1087 The string is inserted literally.
1089 @item a symbol
1090 The symbol's value is used.
1091 @end table
1093 @item :tag @var{tag}
1094 Use @var{tag} (a string) as the tag for the value (or part of the value)
1095 that corresponds to this type.
1097 @item :doc @var{doc}
1098 @kindex doc@r{, customization keyword}
1099 Use @var{doc} as the documentation string for this value (or part of the
1100 value) that corresponds to this type.  In order for this to work, you
1101 must specify a value for @code{:format}, and use @samp{%d} or @samp{%h}
1102 in that value.
1104 The usual reason to specify a documentation string for a type is to
1105 provide more information about the meanings of alternatives inside a
1106 @code{:choice} type or the parts of some other composite type.
1108 @item :help-echo @var{motion-doc}
1109 @kindex help-echo@r{, customization keyword}
1110 When you move to this item with @code{widget-forward} or
1111 @code{widget-backward}, it will display the string @var{motion-doc} in
1112 the echo area.  In addition, @var{motion-doc} is used as the mouse
1113 @code{help-echo} string and may actually be a function or form evaluated
1114 to yield a help string.  If it is a function, it is called with one
1115 argument, the widget.
1117 @item :match @var{function}
1118 @kindex match@r{, customization keyword}
1119 Specify how to decide whether a value matches the type.  The
1120 corresponding value, @var{function}, should be a function that accepts
1121 two arguments, a widget and a value; it should return non-@code{nil} if
1122 the value is acceptable.
1124 @item :validate @var{function}
1125 Specify a validation function for input.  @var{function} takes a
1126 widget as an argument, and should return @code{nil} if the widget's
1127 current value is valid for the widget.  Otherwise, it should return
1128 the widget containing the invalid data, and set that widget's
1129 @code{:error} property to a string explaining the error.
1131 @ignore
1132 @item :indent @var{columns}
1133 Indent this item by @var{columns} columns.  The indentation is used for
1134 @samp{%n}, and automatically for group names, for checklists and radio
1135 buttons, and for editable lists.  It affects the whole of the
1136 item except for the first line.
1138 @item :offset @var{extra}
1139 Indent the subitems of this item @var{extra} columns more than this
1140 item itself.  By default, subitems are indented the same as their
1141 parent.
1143 @item :extra-offset @var{n}
1144 Add @var{n} extra spaces to this item's indentation, compared to its
1145 parent's indentation.
1147 @item :notify @var{function}
1148 Call @var{function} each time the item or a subitem is changed.  The
1149 function gets two or three arguments.  The first argument is the item
1150 itself, the second argument is the item that was changed, and the
1151 third argument is the event leading to the change, if any.
1153 @item :menu-tag @var{tag-string}
1154 Use @var{tag-string} in the menu when the widget is used as an option
1155 in a @code{menu-choice} widget.
1157 @item :menu-tag-get
1158 A function used for finding the tag when the widget is used as an option
1159 in a @code{menu-choice} widget.  By default, the tag used will be either the
1160 @code{:menu-tag} or @code{:tag} property if present, or the @code{princ}
1161 representation of the @code{:value} property if not.
1163 @item :tab-order
1164 Specify the order in which widgets are traversed with
1165 @code{widget-forward} or @code{widget-backward}.  This is only partially
1166 implemented.
1168 @enumerate a
1169 @item
1170 Widgets with tabbing order @code{-1} are ignored.
1172 @item
1173 (Unimplemented) When on a widget with tabbing order @var{n}, go to the
1174 next widget in the buffer with tabbing order @var{n+1} or @code{nil},
1175 whichever comes first.
1177 @item
1178 When on a widget with no tabbing order specified, go to the next widget
1179 in the buffer with a positive tabbing order, or @code{nil}
1180 @end enumerate
1182 @item :parent
1183 The parent of a nested widget (e.g., a @code{menu-choice} item or an
1184 element of a @code{editable-list} widget).
1186 @item :sibling-args
1187 This keyword is only used for members of a @code{radio-button-choice} or
1188 @code{checklist}.  The value should be a list of extra keyword
1189 arguments, which will be used when creating the @code{radio-button} or
1190 @code{checkbox} associated with this item.
1191 @end ignore
1192 @end table
1194 @node Defining New Types
1195 @subsection Defining New Types
1197 In the previous sections we have described how to construct elaborate
1198 type specifications for @code{defcustom}.  In some cases you may want
1199 to give such a type specification a name.  The obvious case is when
1200 you are using the same type for many user options: rather than repeat
1201 the specification for each option, you can give the type specification
1202 a name, and use that name each @code{defcustom}.  The other case is
1203 when a user option's value is a recursive data structure.  To make it
1204 possible for a datatype to refer to itself, it needs to have a name.
1206 Since custom types are implemented as widgets, the way to define a new
1207 customize type is to define a new widget.  We are not going to describe
1208 the widget interface here in details, see @ref{Top, , Introduction,
1209 widget, The Emacs Widget Library}, for that.  Instead we are going to
1210 demonstrate the minimal functionality needed for defining new customize
1211 types by a simple example.
1213 @example
1214 (define-widget 'binary-tree-of-string 'lazy
1215   "A binary tree made of cons-cells and strings."
1216   :offset 4
1217   :tag "Node"
1218   :type '(choice (string :tag "Leaf" :value "")
1219                  (cons :tag "Interior"
1220                        :value ("" . "")
1221                        binary-tree-of-string
1222                        binary-tree-of-string)))
1224 (defcustom foo-bar ""
1225   "Sample variable holding a binary tree of strings."
1226   :type 'binary-tree-of-string)
1227 @end example
1229 The function to define a new widget is called @code{define-widget}.  The
1230 first argument is the symbol we want to make a new widget type.  The
1231 second argument is a symbol representing an existing widget, the new
1232 widget is going to be defined in terms of difference from the existing
1233 widget.  For the purpose of defining new customization types, the
1234 @code{lazy} widget is perfect, because it accepts a @code{:type} keyword
1235 argument with the same syntax as the keyword argument to
1236 @code{defcustom} with the same name.  The third argument is a
1237 documentation string for the new widget.  You will be able to see that
1238 string with the @kbd{M-x widget-browse @key{RET} binary-tree-of-string
1239 @key{RET}} command.
1241 After these mandatory arguments follow the keyword arguments.  The most
1242 important is @code{:type}, which describes the data type we want to match
1243 with this widget.  Here a @code{binary-tree-of-string} is described as
1244 being either a string, or a cons-cell whose car and cdr are themselves
1245 both @code{binary-tree-of-string}.  Note the reference to the widget
1246 type we are currently in the process of defining.  The @code{:tag}
1247 attribute is a string to name the widget in the user interface, and the
1248 @code{:offset} argument is there to ensure that child nodes are
1249 indented four spaces relative to the parent node, making the tree
1250 structure apparent in the customization buffer.
1252 The @code{defcustom} shows how the new widget can be used as an ordinary
1253 customization type.
1255 The reason for the name @code{lazy} is that the other composite
1256 widgets convert their inferior widgets to internal form when the
1257 widget is instantiated in a buffer.  This conversion is recursive, so
1258 the inferior widgets will convert @emph{their} inferior widgets.  If
1259 the data structure is itself recursive, this conversion is an infinite
1260 recursion.  The @code{lazy} widget prevents the recursion: it convert
1261 its @code{:type} argument only when needed.
1263 @ignore
1264    arch-tag: d1b8fad3-f48c-4ce4-a402-f73b5ef19bd2
1265 @end ignore