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