(archive-extract): Use `posn-set-point' instead of `mouse-set-point'
[emacs.git] / lispref / customize.texi
blob1bf54f4f210975953eb1324efcd917dea6d97d7c
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 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 item
38 in customization menus and buffers.
40 @item :group @var{group}
41 Put this customization item in group @var{group}.  When you use
42 @code{:group} in a @code{defgroup}, it makes the new group a subgroup of
43 @var{group}.
45 If you use this keyword more than once, you can put a single item into
46 more than one group.  Displaying any of those groups will show this
47 item.  Please don't overdo this, since the result would be annoying.
49 @item :link @var{link-data}
50 Include an external link after the documentation string for this item.
51 This is a sentence containing an active field which references some
52 other documentation.
54 There are several alternatives you can use for @var{link-data}:
56 @table @code
57 @item (custom-manual @var{info-node})
58 Link to an Info node; @var{info-node} is a string which specifies the
59 node name, as in @code{"(emacs)Top"}.  The link appears as
60 @samp{[Manual]} in the customization buffer and enters the built-in
61 Info reader on @var{info-node}.
63 @item (info-link @var{info-node})
64 Like @code{custom-manual} except that the link appears
65 in the customization buffer with the Info node name.
67 @item (url-link @var{url})
68 Link to a web page; @var{url} is a string which specifies the
69 @acronym{URL}.  The link appears in the customization buffer as
70 @var{url} and invokes the WWW browser specified by
71 @var{browse-url-browser-function}.
73 @item (emacs-commentary-link @var{library})
74 Link to the commentary section of a library; @var{library} is a string
75 which specifies the library name.
77 @item (emacs-library-link @var{library})
78 Link to an Emacs Lisp library file; @var{library} is a string which
79 specifies the library name.
81 @item (file-link @var{file})
82 Link to a file; @var{file} is a string which specifies the name of the
83 file to visit with @code{find-file} when the user invokes this link.
85 @item (function-link @var{function})
86 Link to the documentation of a function; @var{function} is a string
87 which specifies the name of the function to describe with
88 @code{describe-function} when the user invokes this link.
90 @item (variable-link @var{variable})
91 Link to the documentation of a variable; @var{variable} is a string
92 which specifies the name of the variable to describe with
93 @code{describe-variable} when the user invokes this link.
95 @item (custom-group-link @var{group})
96 Link to another customization group.  Invoking it creates a new
97 customization buffer for @var{group}.
98 @end table
100 You can specify the text to use in the customization buffer by adding
101 @code{:tag @var{name}} after the first element of the @var{link-data};
102 for example, @code{(info-link :tag "foo" "(emacs)Top")} makes a link to
103 the Emacs manual which appears in the buffer as @samp{foo}.
105 An item can have more than one external link; however, most items have
106 none at all.
108 @item :load @var{file}
109 Load file @var{file} (a string) before displaying this customization
110 item.  Loading is done with @code{load-library}, and only if the file is
111 not already loaded.
113 @item :require @var{feature}
114 Execute @code{(require '@var{feature})} when your saved customizations
115 set the value of this item.  @var{feature} should be a symbol.
117 The most common reason to use @code{:require} is when a variable enables
118 a feature such as a minor mode, and just setting the variable won't have
119 any effect unless the code which implements the mode is loaded.
121 @item :version @var{version}
122 This option specifies that the item was first introduced in Emacs
123 version @var{version}, or that its default value was changed in that
124 version.  The value @var{version} must be a string.
125 @end table
127 @node Group Definitions
128 @section Defining Custom Groups
130   Each Emacs Lisp package should have one main customization group which
131 contains all the options, faces and other groups in the package.  If the
132 package has a small number of options and faces, use just one group and
133 put everything in it.  When there are more than twelve or so options and
134 faces, then you should structure them into subgroups, and put the
135 subgroups under the package's main customization group.  It is OK to
136 put some of the options and faces in the package's main group alongside
137 the subgroups.
139   The package's main or only group should be a member of one or more of
140 the standard customization groups.  (To display the full list of them,
141 use @kbd{M-x customize}.)  Choose one or more of them (but not too
142 many), and add your group to each of them using the @code{:group}
143 keyword.
145   The way to declare new customization groups is with @code{defgroup}.
147 @defmac defgroup group members doc [keyword value]@dots{}
148 Declare @var{group} as a customization group containing @var{members}.
149 Do not quote the symbol @var{group}.  The argument @var{doc} specifies
150 the documentation string for the group.  It should not start with a
151 @samp{*} as in @code{defcustom}; that convention is for variables only.
153 The argument @var{members} is a list specifying an initial set of
154 customization items to be members of the group.  However, most often
155 @var{members} is @code{nil}, and you specify the group's members by
156 using the @code{:group} keyword when defining those members.
158 If you want to specify group members through @var{members}, each element
159 should have the form @code{(@var{name} @var{widget})}.  Here @var{name}
160 is a symbol, and @var{widget} is a widget type for editing that symbol.
161 Useful widgets are @code{custom-variable} for a variable,
162 @code{custom-face} for a face, and @code{custom-group} for a group.
164 When you introduce a new group into Emacs, use the @code{:version}
165 keyword in the @code{defgroup}; then you need not use it for
166 the individual members of the group.
168 In addition to the common keywords (@pxref{Common Keywords}), you can
169 also use this keyword in @code{defgroup}:
171 @table @code
172 @item :prefix @var{prefix}
173 If the name of an item in the group starts with @var{prefix}, then the
174 tag for that item is constructed (by default) by omitting @var{prefix}.
176 One group can have any number of prefixes.
177 @end table
178 @end defmac
180   The prefix-discarding feature is currently turned off, which means
181 that @code{:prefix} currently has no effect.  We did this because we
182 found that discarding the specified prefixes often led to confusing
183 names for options.  This happened because the people who wrote the
184 @code{defgroup} definitions for various groups added @code{:prefix}
185 keywords whenever they make logical sense---that is, whenever the
186 variables in the library have a common prefix.
188   In order to obtain good results with @code{:prefix}, it would be
189 necessary to check the specific effects of discarding a particular
190 prefix, given the specific items in a group and their names and
191 documentation.  If the resulting text is not clear, then @code{:prefix}
192 should not be used in that case.
194   It should be possible to recheck all the customization groups, delete
195 the @code{:prefix} specifications which give unclear results, and then
196 turn this feature back on, if someone would like to do the work.
198 @node Variable Definitions
199 @section Defining Customization Variables
201   Use @code{defcustom} to declare user-editable variables.
203 @defmac defcustom option default doc [keyword value]@dots{}
204 Declare @var{option} as a customizable user option variable.  Do not
205 quote @var{option}.  The argument @var{doc} specifies the documentation
206 string for the variable.  It should often start with a @samp{*} to mark
207 it as a @dfn{user option} (@pxref{Defining Variables}).  Do not start
208 the documentation string with @samp{*} for options which cannot or
209 normally should not be set with @code{set-variable}; examples of the
210 former are global minor mode options such as
211 @code{global-font-lock-mode} and examples of the latter are hooks.
213 If @var{option} is void, @code{defcustom} initializes it to
214 @var{default}.  @var{default} should be an expression to compute the
215 value; be careful in writing it, because it can be evaluated on more
216 than one occasion.  You should normally avoid using backquotes in
217 @var{default} because they are not expanded when editing the value,
218 causing list values to appear to have the wrong structure.
220 If you specify the @code{:set} option, to make the variable take other
221 special actions when set through the customization buffer, the
222 variable's documentation string should tell the user specifically how
223 to do the same job in hand-written Lisp code.
225 When you evaluate a @code{defcustom} form with @kbd{C-M-x} in Emacs Lisp
226 mode (@code{eval-defun}), a special feature of @code{eval-defun}
227 arranges to set the variable unconditionally, without testing whether
228 its value is void.  (The same feature applies to @code{defvar}.)
229 @xref{Defining Variables}.
230 @end defmac
232   @code{defcustom} accepts the following additional keywords:
234 @table @code
235 @item :type @var{type}
236 Use @var{type} as the data type for this option.  It specifies which
237 values are legitimate, and how to display the value.
238 @xref{Customization Types}, for more information.
240 @item :options @var{list}
241 Specify @var{list} as the list of reasonable values for use in this
242 option.  The user is not restricted to using only these values, but they
243 are offered as convenient alternatives.
245 This is meaningful only for certain types, currently including
246 @code{hook}, @code{plist} and @code{alist}.  See the definition of the
247 individual types for a description of how to use @code{:options}.
249 @item :set @var{setfunction}
250 Specify @var{setfunction} as the way to change the value of this
251 option.  The function @var{setfunction} should take two arguments, a
252 symbol (the option name) and the new value, and should do whatever is
253 necessary to update the value properly for this option (which may not
254 mean simply setting the option as a Lisp variable).  The default for
255 @var{setfunction} is @code{set-default}.
257 @item :get @var{getfunction}
258 Specify @var{getfunction} as the way to extract the value of this
259 option.  The function @var{getfunction} should take one argument, a
260 symbol, and should return whatever customize should use as the
261 ``current value'' for that symbol (which need not be the symbol's Lisp
262 value).  The default is @code{default-value}.
264 You have to really understand the workings of Custom to use
265 @code{:get} correctly.  It is meant for values that are treated in
266 Custom as variables but are not actually stored in Lisp variables.  It
267 is almost surely a mistake to specify @code{getfunction} for a value
268 that really is stored in a Lisp variable.
270 @item :initialize @var{function}
271 @var{function} should be a function used to initialize the variable
272 when the @code{defcustom} is evaluated.  It should take two arguments,
273 the option name (a symbol) and the value.  Here are some predefined
274 functions meant for use in this way:
276 @table @code
277 @item custom-initialize-set
278 Use the variable's @code{:set} function to initialize the variable, but
279 do not reinitialize it if it is already non-void.
281 @item custom-initialize-default
282 Like @code{custom-initialize-set}, but use the function
283 @code{set-default} to set the variable, instead of the variable's
284 @code{:set} function.  This is the usual choice for a variable whose
285 @code{:set} function enables or disables a minor mode; with this choice,
286 defining the variable will not call the minor mode function, but
287 customizing the variable will do so.
289 @item custom-initialize-reset
290 Always use the @code{:set} function to initialize the variable.  If
291 the variable is already non-void, reset it by calling the @code{:set}
292 function using the current value (returned by the @code{:get} method).
293 This is the default @code{:initialize} function.
295 @item custom-initialize-changed
296 Use the @code{:set} function to initialize the variable, if it is
297 already set or has been customized; otherwise, just use
298 @code{set-default}.
300 @item custom-initialize-safe-set
301 @itemx custom-initialize-safe-default
302 These functions behave like @code{custom-initialize-set}
303 (@code{custom-initialize-default}, respectively), but catch errors.
304 If an error occurs during initialization, they set the variable to
305 @code{nil} using @code{set-default}, and throw no error.
307 These two functions are only meant for options defined in pre-loaded
308 files, where some variables or functions used to compute the option's
309 value may not yet be defined.  The option normally gets updated in
310 @file{startup.el}, ignoring the previously computed value.  Because of
311 this typical usage, the value which these two functions compute
312 normally only matters when, after startup, one unsets the option's
313 value and then reevaluates the defcustom.  By that time, the necessary
314 variables and functions will be defined, so there will not be an error.
315 @end table
317 @item :set-after @var{variables}
318 When setting variables according to saved customizations, make sure to
319 set the variables @var{variables} before this one; in other words, delay
320 setting this variable until after those others have been handled.  Use
321 @code{:set-after} if setting this variable won't work properly unless
322 those other variables already have their intended values.
323 @end table
325   The @code{:require} option is useful for an option that turns on the
326 operation of a certain feature.  Assuming that the package is coded to
327 check the value of the option, you still need to arrange for the package
328 to be loaded.  You can do that with @code{:require}.  @xref{Common
329 Keywords}.  Here is an example, from the library @file{saveplace.el}:
331 @example
332 (defcustom save-place nil
333   "*Non-nil means automatically save place in each file..."
334   :type 'boolean
335   :require 'saveplace
336   :group 'save-place)
337 @end example
339 If a customization item has a type such as @code{hook} or @code{alist},
340 which supports @code{:options}, you can add additional options to the
341 item, outside the @code{defcustom} declaration, by calling
342 @code{custom-add-option}.  For example, if you define a function
343 @code{my-lisp-mode-initialization} intended to be called from
344 @code{emacs-lisp-mode-hook}, you might want to add that to the list of
345 options for @code{emacs-lisp-mode-hook}, but not by editing its
346 definition.   You can do it thus:
348 @example
349 (custom-add-option 'emacs-lisp-mode-hook
350                    'my-lisp-mode-initialization)
351 @end example
353 @defun custom-add-option symbol option
354 To the customization @var{symbol}, add @var{option}.
356 The precise effect of adding @var{option} depends on the customization
357 type of @var{symbol}.
358 @end defun
360 Internally, @code{defcustom} uses the symbol property
361 @code{standard-value} to record the expression for the default value,
362 and @code{saved-value} to record the value saved by the user with the
363 customization buffer.  Both properties are actually lists whose car is
364 an expression which evaluates to the value.
366 @node Customization Types
367 @section Customization Types
369   When you define a user option with @code{defcustom}, you must specify
370 its @dfn{customization type}.  That is a Lisp object which describes (1)
371 which values are legitimate and (2) how to display the value in the
372 customization buffer for editing.
374   You specify the customization type in @code{defcustom} with the
375 @code{:type} keyword.  The argument of @code{:type} is evaluated, but
376 only once when the @code{defcustom} is executed, so it isn't useful
377 for the value to vary.  Normally we use a quoted constant.  For
378 example:
380 @example
381 (defcustom diff-command "diff"
382   "*The command to use to run diff."
383   :type '(string)
384   :group 'diff)
385 @end example
387   In general, a customization type is a list whose first element is a
388 symbol, one of the customization type names defined in the following
389 sections.  After this symbol come a number of arguments, depending on
390 the symbol.  Between the type symbol and its arguments, you can
391 optionally write keyword-value pairs (@pxref{Type Keywords}).
393   Some of the type symbols do not use any arguments; those are called
394 @dfn{simple types}.  For a simple type, if you do not use any
395 keyword-value pairs, you can omit the parentheses around the type
396 symbol.  For example just @code{string} as a customization type is
397 equivalent to @code{(string)}.
399 @menu
400 * Simple Types::
401 * Composite Types::
402 * Splicing into Lists::
403 * Type Keywords::
404 * Defining New Types::
405 @end menu
407 All customization types are implemented as widgets; see @ref{Top, ,
408 Introduction, widget, The Emacs Widget Library}, for details.
410 @node Simple Types
411 @subsection Simple Types
413   This section describes all the simple customization types.
415 @table @code
416 @item sexp
417 The value may be any Lisp object that can be printed and read back.  You
418 can use @code{sexp} as a fall-back for any option, if you don't want to
419 take the time to work out a more specific type to use.
421 @item integer
422 The value must be an integer, and is represented textually
423 in the customization buffer.
425 @item number
426 The value must be a number (floating point or integer), and is
427 represented textually in the customization buffer.
429 @item float
430 The value must be a floating point number, and is represented
431 textually in the customization buffer.
433 @item string
434 The value must be a string, and the customization buffer shows just the
435 contents, with no delimiting @samp{"} characters and no quoting with
436 @samp{\}.
438 @item regexp
439 Like @code{string} except that the string must be a valid regular
440 expression.
442 @item character
443 The value must be a character code.  A character code is actually an
444 integer, but this type shows the value by inserting the character in the
445 buffer, rather than by showing the number.
447 @item file
448 The value must be a file name, and you can do completion with
449 @kbd{M-@key{TAB}}.
451 @item (file :must-match t)
452 The value must be a file name for an existing file, and you can do
453 completion with @kbd{M-@key{TAB}}.
455 @item directory
456 The value must be a directory name, and you can do completion with
457 @kbd{M-@key{TAB}}.
459 @item hook
460 The value must be a list of functions (or a single function, but that is
461 obsolete usage).  This customization type is used for hook variables.
462 You can use the @code{:options} keyword in a hook variable's
463 @code{defcustom} to specify a list of functions recommended for use in
464 the hook; see @ref{Variable Definitions}.
466 @item alist
467 The value must be a list of cons-cells, the @sc{car} of each cell
468 representing a key, and the @sc{cdr} of the same cell representing an
469 associated value.  The user can add and delete key/value pairs, and
470 edit both the key and the value of each pair.
472 You can specify the key and value types like this:
474 @smallexample
475 (alist :key-type @var{key-type} :value-type @var{value-type})
476 @end smallexample
478 @noindent
479 where @var{key-type} and @var{value-type} are customization type
480 specifications.  The default key type is @code{sexp}, and the default
481 value type is @code{sexp}.
483 The user can add any key matching the specified key type, but you can
484 give some keys a preferential treatment by specifying them with the
485 @code{:options} (see @ref{Variable Definitions}).  The specified keys
486 will always be shown in the customize buffer (together with a suitable
487 value), with a checkbox to include or exclude or disable the key/value
488 pair from the alist.  The user will not be able to edit the keys
489 specified by the @code{:options} keyword argument.
491 The argument to the @code{:options} keywords should be a list of option
492 specifications.  Ordinarily, the options are simply atoms, which are the
493 specified keys.  For example:
495 @smallexample
496 :options '("foo" "bar" "baz")
497 @end smallexample
499 @noindent
500 specifies that there are three ``known'' keys, namely @code{"foo"},
501 @code{"bar"} and @code{"baz"}, which will always be shown first.
503 You may want to restrict the value type for specific keys, for example,
504 the value associated with the @code{"bar"} key can only be an integer.
505 You can specify this by using a list instead of an atom in the option
506 specification.  The first element will specify the key, like before,
507 while the second element will specify the value type.
509 @smallexample
510 :options '("foo" ("bar" integer) "baz")
511 @end smallexample
513 Finally, you may want to change how the key is presented.  By default,
514 the key is simply shown as a @code{const}, since the user cannot change
515 the special keys specified with the @code{:options} keyword.  However,
516 you may want to use a more specialized type for presenting the key, like
517 @code{function-item} if you know it is a symbol with a function binding.
518 This is done by using a customization type specification instead of a
519 symbol for the key.
521 @smallexample
522 :options '("foo" ((function-item some-function) integer) "baz")
523 @end smallexample
525 Many alists use lists with two elements, instead of cons cells.  For
526 example,
528 @smallexample
529 (defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
530   "Each element is a list of the form (KEY VALUE).")
531 @end smallexample
533 @noindent
534 instead of
536 @smallexample
537 (defcustom cons-alist '(("foo" . 1) ("bar" . 2) ("baz" . 3))
538   "Each element is a cons-cell (KEY . VALUE).")
539 @end smallexample
541 Because of the way lists are implemented on top of cons cells, you can
542 treat @code{list-alist} in the example above as a cons cell alist, where
543 the value type is a list with a single element containing the real
544 value.
546 @smallexample
547 (defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
548   "Each element is a list of the form (KEY VALUE)."
549   :type '(alist :value-type (group integer)))
550 @end smallexample
552 The @code{group} widget is used here instead of @code{list} only because
553 the formatting is better suited for the purpose.
555 Similarly, you can have alists with more values associated with each
556 key, using variations of this trick:
558 @smallexample
559 (defcustom person-data '(("brian"  50 t)
560                          ("dorith" 55 nil)
561                          ("ken"    52 t))
562   "Alist of basic info about people.
563 Each element has the form (NAME AGE MALE-FLAG)."
564   :type '(alist :value-type (group integer boolean)))
566 (defcustom pets '(("brian")
567                   ("dorith" "dog" "guppy")
568                   ("ken" "cat"))
569   "Alist of people's pets.
570 In an element (KEY . VALUE), KEY is the person's name,
571 and the VALUE is a list of that person's pets."
572   :type '(alist :value-type (repeat string)))
573 @end smallexample
575 @item plist
576 The @code{plist} custom type is similar to the @code{alist} (see above),
577 except that the information is stored as a property list, i.e. a list of
578 this form:
580 @smallexample
581 (@var{key} @var{value} @var{key} @var{value} @var{key} @var{value} @dots{})
582 @end smallexample
584 The default @code{:key-type} for @code{plist} is @code{symbol},
585 rather than @code{sexp}.
587 @item symbol
588 The value must be a symbol.  It appears in the customization buffer as
589 the name of the symbol.
591 @item function
592 The value must be either a lambda expression or a function name.  When
593 it is a function name, you can do completion with @kbd{M-@key{TAB}}.
595 @item variable
596 The value must be a variable name, and you can do completion with
597 @kbd{M-@key{TAB}}.
599 @item face
600 The value must be a symbol which is a face name, and you can do
601 completion with @kbd{M-@key{TAB}}.
603 @item boolean
604 The value is boolean---either @code{nil} or @code{t}.  Note that by
605 using @code{choice} and @code{const} together (see the next section),
606 you can specify that the value must be @code{nil} or @code{t}, but also
607 specify the text to describe each value in a way that fits the specific
608 meaning of the alternative.
610 @item coding-system
611 The value must be a coding-system name, and you can do completion with
612 @kbd{M-@key{TAB}}.
614 @item color
615 The value must be a valid color name, and you can do completion with
616 @kbd{M-@key{TAB}}.  A sample is provided.
617 @end table
619 @node Composite Types
620 @subsection Composite Types
621 @cindex arguments (of composite type)
623   When none of the simple types is appropriate, you can use composite
624 types, which build new types from other types or from specified data.
625 The specified types or data are called the @dfn{arguments} of the
626 composite type.  The composite type normally looks like this:
628 @example
629 (@var{constructor} @var{arguments}@dots{})
630 @end example
632 @noindent
633 but you can also add keyword-value pairs before the arguments, like
634 this:
636 @example
637 (@var{constructor} @r{@{}@var{keyword} @var{value}@r{@}}@dots{} @var{arguments}@dots{})
638 @end example
640   Here is a table of constructors and how to use them to write
641 composite types:
643 @table @code
644 @item (cons @var{car-type} @var{cdr-type})
645 The value must be a cons cell, its @sc{car} must fit @var{car-type}, and
646 its @sc{cdr} must fit @var{cdr-type}.  For example, @code{(cons string
647 symbol)} is a customization type which matches values such as
648 @code{("foo" . foo)}.
650 In the customization buffer, the @sc{car} and the @sc{cdr} are
651 displayed and edited separately, each according to the type
652 that you specify for it.
654 @item (list @var{element-types}@dots{})
655 The value must be a list with exactly as many elements as the
656 @var{element-types} you have specified; and each element must fit the
657 corresponding @var{element-type}.
659 For example, @code{(list integer string function)} describes a list of
660 three elements; the first element must be an integer, the second a
661 string, and the third a function.
663 In the customization buffer, each element is displayed and edited
664 separately, according to the type specified for it.
666 @item (vector @var{element-types}@dots{})
667 Like @code{list} except that the value must be a vector instead of a
668 list.  The elements work the same as in @code{list}.
670 @item (choice @var{alternative-types}@dots{})
671 The value must fit at least one of @var{alternative-types}.
672 For example, @code{(choice integer string)} allows either an
673 integer or a string.
675 In the customization buffer, the user selects one of the alternatives
676 using a menu, and can then edit the value in the usual way for that
677 alternative.
679 Normally the strings in this menu are determined automatically from the
680 choices; however, you can specify different strings for the menu by
681 including the @code{:tag} keyword in the alternatives.  For example, if
682 an integer stands for a number of spaces, while a string is text to use
683 verbatim, you might write the customization type this way,
685 @example
686 (choice (integer :tag "Number of spaces")
687         (string :tag "Literal text"))
688 @end example
690 @noindent
691 so that the menu offers @samp{Number of spaces} and @samp{Literal text}.
693 In any alternative for which @code{nil} is not a valid value, other than
694 a @code{const}, you should specify a valid default for that alternative
695 using the @code{:value} keyword.  @xref{Type Keywords}.
697 If some values are covered by more than one of the alternatives,
698 customize will choose the first alternative that the value fits.  This
699 means you should always list the most specific types first, and the
700 most general last.  Here's an example of proper usage:
702 @example
703 (choice (const :tag "Off" nil)
704         symbol (sexp :tag "Other"))
705 @end example
707 @noindent
708 This way, the special value @code{nil} is not treated like other
709 symbols, and symbols are not treated like other Lisp expressions.
711 @item (radio @var{element-types}@dots{})
712 This is similar to @code{choice}, except that the choices are displayed
713 using `radio buttons' rather than a menu.  This has the advantage of
714 displaying documentation for the choices when applicable and so is often
715 a good choice for a choice between constant functions
716 (@code{function-item} customization types).
718 @item (const @var{value})
719 The value must be @var{value}---nothing else is allowed.
721 The main use of @code{const} is inside of @code{choice}.  For example,
722 @code{(choice integer (const nil))} allows either an integer or
723 @code{nil}.
725 @code{:tag} is often used with @code{const}, inside of @code{choice}.
726 For example,
728 @example
729 (choice (const :tag "Yes" t)
730         (const :tag "No" nil)
731         (const :tag "Ask" foo))
732 @end example
734 @noindent
735 describes a variable for which @code{t} means yes, @code{nil} means no,
736 and @code{foo} means ``ask.''
738 @item (other @var{value})
739 This alternative can match any Lisp value, but if the user chooses this
740 alternative, that selects the value @var{value}.
742 The main use of @code{other} is as the last element of @code{choice}.
743 For example,
745 @example
746 (choice (const :tag "Yes" t)
747         (const :tag "No" nil)
748         (other :tag "Ask" foo))
749 @end example
751 @noindent
752 describes a variable for which @code{t} means yes, @code{nil} means no,
753 and anything else means ``ask.''  If the user chooses @samp{Ask} from
754 the menu of alternatives, that specifies the value @code{foo}; but any
755 other value (not @code{t}, @code{nil} or @code{foo}) displays as
756 @samp{Ask}, just like @code{foo}.
758 @item (function-item @var{function})
759 Like @code{const}, but used for values which are functions.  This
760 displays the documentation string as well as the function name.
761 The documentation string is either the one you specify with
762 @code{:doc}, or @var{function}'s own documentation string.
764 @item (variable-item @var{variable})
765 Like @code{const}, but used for values which are variable names.  This
766 displays the documentation string as well as the variable name.  The
767 documentation string is either the one you specify with @code{:doc}, or
768 @var{variable}'s own documentation string.
770 @item (set @var{types}@dots{})
771 The value must be a list, and each element of the list must match one of
772 the @var{types} specified.
774 This appears in the customization buffer as a checklist, so that each of
775 @var{types} may have either one corresponding element or none.  It is
776 not possible to specify two different elements that match the same one
777 of @var{types}.  For example, @code{(set integer symbol)} allows one
778 integer and/or one symbol in the list; it does not allow multiple
779 integers or multiple symbols.  As a result, it is rare to use
780 nonspecific types such as @code{integer} in a @code{set}.
782 Most often, the @var{types} in a @code{set} are @code{const} types, as
783 shown here:
785 @example
786 (set (const :bold) (const :italic))
787 @end example
789 Sometimes they describe possible elements in an alist:
791 @example
792 (set (cons :tag "Height" (const height) integer)
793      (cons :tag "Width" (const width) integer))
794 @end example
796 @noindent
797 That lets the user specify a height value optionally
798 and a width value optionally.
800 @item (repeat @var{element-type})
801 The value must be a list and each element of the list must fit the type
802 @var{element-type}.  This appears in the customization buffer as a
803 list of elements, with @samp{[INS]} and @samp{[DEL]} buttons for adding
804 more elements or removing elements.
806 @item (restricted-sexp :match-alternatives @var{criteria})
807 This is the most general composite type construct.  The value may be
808 any Lisp object that satisfies one of @var{criteria}.  @var{criteria}
809 should be a list, and each element should be one of these
810 possibilities:
812 @itemize @bullet
813 @item
814 A predicate---that is, a function of one argument that has no side
815 effects, and returns either @code{nil} or non-@code{nil} according to
816 the argument.  Using a predicate in the list says that objects for which
817 the predicate returns non-@code{nil} are acceptable.
819 @item
820 A quoted constant---that is, @code{'@var{object}}.  This sort of element
821 in the list says that @var{object} itself is an acceptable value.
822 @end itemize
824 For example,
826 @example
827 (restricted-sexp :match-alternatives
828                  (integerp 't 'nil))
829 @end example
831 @noindent
832 allows integers, @code{t} and @code{nil} as legitimate values.
834 The customization buffer shows all legitimate values using their read
835 syntax, and the user edits them textually.
836 @end table
838   Here is a table of the keywords you can use in keyword-value pairs
839 in a composite type:
841 @table @code
842 @item :tag @var{tag}
843 Use @var{tag} as the name of this alternative, for user communication
844 purposes.  This is useful for a type that appears inside of a
845 @code{choice}.
847 @item :match-alternatives @var{criteria}
848 Use @var{criteria} to match possible values.  This is used only in
849 @code{restricted-sexp}.
851 @item :args @var{argument-list}
852 Use the elements of @var{argument-list} as the arguments of the type
853 construct.  For instance, @code{(const :args (foo))} is equivalent to
854 @code{(const foo)}.  You rarely need to write @code{:args} explicitly,
855 because normally the arguments are recognized automatically as
856 whatever follows the last keyword-value pair.
857 @end table
859 @node Splicing into Lists
860 @subsection Splicing into Lists
862   The @code{:inline} feature lets you splice a variable number of
863 elements into the middle of a list or vector.  You use it in a
864 @code{set}, @code{choice} or @code{repeat} type which appears among the
865 element-types of a @code{list} or @code{vector}.
867   Normally, each of the element-types in a @code{list} or @code{vector}
868 describes one and only one element of the list or vector.  Thus, if an
869 element-type is a @code{repeat}, that specifies a list of unspecified
870 length which appears as one element.
872   But when the element-type uses @code{:inline}, the value it matches is
873 merged directly into the containing sequence.  For example, if it
874 matches a list with three elements, those become three elements of the
875 overall sequence.  This is analogous to using @samp{,@@} in the backquote
876 construct.
878   For example, to specify a list whose first element must be @code{baz}
879 and whose remaining arguments should be zero or more of @code{foo} and
880 @code{bar}, use this customization type:
882 @example
883 (list (const baz) (set :inline t (const foo) (const bar)))
884 @end example
886 @noindent
887 This matches values such as @code{(baz)}, @code{(baz foo)}, @code{(baz bar)}
888 and @code{(baz foo bar)}.
890   When the element-type is a @code{choice}, you use @code{:inline} not
891 in the @code{choice} itself, but in (some of) the alternatives of the
892 @code{choice}.  For example, to match a list which must start with a
893 file name, followed either by the symbol @code{t} or two strings, use
894 this customization type:
896 @example
897 (list file
898       (choice (const t)
899               (list :inline t string string)))
900 @end example
902 @noindent
903 If the user chooses the first alternative in the choice, then the
904 overall list has two elements and the second element is @code{t}.  If
905 the user chooses the second alternative, then the overall list has three
906 elements and the second and third must be strings.
908 @node Type Keywords
909 @subsection Type Keywords
911 You can specify keyword-argument pairs in a customization type after the
912 type name symbol.  Here are the keywords you can use, and their
913 meanings:
915 @table @code
916 @item :value @var{default}
917 This is used for a type that appears as an alternative inside of
918 @code{choice}; it specifies the default value to use, at first, if and
919 when the user selects this alternative with the menu in the
920 customization buffer.
922 Of course, if the actual value of the option fits this alternative, it
923 will appear showing the actual value, not @var{default}.
925 If @code{nil} is not a valid value for the alternative, then it is
926 essential to specify a valid default with @code{:value}.
928 @item :format @var{format-string}
929 This string will be inserted in the buffer to represent the value
930 corresponding to the type.  The following @samp{%} escapes are available
931 for use in @var{format-string}:
933 @table @samp
934 @item %[@var{button}%]
935 Display the text @var{button} marked as a button.  The @code{:action}
936 attribute specifies what the button will do if the user invokes it;
937 its value is a function which takes two arguments---the widget which
938 the button appears in, and the event.
940 There is no way to specify two different buttons with different
941 actions.
943 @item %@{@var{sample}%@}
944 Show @var{sample} in a special face specified by @code{:sample-face}.
946 @item %v
947 Substitute the item's value.  How the value is represented depends on
948 the kind of item, and (for variables) on the customization type.
950 @item %d
951 Substitute the item's documentation string.
953 @item %h
954 Like @samp{%d}, but if the documentation string is more than one line,
955 add an active field to control whether to show all of it or just the
956 first line.
958 @item %t
959 Substitute the tag here.  You specify the tag with the @code{:tag}
960 keyword.
962 @item %%
963 Display a literal @samp{%}.
964 @end table
966 @item :action @var{action}
967 Perform @var{action} if the user clicks on a button.
969 @item :button-face @var{face}
970 Use the face @var{face} (a face name or a list of face names) for button
971 text displayed with @samp{%[@dots{}%]}.
973 @item :button-prefix @var{prefix}
974 @itemx :button-suffix @var{suffix}
975 These specify the text to display before and after a button.
976 Each can be:
978 @table @asis
979 @item @code{nil}
980 No text is inserted.
982 @item a string
983 The string is inserted literally.
985 @item a symbol
986 The symbol's value is used.
987 @end table
989 @item :tag @var{tag}
990 Use @var{tag} (a string) as the tag for the value (or part of the value)
991 that corresponds to this type.
993 @item :doc @var{doc}
994 Use @var{doc} as the documentation string for this value (or part of the
995 value) that corresponds to this type.  In order for this to work, you
996 must specify a value for @code{:format}, and use @samp{%d} or @samp{%h}
997 in that value.
999 The usual reason to specify a documentation string for a type is to
1000 provide more information about the meanings of alternatives inside a
1001 @code{:choice} type or the parts of some other composite type.
1003 @item :help-echo @var{motion-doc}
1004 When you move to this item with @code{widget-forward} or
1005 @code{widget-backward}, it will display the string @var{motion-doc} in
1006 the echo area.  In addition, @var{motion-doc} is used as the mouse
1007 @code{help-echo} string and may actually be a function or form evaluated
1008 to yield a help string.  If it is a function, it is called with one
1009 argument, the widget.
1010 @xref{Text help-echo}.
1012 @item :match @var{function}
1013 Specify how to decide whether a value matches the type.  The
1014 corresponding value, @var{function}, should be a function that accepts
1015 two arguments, a widget and a value; it should return non-@code{nil} if
1016 the value is acceptable.
1018 @ignore
1019 @item :indent @var{columns}
1020 Indent this item by @var{columns} columns.  The indentation is used for
1021 @samp{%n}, and automatically for group names, for checklists and radio
1022 buttons, and for editable lists.  It affects the whole of the
1023 item except for the first line.
1025 @item :offset @var{columns}
1026 An integer indicating how many extra spaces to indent the subitems of
1027 this item.  By default, subitems are indented the same as their parent.
1029 @item :extra-offset
1030 An integer indicating how many extra spaces to add to this item's
1031 indentation, compared to its parent.
1033 @item :notify
1034 A function called each time the item or a subitem is changed.  The
1035 function is called with two or three arguments.  The first argument is
1036 the item itself, the second argument is the item that was changed, and
1037 the third argument is the event leading to the change, if any.
1039 @item :menu-tag
1040 A tag used in the menu when the widget is used as an option in a
1041 @code{menu-choice} widget.
1043 @item :menu-tag-get
1044 A function used for finding the tag when the widget is used as an option
1045 in a @code{menu-choice} widget.  By default, the tag used will be either the
1046 @code{:menu-tag} or @code{:tag} property if present, or the @code{princ}
1047 representation of the @code{:value} property if not.
1049 @item :validate
1050 A function which takes a widget as an argument, and return @code{nil}
1051 if the widget's current value is valid for the widget.  Otherwise, it
1052 should return the widget containing the invalid data, and set that
1053 widget's @code{:error} property to a string explaining the error.
1055 You can use the function @code{widget-children-validate} for this job;
1056 it tests that all children of @var{widget} are valid.
1058 @item :tab-order
1059 Specify the order in which widgets are traversed with
1060 @code{widget-forward} or @code{widget-backward}.  This is only partially
1061 implemented.
1063 @enumerate a
1064 @item
1065 Widgets with tabbing order @code{-1} are ignored.
1067 @item
1068 (Unimplemented) When on a widget with tabbing order @var{n}, go to the
1069 next widget in the buffer with tabbing order @var{n+1} or @code{nil},
1070 whichever comes first.
1072 @item
1073 When on a widget with no tabbing order specified, go to the next widget
1074 in the buffer with a positive tabbing order, or @code{nil}
1075 @end enumerate
1077 @item :parent
1078 The parent of a nested widget (e.g., a @code{menu-choice} item or an
1079 element of a @code{editable-list} widget).
1081 @item :sibling-args
1082 This keyword is only used for members of a @code{radio-button-choice} or
1083 @code{checklist}.  The value should be a list of extra keyword
1084 arguments, which will be used when creating the @code{radio-button} or
1085 @code{checkbox} associated with this item.
1086 @end ignore
1087 @end table
1089 @node Defining New Types
1090 @subsection Defining New Types
1092 In the previous sections we have described how to construct elaborate
1093 type specifications for @code{defcustom}.  In some cases you may want
1094 to give such a type specification a name.  The obvious case is when
1095 you are using the same type for many user options: rather than repeat
1096 the specification for each option, you can give the type specification
1097 a name, and use that name each @code{defcustom}.  The other case is
1098 when a user option's value is a recursive data structure.  To make it
1099 possible for a datatype to refer to itself, it needs to have a name.
1101 Since custom types are implemented as widgets, the way to define a new
1102 customize type is to define a new widget.  We are not going to describe
1103 the widget interface here in details, see @ref{Top, , Introduction,
1104 widget, The Emacs Widget Library}, for that.  Instead we are going to
1105 demonstrate the minimal functionality needed for defining new customize
1106 types by a simple example.
1108 @example
1109 (define-widget 'binary-tree-of-string 'lazy
1110   "A binary tree made of cons-cells and strings."
1111   :offset 4
1112   :tag "Node"
1113   :type '(choice (string :tag "Leaf" :value "")
1114                  (cons :tag "Interior"
1115                        :value ("" . "")
1116                        binary-tree-of-string
1117                        binary-tree-of-string)))
1119 (defcustom foo-bar ""
1120   "Sample variable holding a binary tree of strings."
1121   :type 'binary-tree-of-string)
1122 @end example
1124 The function to define a new widget is called @code{define-widget}.  The
1125 first argument is the symbol we want to make a new widget type.  The
1126 second argument is a symbol representing an existing widget, the new
1127 widget is going to be defined in terms of difference from the existing
1128 widget.  For the purpose of defining new customization types, the
1129 @code{lazy} widget is perfect, because it accepts a @code{:type} keyword
1130 argument with the same syntax as the keyword argument to
1131 @code{defcustom} with the same name.  The third argument is a
1132 documentation string for the new widget.  You will be able to see that
1133 string with the @kbd{M-x widget-browse @key{RET} binary-tree-of-string
1134 @key{RET}} command.
1136 After these mandatory arguments follow the keyword arguments.  The most
1137 important is @code{:type}, which describes the data type we want to match
1138 with this widget.  Here a @code{binary-tree-of-string} is described as
1139 being either a string, or a cons-cell whose car and cdr are themselves
1140 both @code{binary-tree-of-string}.  Note the reference to the widget
1141 type we are currently in the process of defining.  The @code{:tag}
1142 attribute is a string to name the widget in the user interface, and the
1143 @code{:offset} argument is there to ensure that child nodes are
1144 indented four spaces relative to the parent node, making the tree
1145 structure apparent in the customization buffer.
1147 The @code{defcustom} shows how the new widget can be used as an ordinary
1148 customization type.
1150 The reason for the name @code{lazy} is that the other composite
1151 widgets convert their inferior widgets to internal form when the
1152 widget is instantiated in a buffer.  This conversion is recursive, so
1153 the inferior widgets will convert @emph{their} inferior widgets.  If
1154 the data structure is itself recursive, this conversion is an infinite
1155 recursion.  The @code{lazy} widget prevents the recursion: it convert
1156 its @code{:type} argument only when needed.
1158 @ignore
1159    arch-tag: d1b8fad3-f48c-4ce4-a402-f73b5ef19bd2
1160 @end ignore