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