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