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