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