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