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