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