More doc updates.
[bpt/emacs.git] / doc / lispref / customize.texi
CommitLineData
b8d4c8d0
GM
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
ba318903 3@c Copyright (C) 1997-2014 Free Software Foundation, Inc.
b8d4c8d0 4@c See the file elisp.texi for copying conditions.
ecc6530d 5@node Customization
81927dd2 6@chapter Customization Settings
b8d4c8d0 7
81927dd2 8@cindex customization item
ed1f0bd3
CY
9 Users of Emacs can customize variables and faces without writing
10Lisp code, by using the Customize interface. @xref{Easy
11Customization,,, emacs, The GNU Emacs Manual}. This chapter describes
12how to define @dfn{customization items} that users can interact with
13through the Customize interface.
14
15 Customization items include customizable variables, which are
16defined with the
17@ifinfo
18@code{defcustom} macro (@pxref{Variable Definitions});
19@end ifinfo
20@ifnotinfo
21@code{defcustom} macro;
22@end ifnotinfo
23customizable faces, which are defined with @code{defface} (described
24separately in @ref{Defining Faces}); and @dfn{customization groups},
25defined with
26@ifinfo
27@code{defgroup} (@pxref{Group Definitions}),
28@end ifinfo
29@ifnotinfo
30@code{defgroup},
31@end ifnotinfo
32which act as containers for groups of related customization items.
b8d4c8d0
GM
33
34@menu
81927dd2
CY
35* Common Keywords:: Common keyword arguments for all kinds of
36 customization declarations.
37* Group Definitions:: Writing customization group definitions.
38* Variable Definitions:: Declaring user options.
39* Customization Types:: Specifying the type of a user option.
40* Applying Customizations:: Functions to apply customization settings.
41* Custom Themes:: Writing Custom themes.
b8d4c8d0
GM
42@end menu
43
44@node Common Keywords
45@section Common Item Keywords
46
47@cindex customization keywords
03988c98 48 The customization declarations that we will describe in the next few
ed1f0bd3
CY
49sections---@code{defcustom}, @code{defgroup}, etc.---all accept
50keyword arguments (@pxref{Constant Variables}) for specifying various
51information. This section describes keywords that apply to all types
52of customization declarations.
b8d4c8d0
GM
53
54 All of these keywords, except @code{:tag}, can be used more than once
55in a given item. Each use of the keyword has an independent effect.
56The keyword @code{:tag} is an exception because any given item can only
57display one name.
58
59@table @code
60@item :tag @var{label}
61@kindex tag@r{, customization keyword}
62Use @var{label}, a string, instead of the item's name, to label the
63item in customization menus and buffers. @strong{Don't use a tag
64which is substantially different from the item's real name; that would
0f631634 65cause confusion.}
b8d4c8d0
GM
66
67@kindex group@r{, customization keyword}
68@item :group @var{group}
69Put this customization item in group @var{group}. When you use
70@code{:group} in a @code{defgroup}, it makes the new group a subgroup of
71@var{group}.
72
73If you use this keyword more than once, you can put a single item into
74more than one group. Displaying any of those groups will show this
75item. Please don't overdo this, since the result would be annoying.
76
77@item :link @var{link-data}
78@kindex link@r{, customization keyword}
79Include an external link after the documentation string for this item.
22ff2cb8 80This is a sentence containing a button that references some
b8d4c8d0
GM
81other documentation.
82
83There are several alternatives you can use for @var{link-data}:
84
85@table @code
86@item (custom-manual @var{info-node})
87Link to an Info node; @var{info-node} is a string which specifies the
88node name, as in @code{"(emacs)Top"}. The link appears as
89@samp{[Manual]} in the customization buffer and enters the built-in
90Info reader on @var{info-node}.
91
92@item (info-link @var{info-node})
93Like @code{custom-manual} except that the link appears
94in the customization buffer with the Info node name.
95
96@item (url-link @var{url})
97Link to a web page; @var{url} is a string which specifies the
98@acronym{URL}. The link appears in the customization buffer as
99@var{url} and invokes the WWW browser specified by
100@code{browse-url-browser-function}.
101
102@item (emacs-commentary-link @var{library})
103Link to the commentary section of a library; @var{library} is a string
9800c5b0 104which specifies the library name. @xref{Library Headers}.
b8d4c8d0
GM
105
106@item (emacs-library-link @var{library})
107Link to an Emacs Lisp library file; @var{library} is a string which
108specifies the library name.
109
110@item (file-link @var{file})
111Link to a file; @var{file} is a string which specifies the name of the
112file to visit with @code{find-file} when the user invokes this link.
113
114@item (function-link @var{function})
115Link to the documentation of a function; @var{function} is a string
116which specifies the name of the function to describe with
117@code{describe-function} when the user invokes this link.
118
119@item (variable-link @var{variable})
120Link to the documentation of a variable; @var{variable} is a string
121which specifies the name of the variable to describe with
122@code{describe-variable} when the user invokes this link.
123
124@item (custom-group-link @var{group})
125Link to another customization group. Invoking it creates a new
126customization buffer for @var{group}.
127@end table
128
129You can specify the text to use in the customization buffer by adding
130@code{:tag @var{name}} after the first element of the @var{link-data};
131for example, @code{(info-link :tag "foo" "(emacs)Top")} makes a link to
132the Emacs manual which appears in the buffer as @samp{foo}.
133
03988c98 134You can use this keyword more than once, to add multiple links.
b8d4c8d0
GM
135
136@item :load @var{file}
137@kindex load@r{, customization keyword}
138Load file @var{file} (a string) before displaying this customization
f6de8a37
CY
139item (@pxref{Loading}). Loading is done with @code{load}, and only if
140the file is not already loaded.
b8d4c8d0
GM
141
142@item :require @var{feature}
143@kindex require@r{, customization keyword}
144Execute @code{(require '@var{feature})} when your saved customizations
145set the value of this item. @var{feature} should be a symbol.
146
147The most common reason to use @code{:require} is when a variable enables
148a feature such as a minor mode, and just setting the variable won't have
149any effect unless the code which implements the mode is loaded.
150
151@item :version @var{version}
152@kindex version@r{, customization keyword}
153This keyword specifies that the item was first introduced in Emacs
154version @var{version}, or that its default value was changed in that
155version. The value @var{version} must be a string.
156
157@item :package-version '(@var{package} . @var{version})
158@kindex package-version@r{, customization keyword}
159This keyword specifies that the item was first introduced in
160@var{package} version @var{version}, or that its meaning or default
03988c98
CY
161value was changed in that version. This keyword takes priority over
162@code{:version}.
b8d4c8d0 163
03988c98 164@var{package} should be the official name of the package, as a symbol
1df7defd 165(e.g., @code{MH-E}). @var{version} should be a string. If the
03988c98
CY
166package @var{package} is released as part of Emacs, @var{package} and
167@var{version} should appear in the value of
b8d4c8d0
GM
168@code{customize-package-emacs-version-alist}.
169@end table
170
171Packages distributed as part of Emacs that use the
172@code{:package-version} keyword must also update the
173@code{customize-package-emacs-version-alist} variable.
174
175@defvar customize-package-emacs-version-alist
176This alist provides a mapping for the versions of Emacs that are
177associated with versions of a package listed in the
ddff3351 178@code{:package-version} keyword. Its elements are:
b8d4c8d0
GM
179
180@example
181(@var{package} (@var{pversion} . @var{eversion})@dots{})
182@end example
183
184For each @var{package}, which is a symbol, there are one or more
185elements that contain a package version @var{pversion} with an
186associated Emacs version @var{eversion}. These versions are strings.
187For example, the MH-E package updates this alist with the following:
188
ddff3351
GM
189@c Must be small else too wide.
190@c FIXME obviously this is out of date (in the code).
b8d4c8d0
GM
191@smallexample
192(add-to-list 'customize-package-emacs-version-alist
193 '(MH-E ("6.0" . "22.1") ("6.1" . "22.1") ("7.0" . "22.1")
194 ("7.1" . "22.1") ("7.2" . "22.1") ("7.3" . "22.1")
195 ("7.4" . "22.1") ("8.0" . "22.1")))
196@end smallexample
197
198The value of @var{package} needs to be unique and it needs to match
199the @var{package} value appearing in the @code{:package-version}
35a30759 200keyword. Since the user might see the value in an error message, a good
b8d4c8d0
GM
201choice is the official name of the package, such as MH-E or Gnus.
202@end defvar
203
204@node Group Definitions
205@section Defining Customization Groups
206@cindex define customization group
207@cindex customization groups, defining
208
ed1f0bd3
CY
209 Each Emacs Lisp package should have one main customization group
210which contains all the options, faces and other groups in the package.
211If the package has a small number of options and faces, use just one
212group and put everything in it. When there are more than twenty or so
213options and faces, then you should structure them into subgroups, and
214put the subgroups under the package's main customization group. It is
215OK to put some of the options and faces in the package's main group
216alongside the subgroups.
b8d4c8d0
GM
217
218 The package's main or only group should be a member of one or more of
219the standard customization groups. (To display the full list of them,
220use @kbd{M-x customize}.) Choose one or more of them (but not too
221many), and add your group to each of them using the @code{:group}
222keyword.
223
224 The way to declare new customization groups is with @code{defgroup}.
225
226@defmac defgroup group members doc [keyword value]@dots{}
227Declare @var{group} as a customization group containing @var{members}.
228Do not quote the symbol @var{group}. The argument @var{doc} specifies
229the documentation string for the group.
230
231The argument @var{members} is a list specifying an initial set of
232customization items to be members of the group. However, most often
233@var{members} is @code{nil}, and you specify the group's members by
234using the @code{:group} keyword when defining those members.
235
236If you want to specify group members through @var{members}, each element
237should have the form @code{(@var{name} @var{widget})}. Here @var{name}
238is a symbol, and @var{widget} is a widget type for editing that symbol.
239Useful widgets are @code{custom-variable} for a variable,
240@code{custom-face} for a face, and @code{custom-group} for a group.
241
242When you introduce a new group into Emacs, use the @code{:version}
243keyword in the @code{defgroup}; then you need not use it for
244the individual members of the group.
245
246In addition to the common keywords (@pxref{Common Keywords}), you can
247also use this keyword in @code{defgroup}:
248
249@table @code
250@item :prefix @var{prefix}
251@kindex prefix@r{, @code{defgroup} keyword}
03988c98
CY
252If the name of an item in the group starts with @var{prefix}, and the
253customizable variable @code{custom-unlispify-remove-prefixes} is
254non-@code{nil}, the item's tag will omit @var{prefix}. A group can
255have any number of prefixes.
b8d4c8d0
GM
256@end table
257@end defmac
258
03988c98
CY
259@defopt custom-unlispify-remove-prefixes
260If this variable is non-@code{nil}, the prefixes specified by a
261group's @code{:prefix} keyword are omitted from tag names, whenever
262the user customizes the group.
b8d4c8d0 263
1df7defd 264The default value is @code{nil}, i.e., the prefix-discarding feature
03988c98
CY
265is disabled. This is because discarding prefixes often leads to
266confusing names for options and faces.
267@end defopt
b8d4c8d0
GM
268
269@node Variable Definitions
270@section Defining Customization Variables
271@cindex define customization options
ed1f0bd3
CY
272@cindex customizable variables, how to define
273@cindex user options, how to define
274
275 @dfn{Customizable variables}, also called @dfn{user options}, are
276global Lisp variables whose values can be set through the Customize
277interface. Unlike other global variables, which are defined with
278@code{defvar} (@pxref{Defining Variables}), customizable variables are
279defined using the @code{defcustom} macro. In addition to calling
280@code{defvar} as a subroutine, @code{defcustom} states how the
281variable should be displayed in the Customize interface, the values it
282is allowed to take, etc.
b8d4c8d0 283
b8d4c8d0 284@defmac defcustom option standard doc [keyword value]@dots{}
1df7defd 285This macro declares @var{option} as a user option (i.e., a
03988c98 286customizable variable). You should not quote @var{option}.
0f631634 287
b8d4c8d0
GM
288The argument @var{standard} is an expression that specifies the
289standard value for @var{option}. Evaluating the @code{defcustom} form
81c7d631
CY
290evaluates @var{standard}, but does not necessarily bind the option to
291that value. If @var{option} already has a default value, it is left
292unchanged. If the user has already saved a customization for
293@var{option}, the user's customized value is installed as the default
294value. Otherwise, the result of evaluating @var{standard} is
295installed as the default value.
296
297Like @code{defvar}, this macro marks @code{option} as a special
298variable, meaning that it should always be dynamically bound. If
299@var{option} is already lexically bound, that lexical binding remains
300in effect until the binding construct exits. @xref{Variable Scoping}.
b8d4c8d0
GM
301
302The expression @var{standard} can be evaluated at various other times,
303too---whenever the customization facility needs to know @var{option}'s
304standard value. So be sure to use an expression which is harmless to
03988c98 305evaluate at any time.
b8d4c8d0 306
1021c761
CY
307The argument @var{doc} specifies the documentation string for the
308variable.
309
1cbae532
SM
310If a @code{defcustom} does not specify any @code{:group}, the last group
311defined with @code{defgroup} in the same file will be used. This way, most
312@code{defcustom} do not need an explicit @code{:group}.
b8d4c8d0 313
b8d4c8d0
GM
314When you evaluate a @code{defcustom} form with @kbd{C-M-x} in Emacs Lisp
315mode (@code{eval-defun}), a special feature of @code{eval-defun}
316arranges to set the variable unconditionally, without testing whether
c6c08d3f
GM
317its value is void. (The same feature applies to @code{defvar},
318@pxref{Defining Variables}.) Using @code{eval-defun} on a defcustom
319that is already defined calls the @code{:set} function (see below),
320if there is one.
437706cd 321
03988c98
CY
322If you put a @code{defcustom} in a pre-loaded Emacs Lisp file
323(@pxref{Building Emacs}), the standard value installed at dump time
1df7defd 324might be incorrect, e.g., because another variable that it depends on
03988c98 325has not been assigned the right value yet. In that case, use
437706cd 326@code{custom-reevaluate-setting}, described below, to re-evaluate the
03988c98 327standard value after Emacs starts up.
b8d4c8d0
GM
328@end defmac
329
ed1f0bd3
CY
330 In addition to the keywords listed in @ref{Common Keywords}, this
331macro accepts the following keywords:
b8d4c8d0
GM
332
333@table @code
334@item :type @var{type}
335Use @var{type} as the data type for this option. It specifies which
ed1f0bd3
CY
336values are legitimate, and how to display the value
337(@pxref{Customization Types}).
b8d4c8d0
GM
338
339@item :options @var{value-list}
340@kindex options@r{, @code{defcustom} keyword}
341Specify the list of reasonable values for use in this
342option. The user is not restricted to using only these values, but they
343are offered as convenient alternatives.
344
345This is meaningful only for certain types, currently including
346@code{hook}, @code{plist} and @code{alist}. See the definition of the
347individual types for a description of how to use @code{:options}.
348
349@item :set @var{setfunction}
350@kindex set@r{, @code{defcustom} keyword}
351Specify @var{setfunction} as the way to change the value of this
81927dd2 352option when using the Customize interface. The function
8a20ca4c
LMI
353@var{setfunction} should take two arguments, a symbol (the option
354name) and the new value, and should do whatever is necessary to update
355the value properly for this option (which may not mean simply setting
356the option as a Lisp variable). The default for @var{setfunction} is
357@code{set-default}.
b8d4c8d0 358
03988c98
CY
359If you specify this keyword, the variable's documentation string
360should describe how to do the same job in hand-written Lisp code.
361
b8d4c8d0
GM
362@item :get @var{getfunction}
363@kindex get@r{, @code{defcustom} keyword}
364Specify @var{getfunction} as the way to extract the value of this
365option. The function @var{getfunction} should take one argument, a
366symbol, and should return whatever customize should use as the
367``current value'' for that symbol (which need not be the symbol's Lisp
368value). The default is @code{default-value}.
369
370You have to really understand the workings of Custom to use
371@code{:get} correctly. It is meant for values that are treated in
372Custom as variables but are not actually stored in Lisp variables. It
03988c98 373is almost surely a mistake to specify @var{getfunction} for a value
b8d4c8d0
GM
374that really is stored in a Lisp variable.
375
376@item :initialize @var{function}
377@kindex initialize@r{, @code{defcustom} keyword}
378@var{function} should be a function used to initialize the variable
379when the @code{defcustom} is evaluated. It should take two arguments,
380the option name (a symbol) and the value. Here are some predefined
381functions meant for use in this way:
382
383@table @code
384@item custom-initialize-set
385Use the variable's @code{:set} function to initialize the variable, but
386do not reinitialize it if it is already non-void.
387
388@item custom-initialize-default
389Like @code{custom-initialize-set}, but use the function
390@code{set-default} to set the variable, instead of the variable's
391@code{:set} function. This is the usual choice for a variable whose
392@code{:set} function enables or disables a minor mode; with this choice,
393defining the variable will not call the minor mode function, but
394customizing the variable will do so.
395
396@item custom-initialize-reset
397Always use the @code{:set} function to initialize the variable. If
398the variable is already non-void, reset it by calling the @code{:set}
399function using the current value (returned by the @code{:get} method).
400This is the default @code{:initialize} function.
401
402@item custom-initialize-changed
403Use the @code{:set} function to initialize the variable, if it is
404already set or has been customized; otherwise, just use
405@code{set-default}.
406
407@item custom-initialize-safe-set
408@itemx custom-initialize-safe-default
409These functions behave like @code{custom-initialize-set}
410(@code{custom-initialize-default}, respectively), but catch errors.
411If an error occurs during initialization, they set the variable to
03988c98
CY
412@code{nil} using @code{set-default}, and signal no error.
413
414These functions are meant for options defined in pre-loaded files,
415where the @var{standard} expression may signal an error because some
416required variable or function is not yet defined. The value normally
417gets updated in @file{startup.el}, ignoring the value computed by
418@code{defcustom}. After startup, if one unsets the value and
419reevaluates the @code{defcustom}, the @var{standard} expression can be
420evaluated without error.
b8d4c8d0
GM
421@end table
422
db21122c
GM
423@item :risky @var{value}
424@kindex risky@r{, @code{defcustom} keyword}
95ddd36f 425Set the variable's @code{risky-local-variable} property to
0f631634 426@var{value} (@pxref{File Local Variables}).
db21122c
GM
427
428@item :safe @var{function}
429@kindex safe@r{, @code{defcustom} keyword}
95ddd36f 430Set the variable's @code{safe-local-variable} property to
0f631634 431@var{function} (@pxref{File Local Variables}).
db21122c 432
b8d4c8d0
GM
433@item :set-after @var{variables}
434@kindex set-after@r{, @code{defcustom} keyword}
435When setting variables according to saved customizations, make sure to
ddff3351 436set the variables @var{variables} before this one; i.e., delay
b8d4c8d0
GM
437setting this variable until after those others have been handled. Use
438@code{:set-after} if setting this variable won't work properly unless
439those other variables already have their intended values.
440@end table
441
0f631634
CY
442 It is useful to specify the @code{:require} keyword for an option
443that ``turns on'' a certain feature. This causes Emacs to load the
444feature, if it is not already loaded, whenever the option is set.
445@xref{Common Keywords}. Here is an example, from the library
446@file{saveplace.el}:
b8d4c8d0
GM
447
448@example
449(defcustom save-place nil
450 "Non-nil means automatically save place in each file..."
451 :type 'boolean
452 :require 'saveplace
453 :group 'save-place)
454@end example
455
456If a customization item has a type such as @code{hook} or
457@code{alist}, which supports @code{:options}, you can add additional
458values to the list from outside the @code{defcustom} declaration by
459calling @code{custom-add-frequent-value}. For example, if you define a
460function @code{my-lisp-mode-initialization} intended to be called from
461@code{emacs-lisp-mode-hook}, you might want to add that to the list of
462reasonable values for @code{emacs-lisp-mode-hook}, but not by editing
463its definition. You can do it thus:
464
465@example
466(custom-add-frequent-value 'emacs-lisp-mode-hook
467 'my-lisp-mode-initialization)
468@end example
469
470@defun custom-add-frequent-value symbol value
471For the customization option @var{symbol}, add @var{value} to the
472list of reasonable values.
473
474The precise effect of adding a value depends on the customization type
475of @var{symbol}.
476@end defun
477
478Internally, @code{defcustom} uses the symbol property
479@code{standard-value} to record the expression for the standard value,
0f631634
CY
480@code{saved-value} to record the value saved by the user with the
481customization buffer, and @code{customized-value} to record the value
482set by the user with the customization buffer, but not saved.
f02f19bd
CY
483@xref{Symbol Properties}. These properties are lists, the car of
484which is an expression that evaluates to the value.
b8d4c8d0 485
437706cd 486@defun custom-reevaluate-setting symbol
0f631634 487This function re-evaluates the standard value of @var{symbol}, which
03988c98 488should be a user option declared via @code{defcustom}. If the
0f631634 489variable was customized, this function re-evaluates the saved value
03988c98
CY
490instead. Then it sets the user option to that value (using the
491option's @code{:set} property if that is defined).
492
493This is useful for customizable options that are defined before their
494value could be computed correctly. For example, during startup Emacs
495calls this function for some user options that were defined in
496pre-loaded Emacs Lisp files, but whose initial values depend on
497information available only at run-time.
437706cd
EZ
498@end defun
499
1021c761
CY
500@defun custom-variable-p arg
501This function returns non-@code{nil} if @var{arg} is a customizable
502variable. A customizable variable is either a variable that has a
503@code{standard-value} or @code{custom-autoload} property (usually
504meaning it was declared with @code{defcustom}), or an alias for
505another customizable variable.
506@end defun
507
b8d4c8d0
GM
508@node Customization Types
509@section Customization Types
510
511@cindex customization types
512 When you define a user option with @code{defcustom}, you must specify
513its @dfn{customization type}. That is a Lisp object which describes (1)
514which values are legitimate and (2) how to display the value in the
515customization buffer for editing.
516
517@kindex type@r{, @code{defcustom} keyword}
518 You specify the customization type in @code{defcustom} with the
519@code{:type} keyword. The argument of @code{:type} is evaluated, but
520only once when the @code{defcustom} is executed, so it isn't useful
521for the value to vary. Normally we use a quoted constant. For
522example:
523
524@example
525(defcustom diff-command "diff"
526 "The command to use to run diff."
527 :type '(string)
528 :group 'diff)
529@end example
530
531 In general, a customization type is a list whose first element is a
532symbol, one of the customization type names defined in the following
533sections. After this symbol come a number of arguments, depending on
534the symbol. Between the type symbol and its arguments, you can
535optionally write keyword-value pairs (@pxref{Type Keywords}).
536
0f631634 537 Some type symbols do not use any arguments; those are called
b8d4c8d0
GM
538@dfn{simple types}. For a simple type, if you do not use any
539keyword-value pairs, you can omit the parentheses around the type
540symbol. For example just @code{string} as a customization type is
541equivalent to @code{(string)}.
542
0f631634
CY
543 All customization types are implemented as widgets; see @ref{Top, ,
544Introduction, widget, The Emacs Widget Library}, for details.
545
b8d4c8d0 546@menu
3deead93 547* Simple Types:: Simple customization types: sexp, integer, etc.
51d9979c
GM
548* Composite Types:: Build new types from other types or data.
549* Splicing into Lists:: Splice elements into list with @code{:inline}.
550* Type Keywords:: Keyword-argument pairs in a customization type.
551* Defining New Types:: Give your type a name.
b8d4c8d0
GM
552@end menu
553
b8d4c8d0
GM
554@node Simple Types
555@subsection Simple Types
556
e1161b06
CY
557 This section describes all the simple customization types. For
558several of these customization types, the customization widget
559provides inline completion with @kbd{C-M-i} or @kbd{M-@key{TAB}}.
b8d4c8d0
GM
560
561@table @code
562@item sexp
e1161b06
CY
563The value may be any Lisp object that can be printed and read back.
564You can use @code{sexp} as a fall-back for any option, if you don't
565want to take the time to work out a more specific type to use.
b8d4c8d0
GM
566
567@item integer
e1161b06 568The value must be an integer.
b8d4c8d0
GM
569
570@item number
e1161b06 571The value must be a number (floating point or integer).
b8d4c8d0
GM
572
573@item float
e1161b06 574The value must be a floating point number.
b8d4c8d0
GM
575
576@item string
e1161b06
CY
577The value must be a string. The customization buffer shows the string
578without delimiting @samp{"} characters or @samp{\} quotes.
b8d4c8d0
GM
579
580@item regexp
581Like @code{string} except that the string must be a valid regular
582expression.
583
584@item character
585The value must be a character code. A character code is actually an
586integer, but this type shows the value by inserting the character in the
587buffer, rather than by showing the number.
588
589@item file
e1161b06 590The value must be a file name. The widget provides completion.
b8d4c8d0
GM
591
592@item (file :must-match t)
e1161b06
CY
593The value must be a file name for an existing file. The widget
594provides completion.
b8d4c8d0
GM
595
596@item directory
e1161b06 597The value must be a directory name. The widget provides completion.
b8d4c8d0
GM
598
599@item hook
e1161b06
CY
600The value must be a list of functions. This customization type is
601used for hook variables. You can use the @code{:options} keyword in a
602hook variable's @code{defcustom} to specify a list of functions
603recommended for use in the hook; @xref{Variable Definitions}.
b8d4c8d0 604
3deead93
CY
605@item symbol
606The value must be a symbol. It appears in the customization buffer as
e1161b06 607the symbol name. The widget provides completion.
b8d4c8d0 608
3deead93 609@item function
e1161b06
CY
610The value must be either a lambda expression or a function name. The
611widget provides completion for function names.
b8d4c8d0 612
3deead93 613@item variable
e1161b06 614The value must be a variable name. The widget provides completion.
3deead93
CY
615
616@item face
e1161b06
CY
617The value must be a symbol which is a face name. The widget provides
618completion.
3deead93
CY
619
620@item boolean
621The value is boolean---either @code{nil} or @code{t}. Note that by
622using @code{choice} and @code{const} together (see the next section),
623you can specify that the value must be @code{nil} or @code{t}, but also
624specify the text to describe each value in a way that fits the specific
625meaning of the alternative.
626
6e55f03e
CY
627@item key-sequence
628The value is a key sequence. The customization buffer shows the key
629sequence using the same syntax as the @kbd{kbd} function. @xref{Key
630Sequences}.
631
3deead93
CY
632@item coding-system
633The value must be a coding-system name, and you can do completion with
634@kbd{M-@key{TAB}}.
635
636@item color
e1161b06
CY
637The value must be a valid color name. The widget provides completion
638for color names, as well as a sample and a button for selecting a
2bb0eca1 639color name from a list of color names shown in a @file{*Colors*}
e1161b06 640buffer.
3deead93
CY
641@end table
642
643@node Composite Types
644@subsection Composite Types
645@cindex composite types (customization)
646
647 When none of the simple types is appropriate, you can use composite
648types, which build new types from other types or from specified data.
649The specified types or data are called the @dfn{arguments} of the
650composite type. The composite type normally looks like this:
651
652@example
653(@var{constructor} @var{arguments}@dots{})
654@end example
b8d4c8d0
GM
655
656@noindent
3deead93
CY
657but you can also add keyword-value pairs before the arguments, like
658this:
659
660@example
661(@var{constructor} @r{@{}@var{keyword} @var{value}@r{@}}@dots{} @var{arguments}@dots{})
662@end example
663
664 Here is a table of constructors and how to use them to write
665composite types:
666
667@table @code
668@item (cons @var{car-type} @var{cdr-type})
669The value must be a cons cell, its @sc{car} must fit @var{car-type}, and
670its @sc{cdr} must fit @var{cdr-type}. For example, @code{(cons string
671symbol)} is a customization type which matches values such as
672@code{("foo" . foo)}.
673
e1161b06
CY
674In the customization buffer, the @sc{car} and @sc{cdr} are displayed
675and edited separately, each according to their specified type.
3deead93
CY
676
677@item (list @var{element-types}@dots{})
678The value must be a list with exactly as many elements as the
679@var{element-types} given; and each element must fit the
680corresponding @var{element-type}.
681
682For example, @code{(list integer string function)} describes a list of
683three elements; the first element must be an integer, the second a
684string, and the third a function.
685
686In the customization buffer, each element is displayed and edited
687separately, according to the type specified for it.
688
689@item (group @var{element-types}@dots{})
690This works like @code{list} except for the formatting
691of text in the Custom buffer. @code{list} labels each
692element value with its tag; @code{group} does not.
693
694@item (vector @var{element-types}@dots{})
695Like @code{list} except that the value must be a vector instead of a
696list. The elements work the same as in @code{list}.
697
698@item (alist :key-type @var{key-type} :value-type @var{value-type})
699The value must be a list of cons-cells, the @sc{car} of each cell
700representing a key of customization type @var{key-type}, and the
701@sc{cdr} of the same cell representing a value of customization type
702@var{value-type}. The user can add and delete key/value pairs, and
703edit both the key and the value of each pair.
704
705If omitted, @var{key-type} and @var{value-type} default to
706@code{sexp}.
b8d4c8d0
GM
707
708The user can add any key matching the specified key type, but you can
709give some keys a preferential treatment by specifying them with the
710@code{:options} (see @ref{Variable Definitions}). The specified keys
711will always be shown in the customize buffer (together with a suitable
712value), with a checkbox to include or exclude or disable the key/value
713pair from the alist. The user will not be able to edit the keys
714specified by the @code{:options} keyword argument.
715
716The argument to the @code{:options} keywords should be a list of
717specifications for reasonable keys in the alist. Ordinarily, they are
e1161b06 718simply atoms, which stand for themselves. For example:
b8d4c8d0 719
ddff3351 720@example
b8d4c8d0 721:options '("foo" "bar" "baz")
ddff3351 722@end example
b8d4c8d0
GM
723
724@noindent
725specifies that there are three ``known'' keys, namely @code{"foo"},
726@code{"bar"} and @code{"baz"}, which will always be shown first.
727
728You may want to restrict the value type for specific keys, for
729example, the value associated with the @code{"bar"} key can only be an
730integer. You can specify this by using a list instead of an atom in
731the list. The first element will specify the key, like before, while
732the second element will specify the value type. For example:
733
ddff3351 734@example
b8d4c8d0 735:options '("foo" ("bar" integer) "baz")
ddff3351 736@end example
b8d4c8d0
GM
737
738Finally, you may want to change how the key is presented. By default,
739the key is simply shown as a @code{const}, since the user cannot change
740the special keys specified with the @code{:options} keyword. However,
741you may want to use a more specialized type for presenting the key, like
742@code{function-item} if you know it is a symbol with a function binding.
743This is done by using a customization type specification instead of a
744symbol for the key.
745
ddff3351 746@example
84f4a531
CY
747:options '("foo"
748 ((function-item some-function) integer)
b8d4c8d0 749 "baz")
ddff3351 750@end example
b8d4c8d0
GM
751
752Many alists use lists with two elements, instead of cons cells. For
753example,
754
ddff3351 755@example
84f4a531
CY
756(defcustom list-alist
757 '(("foo" 1) ("bar" 2) ("baz" 3))
b8d4c8d0 758 "Each element is a list of the form (KEY VALUE).")
ddff3351 759@end example
b8d4c8d0
GM
760
761@noindent
762instead of
763
ddff3351 764@example
84f4a531
CY
765(defcustom cons-alist
766 '(("foo" . 1) ("bar" . 2) ("baz" . 3))
b8d4c8d0 767 "Each element is a cons-cell (KEY . VALUE).")
ddff3351 768@end example
b8d4c8d0
GM
769
770Because of the way lists are implemented on top of cons cells, you can
771treat @code{list-alist} in the example above as a cons cell alist, where
772the value type is a list with a single element containing the real
773value.
774
ddff3351 775@example
b8d4c8d0
GM
776(defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
777 "Each element is a list of the form (KEY VALUE)."
778 :type '(alist :value-type (group integer)))
ddff3351 779@end example
b8d4c8d0
GM
780
781The @code{group} widget is used here instead of @code{list} only because
782the formatting is better suited for the purpose.
783
784Similarly, you can have alists with more values associated with each
785key, using variations of this trick:
786
ddff3351 787@example
b8d4c8d0
GM
788(defcustom person-data '(("brian" 50 t)
789 ("dorith" 55 nil)
790 ("ken" 52 t))
791 "Alist of basic info about people.
792Each element has the form (NAME AGE MALE-FLAG)."
793 :type '(alist :value-type (group integer boolean)))
ddff3351 794@end example
b8d4c8d0 795
3deead93
CY
796@item (plist :key-type @var{key-type} :value-type @var{value-type})
797This customization type is similar to @code{alist} (see above), except
798that (i) the information is stored as a property list,
799(@pxref{Property Lists}), and (ii) @var{key-type}, if omitted,
800defaults to @code{symbol} rather than @code{sexp}.
b8d4c8d0
GM
801
802@item (choice @var{alternative-types}@dots{})
e1161b06
CY
803The value must fit one of @var{alternative-types}. For example,
804@code{(choice integer string)} allows either an integer or a string.
b8d4c8d0
GM
805
806In the customization buffer, the user selects an alternative
807using a menu, and can then edit the value in the usual way for that
808alternative.
809
810Normally the strings in this menu are determined automatically from the
811choices; however, you can specify different strings for the menu by
812including the @code{:tag} keyword in the alternatives. For example, if
813an integer stands for a number of spaces, while a string is text to use
814verbatim, you might write the customization type this way,
815
816@example
817(choice (integer :tag "Number of spaces")
818 (string :tag "Literal text"))
819@end example
820
821@noindent
822so that the menu offers @samp{Number of spaces} and @samp{Literal text}.
823
824In any alternative for which @code{nil} is not a valid value, other than
825a @code{const}, you should specify a valid default for that alternative
826using the @code{:value} keyword. @xref{Type Keywords}.
827
828If some values are covered by more than one of the alternatives,
829customize will choose the first alternative that the value fits. This
830means you should always list the most specific types first, and the
831most general last. Here's an example of proper usage:
832
833@example
834(choice (const :tag "Off" nil)
835 symbol (sexp :tag "Other"))
836@end example
837
838@noindent
839This way, the special value @code{nil} is not treated like other
840symbols, and symbols are not treated like other Lisp expressions.
841
842@item (radio @var{element-types}@dots{})
843This is similar to @code{choice}, except that the choices are displayed
844using `radio buttons' rather than a menu. This has the advantage of
845displaying documentation for the choices when applicable and so is often
846a good choice for a choice between constant functions
847(@code{function-item} customization types).
848
849@item (const @var{value})
850The value must be @var{value}---nothing else is allowed.
851
852The main use of @code{const} is inside of @code{choice}. For example,
853@code{(choice integer (const nil))} allows either an integer or
854@code{nil}.
855
856@code{:tag} is often used with @code{const}, inside of @code{choice}.
857For example,
858
859@example
860(choice (const :tag "Yes" t)
861 (const :tag "No" nil)
862 (const :tag "Ask" foo))
863@end example
864
865@noindent
866describes a variable for which @code{t} means yes, @code{nil} means no,
16152b76 867and @code{foo} means ``ask''.
b8d4c8d0
GM
868
869@item (other @var{value})
870This alternative can match any Lisp value, but if the user chooses this
871alternative, that selects the value @var{value}.
872
873The main use of @code{other} is as the last element of @code{choice}.
874For example,
875
876@example
877(choice (const :tag "Yes" t)
878 (const :tag "No" nil)
879 (other :tag "Ask" foo))
880@end example
881
882@noindent
883describes a variable for which @code{t} means yes, @code{nil} means no,
16152b76 884and anything else means ``ask''. If the user chooses @samp{Ask} from
b8d4c8d0
GM
885the menu of alternatives, that specifies the value @code{foo}; but any
886other value (not @code{t}, @code{nil} or @code{foo}) displays as
887@samp{Ask}, just like @code{foo}.
888
889@item (function-item @var{function})
890Like @code{const}, but used for values which are functions. This
891displays the documentation string as well as the function name.
892The documentation string is either the one you specify with
893@code{:doc}, or @var{function}'s own documentation string.
894
895@item (variable-item @var{variable})
896Like @code{const}, but used for values which are variable names. This
897displays the documentation string as well as the variable name. The
898documentation string is either the one you specify with @code{:doc}, or
899@var{variable}'s own documentation string.
900
901@item (set @var{types}@dots{})
902The value must be a list, and each element of the list must match one of
903the @var{types} specified.
904
905This appears in the customization buffer as a checklist, so that each of
906@var{types} may have either one corresponding element or none. It is
907not possible to specify two different elements that match the same one
908of @var{types}. For example, @code{(set integer symbol)} allows one
909integer and/or one symbol in the list; it does not allow multiple
910integers or multiple symbols. As a result, it is rare to use
911nonspecific types such as @code{integer} in a @code{set}.
912
913Most often, the @var{types} in a @code{set} are @code{const} types, as
914shown here:
915
916@example
917(set (const :bold) (const :italic))
918@end example
919
920Sometimes they describe possible elements in an alist:
921
922@example
923(set (cons :tag "Height" (const height) integer)
924 (cons :tag "Width" (const width) integer))
925@end example
926
927@noindent
928That lets the user specify a height value optionally
929and a width value optionally.
930
931@item (repeat @var{element-type})
932The value must be a list and each element of the list must fit the type
933@var{element-type}. This appears in the customization buffer as a
934list of elements, with @samp{[INS]} and @samp{[DEL]} buttons for adding
935more elements or removing elements.
936
937@item (restricted-sexp :match-alternatives @var{criteria})
938This is the most general composite type construct. The value may be
939any Lisp object that satisfies one of @var{criteria}. @var{criteria}
940should be a list, and each element should be one of these
941possibilities:
942
943@itemize @bullet
944@item
945A predicate---that is, a function of one argument that has no side
946effects, and returns either @code{nil} or non-@code{nil} according to
947the argument. Using a predicate in the list says that objects for which
948the predicate returns non-@code{nil} are acceptable.
949
950@item
951A quoted constant---that is, @code{'@var{object}}. This sort of element
952in the list says that @var{object} itself is an acceptable value.
953@end itemize
954
955For example,
956
957@example
958(restricted-sexp :match-alternatives
959 (integerp 't 'nil))
960@end example
961
962@noindent
963allows integers, @code{t} and @code{nil} as legitimate values.
964
965The customization buffer shows all legitimate values using their read
966syntax, and the user edits them textually.
967@end table
968
969 Here is a table of the keywords you can use in keyword-value pairs
970in a composite type:
971
972@table @code
973@item :tag @var{tag}
974Use @var{tag} as the name of this alternative, for user communication
975purposes. This is useful for a type that appears inside of a
976@code{choice}.
977
978@item :match-alternatives @var{criteria}
979@kindex match-alternatives@r{, customization keyword}
980Use @var{criteria} to match possible values. This is used only in
981@code{restricted-sexp}.
982
983@item :args @var{argument-list}
984@kindex args@r{, customization keyword}
985Use the elements of @var{argument-list} as the arguments of the type
986construct. For instance, @code{(const :args (foo))} is equivalent to
987@code{(const foo)}. You rarely need to write @code{:args} explicitly,
988because normally the arguments are recognized automatically as
989whatever follows the last keyword-value pair.
990@end table
991
992@node Splicing into Lists
993@subsection Splicing into Lists
994
995 The @code{:inline} feature lets you splice a variable number of
e1161b06
CY
996elements into the middle of a @code{list} or @code{vector}
997customization type. You use it by adding @code{:inline t} to a type
998specification which is contained in a @code{list} or @code{vector}
999specification.
1000
1001 Normally, each entry in a @code{list} or @code{vector} type
1002specification describes a single element type. But when an entry
1003contains @code{:inline t}, the value it matches is merged directly
1004into the containing sequence. For example, if the entry matches a
1005list with three elements, those become three elements of the overall
1006sequence. This is analogous to @samp{,@@} in a backquote construct
1007(@pxref{Backquote}).
b8d4c8d0
GM
1008
1009 For example, to specify a list whose first element must be @code{baz}
1010and whose remaining arguments should be zero or more of @code{foo} and
1011@code{bar}, use this customization type:
1012
1013@example
1014(list (const baz) (set :inline t (const foo) (const bar)))
1015@end example
1016
1017@noindent
1018This matches values such as @code{(baz)}, @code{(baz foo)}, @code{(baz bar)}
1019and @code{(baz foo bar)}.
1020
1021 When the element-type is a @code{choice}, you use @code{:inline} not
1022in the @code{choice} itself, but in (some of) the alternatives of the
1023@code{choice}. For example, to match a list which must start with a
1024file name, followed either by the symbol @code{t} or two strings, use
1025this customization type:
1026
1027@example
1028(list file
1029 (choice (const t)
1030 (list :inline t string string)))
1031@end example
1032
1033@noindent
1034If the user chooses the first alternative in the choice, then the
1035overall list has two elements and the second element is @code{t}. If
1036the user chooses the second alternative, then the overall list has three
1037elements and the second and third must be strings.
1038
1039@node Type Keywords
1040@subsection Type Keywords
1041
1042You can specify keyword-argument pairs in a customization type after the
1043type name symbol. Here are the keywords you can use, and their
1044meanings:
1045
1046@table @code
1047@item :value @var{default}
0ec389b9
LMI
1048Provide a default value.
1049
1050If @code{nil} is not a valid value for the alternative, then it is
1051essential to specify a valid default with @code{:value}.
1052
1053If you use this for a type that appears as an alternative inside of
b8d4c8d0
GM
1054@code{choice}; it specifies the default value to use, at first, if and
1055when the user selects this alternative with the menu in the
1056customization buffer.
1057
1058Of course, if the actual value of the option fits this alternative, it
1059will appear showing the actual value, not @var{default}.
1060
b8d4c8d0
GM
1061@item :format @var{format-string}
1062@kindex format@r{, customization keyword}
1063This string will be inserted in the buffer to represent the value
1064corresponding to the type. The following @samp{%} escapes are available
1065for use in @var{format-string}:
1066
1067@table @samp
1068@item %[@var{button}%]
1069Display the text @var{button} marked as a button. The @code{:action}
1070attribute specifies what the button will do if the user invokes it;
1071its value is a function which takes two arguments---the widget which
1072the button appears in, and the event.
1073
1074There is no way to specify two different buttons with different
1075actions.
1076
1077@item %@{@var{sample}%@}
1078Show @var{sample} in a special face specified by @code{:sample-face}.
1079
1080@item %v
1081Substitute the item's value. How the value is represented depends on
1082the kind of item, and (for variables) on the customization type.
1083
1084@item %d
1085Substitute the item's documentation string.
1086
1087@item %h
1088Like @samp{%d}, but if the documentation string is more than one line,
22ff2cb8 1089add a button to control whether to show all of it or just the first line.
b8d4c8d0
GM
1090
1091@item %t
1092Substitute the tag here. You specify the tag with the @code{:tag}
1093keyword.
1094
1095@item %%
1096Display a literal @samp{%}.
1097@end table
1098
1099@item :action @var{action}
1100@kindex action@r{, customization keyword}
1101Perform @var{action} if the user clicks on a button.
1102
1103@item :button-face @var{face}
1104@kindex button-face@r{, customization keyword}
1105Use the face @var{face} (a face name or a list of face names) for button
1106text displayed with @samp{%[@dots{}%]}.
1107
1108@item :button-prefix @var{prefix}
1109@itemx :button-suffix @var{suffix}
1110@kindex button-prefix@r{, customization keyword}
1111@kindex button-suffix@r{, customization keyword}
1112These specify the text to display before and after a button.
1113Each can be:
1114
1115@table @asis
1116@item @code{nil}
1117No text is inserted.
1118
1119@item a string
1120The string is inserted literally.
1121
1122@item a symbol
1123The symbol's value is used.
1124@end table
1125
1126@item :tag @var{tag}
1127Use @var{tag} (a string) as the tag for the value (or part of the value)
1128that corresponds to this type.
1129
1130@item :doc @var{doc}
1131@kindex doc@r{, customization keyword}
1132Use @var{doc} as the documentation string for this value (or part of the
1133value) that corresponds to this type. In order for this to work, you
1134must specify a value for @code{:format}, and use @samp{%d} or @samp{%h}
1135in that value.
1136
1137The usual reason to specify a documentation string for a type is to
1138provide more information about the meanings of alternatives inside a
1139@code{:choice} type or the parts of some other composite type.
1140
1141@item :help-echo @var{motion-doc}
1142@kindex help-echo@r{, customization keyword}
1143When you move to this item with @code{widget-forward} or
1144@code{widget-backward}, it will display the string @var{motion-doc} in
1145the echo area. In addition, @var{motion-doc} is used as the mouse
1146@code{help-echo} string and may actually be a function or form evaluated
1147to yield a help string. If it is a function, it is called with one
1148argument, the widget.
1149
1150@item :match @var{function}
1151@kindex match@r{, customization keyword}
1152Specify how to decide whether a value matches the type. The
1153corresponding value, @var{function}, should be a function that accepts
1154two arguments, a widget and a value; it should return non-@code{nil} if
1155the value is acceptable.
1156
72b7e664
RS
1157@item :validate @var{function}
1158Specify a validation function for input. @var{function} takes a
1159widget as an argument, and should return @code{nil} if the widget's
1160current value is valid for the widget. Otherwise, it should return
1161the widget containing the invalid data, and set that widget's
1162@code{:error} property to a string explaining the error.
1163
b8d4c8d0
GM
1164@ignore
1165@item :indent @var{columns}
1166Indent this item by @var{columns} columns. The indentation is used for
1167@samp{%n}, and automatically for group names, for checklists and radio
1168buttons, and for editable lists. It affects the whole of the
1169item except for the first line.
1170
72b7e664
RS
1171@item :offset @var{extra}
1172Indent the subitems of this item @var{extra} columns more than this
1173item itself. By default, subitems are indented the same as their
1174parent.
b8d4c8d0 1175
72b7e664
RS
1176@item :extra-offset @var{n}
1177Add @var{n} extra spaces to this item's indentation, compared to its
1178parent's indentation.
b8d4c8d0 1179
72b7e664
RS
1180@item :notify @var{function}
1181Call @var{function} each time the item or a subitem is changed. The
1182function gets two or three arguments. The first argument is the item
1183itself, the second argument is the item that was changed, and the
1184third argument is the event leading to the change, if any.
b8d4c8d0 1185
72b7e664
RS
1186@item :menu-tag @var{tag-string}
1187Use @var{tag-string} in the menu when the widget is used as an option
1188in a @code{menu-choice} widget.
b8d4c8d0
GM
1189
1190@item :menu-tag-get
1191A function used for finding the tag when the widget is used as an option
1192in a @code{menu-choice} widget. By default, the tag used will be either the
1193@code{:menu-tag} or @code{:tag} property if present, or the @code{princ}
1194representation of the @code{:value} property if not.
1195
b8d4c8d0
GM
1196@item :tab-order
1197Specify the order in which widgets are traversed with
1198@code{widget-forward} or @code{widget-backward}. This is only partially
1199implemented.
1200
1201@enumerate a
1202@item
1203Widgets with tabbing order @code{-1} are ignored.
1204
1205@item
1206(Unimplemented) When on a widget with tabbing order @var{n}, go to the
1207next widget in the buffer with tabbing order @var{n+1} or @code{nil},
1208whichever comes first.
1209
1210@item
1211When on a widget with no tabbing order specified, go to the next widget
1212in the buffer with a positive tabbing order, or @code{nil}
1213@end enumerate
1214
1215@item :parent
1216The parent of a nested widget (e.g., a @code{menu-choice} item or an
1217element of a @code{editable-list} widget).
1218
1219@item :sibling-args
1220This keyword is only used for members of a @code{radio-button-choice} or
1221@code{checklist}. The value should be a list of extra keyword
1222arguments, which will be used when creating the @code{radio-button} or
1223@code{checkbox} associated with this item.
1224@end ignore
1225@end table
1226
1227@node Defining New Types
1228@subsection Defining New Types
1229
1230In the previous sections we have described how to construct elaborate
1231type specifications for @code{defcustom}. In some cases you may want
1232to give such a type specification a name. The obvious case is when
1233you are using the same type for many user options: rather than repeat
1234the specification for each option, you can give the type specification
1235a name, and use that name each @code{defcustom}. The other case is
1236when a user option's value is a recursive data structure. To make it
1237possible for a datatype to refer to itself, it needs to have a name.
1238
1239Since custom types are implemented as widgets, the way to define a new
1240customize type is to define a new widget. We are not going to describe
1241the widget interface here in details, see @ref{Top, , Introduction,
1242widget, The Emacs Widget Library}, for that. Instead we are going to
1243demonstrate the minimal functionality needed for defining new customize
1244types by a simple example.
1245
1246@example
1247(define-widget 'binary-tree-of-string 'lazy
1248 "A binary tree made of cons-cells and strings."
1249 :offset 4
1250 :tag "Node"
1251 :type '(choice (string :tag "Leaf" :value "")
1252 (cons :tag "Interior"
1253 :value ("" . "")
1254 binary-tree-of-string
1255 binary-tree-of-string)))
1256
1257(defcustom foo-bar ""
1258 "Sample variable holding a binary tree of strings."
1259 :type 'binary-tree-of-string)
1260@end example
1261
1262The function to define a new widget is called @code{define-widget}. The
1263first argument is the symbol we want to make a new widget type. The
1264second argument is a symbol representing an existing widget, the new
1265widget is going to be defined in terms of difference from the existing
1266widget. For the purpose of defining new customization types, the
1267@code{lazy} widget is perfect, because it accepts a @code{:type} keyword
1268argument with the same syntax as the keyword argument to
1269@code{defcustom} with the same name. The third argument is a
1270documentation string for the new widget. You will be able to see that
1271string with the @kbd{M-x widget-browse @key{RET} binary-tree-of-string
1272@key{RET}} command.
1273
1274After these mandatory arguments follow the keyword arguments. The most
1275important is @code{:type}, which describes the data type we want to match
1276with this widget. Here a @code{binary-tree-of-string} is described as
1277being either a string, or a cons-cell whose car and cdr are themselves
1278both @code{binary-tree-of-string}. Note the reference to the widget
1279type we are currently in the process of defining. The @code{:tag}
1280attribute is a string to name the widget in the user interface, and the
1281@code{:offset} argument is there to ensure that child nodes are
1282indented four spaces relative to the parent node, making the tree
1283structure apparent in the customization buffer.
1284
1285The @code{defcustom} shows how the new widget can be used as an ordinary
1286customization type.
1287
1288The reason for the name @code{lazy} is that the other composite
1289widgets convert their inferior widgets to internal form when the
1290widget is instantiated in a buffer. This conversion is recursive, so
1291the inferior widgets will convert @emph{their} inferior widgets. If
1292the data structure is itself recursive, this conversion is an infinite
1293recursion. The @code{lazy} widget prevents the recursion: it convert
1294its @code{:type} argument only when needed.
81927dd2
CY
1295
1296@node Applying Customizations
1297@section Applying Customizations
1298
1299The following functions are responsible for installing the user's
1300customization settings for variables and faces, respectively. When
1301the user invokes @samp{Save for future sessions} in the Customize
1302interface, that takes effect by writing a @code{custom-set-variables}
1303and/or a @code{custom-set-faces} form into the custom file, to be
ddff3351 1304evaluated the next time Emacs starts.
81927dd2
CY
1305
1306@defun custom-set-variables &rest args
1307This function installs the variable customizations specified by
1308@var{args}. Each argument in @var{args} should have the form
1309
1310@example
1311(@var{var} @var{expression} [@var{now} [@var{request} [@var{comment}]]])
1312@end example
1313
1314@noindent
1315@var{var} is a variable name (a symbol), and @var{expression} is an
1316expression which evaluates to the desired customized value.
1317
1318If the @code{defcustom} form for @var{var} has been evaluated prior to
1319this @code{custom-set-variables} call, @var{expression} is immediately
1320evaluated, and the variable's value is set to the result. Otherwise,
1321@var{expression} is stored into the variable's @code{saved-value}
1322property, to be evaluated when the relevant @code{defcustom} is called
1323(usually when the library defining that variable is loaded into
1324Emacs).
1325
1326The @var{now}, @var{request}, and @var{comment} entries are for
1327internal use only, and may be omitted. @var{now}, if non-@code{nil},
1328means to set the variable's value now, even if the variable's
1329@code{defcustom} form has not been evaluated. @var{request} is a list
1330of features to be loaded immediately (@pxref{Named Features}).
1331@var{comment} is a string describing the customization.
1332@end defun
1333
1334@defun custom-set-faces &rest args
1335This function installs the face customizations specified by
1336@var{args}. Each argument in @var{args} should have the form
1337
1338@example
1339(@var{face} @var{spec} [@var{now} [@var{comment}]])
1340@end example
1341
1342@noindent
1343@var{face} is a face name (a symbol), and @var{spec} is the customized
1344face specification for that face (@pxref{Defining Faces}).
1345
1346The @var{now} and @var{comment} entries are for internal use only, and
1347may be omitted. @var{now}, if non-@code{nil}, means to install the
1348face specification now, even if the @code{defface} form has not been
1349evaluated. @var{comment} is a string describing the customization.
1350@end defun
1351
1352@node Custom Themes
1353@section Custom Themes
1354
1355 @dfn{Custom themes} are collections of settings that can be enabled
1356or disabled as a unit. @xref{Custom Themes,,, emacs, The GNU Emacs
1357Manual}. Each Custom theme is defined by an Emacs Lisp source file,
1358which should follow the conventions described in this section.
1359(Instead of writing a Custom theme by hand, you can also create one
1360using a Customize-like interface; @pxref{Creating Custom Themes,,,
1361emacs, The GNU Emacs Manual}.)
1362
1363 A Custom theme file should be named @file{@var{foo}-theme.el}, where
1364@var{foo} is the theme name. The first Lisp form in the file should
1365be a call to @code{deftheme}, and the last form should be a call to
1366@code{provide-theme}.
1367
1368@defmac deftheme theme &optional doc
1369This macro declares @var{theme} (a symbol) as the name of a Custom
03ed9e82 1370theme. The optional argument @var{doc} should be a string describing
81927dd2 1371the theme; this is the description shown when the user invokes the
03ed9e82
CY
1372@code{describe-theme} command or types @kbd{?} in the @samp{*Custom
1373Themes*} buffer.
81927dd2 1374
ddff3351
GM
1375Two special theme names are disallowed (using them causes an error):
1376@code{user} is a ``dummy'' theme that stores the user's direct
1377customization settings, and @code{changed} is a ``dummy'' theme that
1378stores changes made outside of the Customize system.
81927dd2
CY
1379@end defmac
1380
1381@defmac provide-theme theme
1382This macro declares that the theme named @var{theme} has been fully
1383specified.
1384@end defmac
1385
03ed9e82
CY
1386 In between @code{deftheme} and @code{provide-theme} are Lisp forms
1387specifying the theme settings: usually a call to
81927dd2 1388@code{custom-theme-set-variables} and/or a call to
03ed9e82 1389@code{custom-theme-set-faces}.
81927dd2
CY
1390
1391@defun custom-theme-set-variables theme &rest args
03ed9e82
CY
1392This function specifies the Custom theme @var{theme}'s variable
1393settings. @var{theme} should be a symbol. Each argument in
1394@var{args} should be a list of the form
81927dd2
CY
1395
1396@example
1397(@var{var} @var{expression} [@var{now} [@var{request} [@var{comment}]]])
1398@end example
1399
1400@noindent
1401where the list entries have the same meanings as in
1402@code{custom-set-variables}. @xref{Applying Customizations}.
1403@end defun
1404
1405@defun custom-theme-set-faces theme &rest args
03ed9e82
CY
1406This function specifies the Custom theme @var{theme}'s face settings.
1407@var{theme} should be a symbol. Each argument in @var{args} should be
1408a list of the form
81927dd2
CY
1409
1410@example
1411(@var{face} @var{spec} [@var{now} [@var{comment}]])
1412@end example
1413
1414@noindent
1415where the list entries have the same meanings as in
1416@code{custom-set-faces}. @xref{Applying Customizations}.
1417@end defun
1418
03ed9e82
CY
1419 In theory, a theme file can also contain other Lisp forms, which
1420would be evaluated when loading the theme, but that is ``bad form''.
1421To protect against loading themes containing malicious code, Emacs
1422displays the source file and asks for confirmation from the user
1423before loading any non-built-in theme for the first time.
1424
1425 The following functions are useful for programmatically enabling and
ddff3351 1426disabling themes:
03ed9e82
CY
1427
1428@defun custom-theme-p theme
1429This function return a non-@code{nil} value if @var{theme} (a symbol)
1df7defd 1430is the name of a Custom theme (i.e., a Custom theme which has been
03ed9e82
CY
1431loaded into Emacs, whether or not the theme is enabled). Otherwise,
1432it returns @code{nil}.
1433@end defun
1434
18874304
CY
1435@defvar custom-known-themes
1436The value of this variable is a list of themes loaded into Emacs.
1437Each theme is represented by a Lisp symbol (the theme name). The
1438default value of this variable is a list containing two ``dummy''
1439themes: @code{(user changed)}. The @code{changed} theme stores
1440settings made before any Custom themes are applied (e.g., variables
1441set outside of Customize). The @code{user} theme stores settings the
1442user has customized and saved. Any additional themes declared with
1443the @code{deftheme} macro are added to the front of this list.
1444@end defvar
1445
03ed9e82
CY
1446@deffn Command load-theme theme &optional no-confirm no-enable
1447This function loads the Custom theme named @var{theme} from its source
1448file, looking for the source file in the directories specified by the
1449variable @code{custom-theme-load-path}. @xref{Custom Themes,,, emacs,
ddff3351
GM
1450The GNU Emacs Manual}. It also @dfn{enables} the theme (unless the
1451optional argument @var{no-enable} is non-@code{nil}), causing its
1452variable and face settings to take effect. It prompts the user for
1453confirmation before loading the theme, unless the optional argument
1454@var{no-confirm} is non-@code{nil}.
03ed9e82
CY
1455@end deffn
1456
1457@deffn Command enable-theme theme
1458This function enables the Custom theme named @var{theme}. It signals
1459an error if no such theme has been loaded.
1460@end deffn
1461
1462@deffn Command disable-theme theme
1463This function disables the Custom theme named @var{theme}. The theme
1464remains loaded, so that a subsequent call to @code{enable-theme} will
1465re-enable it.
1466@end deffn