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