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