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