]> code.delx.au - gnu-emacs/blob - doc/lispref/customize.texi
Merge changes from emacs-24; up to 2012-04-26T02:03:19Z!ueno@unixuser.org
[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
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"
706 ((function-item some-function) integer)
707 "baz")
708 @end example
709
710 Many alists use lists with two elements, instead of cons cells. For
711 example,
712
713 @example
714 (defcustom list-alist
715 '(("foo" 1) ("bar" 2) ("baz" 3))
716 "Each element is a list of the form (KEY VALUE).")
717 @end example
718
719 @noindent
720 instead of
721
722 @example
723 (defcustom cons-alist
724 '(("foo" . 1) ("bar" . 2) ("baz" . 3))
725 "Each element is a cons-cell (KEY . VALUE).")
726 @end example
727
728 Because of the way lists are implemented on top of cons cells, you can
729 treat @code{list-alist} in the example above as a cons cell alist, where
730 the value type is a list with a single element containing the real
731 value.
732
733 @example
734 (defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
735 "Each element is a list of the form (KEY VALUE)."
736 :type '(alist :value-type (group integer)))
737 @end example
738
739 The @code{group} widget is used here instead of @code{list} only because
740 the formatting is better suited for the purpose.
741
742 Similarly, you can have alists with more values associated with each
743 key, using variations of this trick:
744
745 @example
746 (defcustom person-data '(("brian" 50 t)
747 ("dorith" 55 nil)
748 ("ken" 52 t))
749 "Alist of basic info about people.
750 Each element has the form (NAME AGE MALE-FLAG)."
751 :type '(alist :value-type (group integer boolean)))
752 @end example
753
754 @item (plist :key-type @var{key-type} :value-type @var{value-type})
755 This customization type is similar to @code{alist} (see above), except
756 that (i) the information is stored as a property list,
757 (@pxref{Property Lists}), and (ii) @var{key-type}, if omitted,
758 defaults to @code{symbol} rather than @code{sexp}.
759
760 @item (choice @var{alternative-types}@dots{})
761 The value must fit one of @var{alternative-types}. For example,
762 @code{(choice integer string)} allows either an integer or a string.
763
764 In the customization buffer, the user selects an alternative
765 using a menu, and can then edit the value in the usual way for that
766 alternative.
767
768 Normally the strings in this menu are determined automatically from the
769 choices; however, you can specify different strings for the menu by
770 including the @code{:tag} keyword in the alternatives. For example, if
771 an integer stands for a number of spaces, while a string is text to use
772 verbatim, you might write the customization type this way,
773
774 @example
775 (choice (integer :tag "Number of spaces")
776 (string :tag "Literal text"))
777 @end example
778
779 @noindent
780 so that the menu offers @samp{Number of spaces} and @samp{Literal text}.
781
782 In any alternative for which @code{nil} is not a valid value, other than
783 a @code{const}, you should specify a valid default for that alternative
784 using the @code{:value} keyword. @xref{Type Keywords}.
785
786 If some values are covered by more than one of the alternatives,
787 customize will choose the first alternative that the value fits. This
788 means you should always list the most specific types first, and the
789 most general last. Here's an example of proper usage:
790
791 @example
792 (choice (const :tag "Off" nil)
793 symbol (sexp :tag "Other"))
794 @end example
795
796 @noindent
797 This way, the special value @code{nil} is not treated like other
798 symbols, and symbols are not treated like other Lisp expressions.
799
800 @item (radio @var{element-types}@dots{})
801 This is similar to @code{choice}, except that the choices are displayed
802 using `radio buttons' rather than a menu. This has the advantage of
803 displaying documentation for the choices when applicable and so is often
804 a good choice for a choice between constant functions
805 (@code{function-item} customization types).
806
807 @item (const @var{value})
808 The value must be @var{value}---nothing else is allowed.
809
810 The main use of @code{const} is inside of @code{choice}. For example,
811 @code{(choice integer (const nil))} allows either an integer or
812 @code{nil}.
813
814 @code{:tag} is often used with @code{const}, inside of @code{choice}.
815 For example,
816
817 @example
818 (choice (const :tag "Yes" t)
819 (const :tag "No" nil)
820 (const :tag "Ask" foo))
821 @end example
822
823 @noindent
824 describes a variable for which @code{t} means yes, @code{nil} means no,
825 and @code{foo} means ``ask''.
826
827 @item (other @var{value})
828 This alternative can match any Lisp value, but if the user chooses this
829 alternative, that selects the value @var{value}.
830
831 The main use of @code{other} is as the last element of @code{choice}.
832 For example,
833
834 @example
835 (choice (const :tag "Yes" t)
836 (const :tag "No" nil)
837 (other :tag "Ask" foo))
838 @end example
839
840 @noindent
841 describes a variable for which @code{t} means yes, @code{nil} means no,
842 and anything else means ``ask''. If the user chooses @samp{Ask} from
843 the menu of alternatives, that specifies the value @code{foo}; but any
844 other value (not @code{t}, @code{nil} or @code{foo}) displays as
845 @samp{Ask}, just like @code{foo}.
846
847 @item (function-item @var{function})
848 Like @code{const}, but used for values which are functions. This
849 displays the documentation string as well as the function name.
850 The documentation string is either the one you specify with
851 @code{:doc}, or @var{function}'s own documentation string.
852
853 @item (variable-item @var{variable})
854 Like @code{const}, but used for values which are variable names. This
855 displays the documentation string as well as the variable name. The
856 documentation string is either the one you specify with @code{:doc}, or
857 @var{variable}'s own documentation string.
858
859 @item (set @var{types}@dots{})
860 The value must be a list, and each element of the list must match one of
861 the @var{types} specified.
862
863 This appears in the customization buffer as a checklist, so that each of
864 @var{types} may have either one corresponding element or none. It is
865 not possible to specify two different elements that match the same one
866 of @var{types}. For example, @code{(set integer symbol)} allows one
867 integer and/or one symbol in the list; it does not allow multiple
868 integers or multiple symbols. As a result, it is rare to use
869 nonspecific types such as @code{integer} in a @code{set}.
870
871 Most often, the @var{types} in a @code{set} are @code{const} types, as
872 shown here:
873
874 @example
875 (set (const :bold) (const :italic))
876 @end example
877
878 Sometimes they describe possible elements in an alist:
879
880 @example
881 (set (cons :tag "Height" (const height) integer)
882 (cons :tag "Width" (const width) integer))
883 @end example
884
885 @noindent
886 That lets the user specify a height value optionally
887 and a width value optionally.
888
889 @item (repeat @var{element-type})
890 The value must be a list and each element of the list must fit the type
891 @var{element-type}. This appears in the customization buffer as a
892 list of elements, with @samp{[INS]} and @samp{[DEL]} buttons for adding
893 more elements or removing elements.
894
895 @item (restricted-sexp :match-alternatives @var{criteria})
896 This is the most general composite type construct. The value may be
897 any Lisp object that satisfies one of @var{criteria}. @var{criteria}
898 should be a list, and each element should be one of these
899 possibilities:
900
901 @itemize @bullet
902 @item
903 A predicate---that is, a function of one argument that has no side
904 effects, and returns either @code{nil} or non-@code{nil} according to
905 the argument. Using a predicate in the list says that objects for which
906 the predicate returns non-@code{nil} are acceptable.
907
908 @item
909 A quoted constant---that is, @code{'@var{object}}. This sort of element
910 in the list says that @var{object} itself is an acceptable value.
911 @end itemize
912
913 For example,
914
915 @example
916 (restricted-sexp :match-alternatives
917 (integerp 't 'nil))
918 @end example
919
920 @noindent
921 allows integers, @code{t} and @code{nil} as legitimate values.
922
923 The customization buffer shows all legitimate values using their read
924 syntax, and the user edits them textually.
925 @end table
926
927 Here is a table of the keywords you can use in keyword-value pairs
928 in a composite type:
929
930 @table @code
931 @item :tag @var{tag}
932 Use @var{tag} as the name of this alternative, for user communication
933 purposes. This is useful for a type that appears inside of a
934 @code{choice}.
935
936 @item :match-alternatives @var{criteria}
937 @kindex match-alternatives@r{, customization keyword}
938 Use @var{criteria} to match possible values. This is used only in
939 @code{restricted-sexp}.
940
941 @item :args @var{argument-list}
942 @kindex args@r{, customization keyword}
943 Use the elements of @var{argument-list} as the arguments of the type
944 construct. For instance, @code{(const :args (foo))} is equivalent to
945 @code{(const foo)}. You rarely need to write @code{:args} explicitly,
946 because normally the arguments are recognized automatically as
947 whatever follows the last keyword-value pair.
948 @end table
949
950 @node Splicing into Lists
951 @subsection Splicing into Lists
952
953 The @code{:inline} feature lets you splice a variable number of
954 elements into the middle of a @code{list} or @code{vector}
955 customization type. You use it by adding @code{:inline t} to a type
956 specification which is contained in a @code{list} or @code{vector}
957 specification.
958
959 Normally, each entry in a @code{list} or @code{vector} type
960 specification describes a single element type. But when an entry
961 contains @code{:inline t}, the value it matches is merged directly
962 into the containing sequence. For example, if the entry matches a
963 list with three elements, those become three elements of the overall
964 sequence. This is analogous to @samp{,@@} in a backquote construct
965 (@pxref{Backquote}).
966
967 For example, to specify a list whose first element must be @code{baz}
968 and whose remaining arguments should be zero or more of @code{foo} and
969 @code{bar}, use this customization type:
970
971 @example
972 (list (const baz) (set :inline t (const foo) (const bar)))
973 @end example
974
975 @noindent
976 This matches values such as @code{(baz)}, @code{(baz foo)}, @code{(baz bar)}
977 and @code{(baz foo bar)}.
978
979 When the element-type is a @code{choice}, you use @code{:inline} not
980 in the @code{choice} itself, but in (some of) the alternatives of the
981 @code{choice}. For example, to match a list which must start with a
982 file name, followed either by the symbol @code{t} or two strings, use
983 this customization type:
984
985 @example
986 (list file
987 (choice (const t)
988 (list :inline t string string)))
989 @end example
990
991 @noindent
992 If the user chooses the first alternative in the choice, then the
993 overall list has two elements and the second element is @code{t}. If
994 the user chooses the second alternative, then the overall list has three
995 elements and the second and third must be strings.
996
997 @node Type Keywords
998 @subsection Type Keywords
999
1000 You can specify keyword-argument pairs in a customization type after the
1001 type name symbol. Here are the keywords you can use, and their
1002 meanings:
1003
1004 @table @code
1005 @item :value @var{default}
1006 Provide a default value.
1007
1008 If @code{nil} is not a valid value for the alternative, then it is
1009 essential to specify a valid default with @code{:value}.
1010
1011 If you use this for a type that appears as an alternative inside of
1012 @code{choice}; it specifies the default value to use, at first, if and
1013 when the user selects this alternative with the menu in the
1014 customization buffer.
1015
1016 Of course, if the actual value of the option fits this alternative, it
1017 will appear showing the actual value, not @var{default}.
1018
1019 @item :format @var{format-string}
1020 @kindex format@r{, customization keyword}
1021 This string will be inserted in the buffer to represent the value
1022 corresponding to the type. The following @samp{%} escapes are available
1023 for use in @var{format-string}:
1024
1025 @table @samp
1026 @item %[@var{button}%]
1027 Display the text @var{button} marked as a button. The @code{:action}
1028 attribute specifies what the button will do if the user invokes it;
1029 its value is a function which takes two arguments---the widget which
1030 the button appears in, and the event.
1031
1032 There is no way to specify two different buttons with different
1033 actions.
1034
1035 @item %@{@var{sample}%@}
1036 Show @var{sample} in a special face specified by @code{:sample-face}.
1037
1038 @item %v
1039 Substitute the item's value. How the value is represented depends on
1040 the kind of item, and (for variables) on the customization type.
1041
1042 @item %d
1043 Substitute the item's documentation string.
1044
1045 @item %h
1046 Like @samp{%d}, but if the documentation string is more than one line,
1047 add an active field to control whether to show all of it or just the
1048 first line.
1049
1050 @item %t
1051 Substitute the tag here. You specify the tag with the @code{:tag}
1052 keyword.
1053
1054 @item %%
1055 Display a literal @samp{%}.
1056 @end table
1057
1058 @item :action @var{action}
1059 @kindex action@r{, customization keyword}
1060 Perform @var{action} if the user clicks on a button.
1061
1062 @item :button-face @var{face}
1063 @kindex button-face@r{, customization keyword}
1064 Use the face @var{face} (a face name or a list of face names) for button
1065 text displayed with @samp{%[@dots{}%]}.
1066
1067 @item :button-prefix @var{prefix}
1068 @itemx :button-suffix @var{suffix}
1069 @kindex button-prefix@r{, customization keyword}
1070 @kindex button-suffix@r{, customization keyword}
1071 These specify the text to display before and after a button.
1072 Each can be:
1073
1074 @table @asis
1075 @item @code{nil}
1076 No text is inserted.
1077
1078 @item a string
1079 The string is inserted literally.
1080
1081 @item a symbol
1082 The symbol's value is used.
1083 @end table
1084
1085 @item :tag @var{tag}
1086 Use @var{tag} (a string) as the tag for the value (or part of the value)
1087 that corresponds to this type.
1088
1089 @item :doc @var{doc}
1090 @kindex doc@r{, customization keyword}
1091 Use @var{doc} as the documentation string for this value (or part of the
1092 value) that corresponds to this type. In order for this to work, you
1093 must specify a value for @code{:format}, and use @samp{%d} or @samp{%h}
1094 in that value.
1095
1096 The usual reason to specify a documentation string for a type is to
1097 provide more information about the meanings of alternatives inside a
1098 @code{:choice} type or the parts of some other composite type.
1099
1100 @item :help-echo @var{motion-doc}
1101 @kindex help-echo@r{, customization keyword}
1102 When you move to this item with @code{widget-forward} or
1103 @code{widget-backward}, it will display the string @var{motion-doc} in
1104 the echo area. In addition, @var{motion-doc} is used as the mouse
1105 @code{help-echo} string and may actually be a function or form evaluated
1106 to yield a help string. If it is a function, it is called with one
1107 argument, the widget.
1108
1109 @item :match @var{function}
1110 @kindex match@r{, customization keyword}
1111 Specify how to decide whether a value matches the type. The
1112 corresponding value, @var{function}, should be a function that accepts
1113 two arguments, a widget and a value; it should return non-@code{nil} if
1114 the value is acceptable.
1115
1116 @item :validate @var{function}
1117 Specify a validation function for input. @var{function} takes a
1118 widget as an argument, and should return @code{nil} if the widget's
1119 current value is valid for the widget. Otherwise, it should return
1120 the widget containing the invalid data, and set that widget's
1121 @code{:error} property to a string explaining the error.
1122
1123 @ignore
1124 @item :indent @var{columns}
1125 Indent this item by @var{columns} columns. The indentation is used for
1126 @samp{%n}, and automatically for group names, for checklists and radio
1127 buttons, and for editable lists. It affects the whole of the
1128 item except for the first line.
1129
1130 @item :offset @var{extra}
1131 Indent the subitems of this item @var{extra} columns more than this
1132 item itself. By default, subitems are indented the same as their
1133 parent.
1134
1135 @item :extra-offset @var{n}
1136 Add @var{n} extra spaces to this item's indentation, compared to its
1137 parent's indentation.
1138
1139 @item :notify @var{function}
1140 Call @var{function} each time the item or a subitem is changed. The
1141 function gets two or three arguments. The first argument is the item
1142 itself, the second argument is the item that was changed, and the
1143 third argument is the event leading to the change, if any.
1144
1145 @item :menu-tag @var{tag-string}
1146 Use @var{tag-string} in the menu when the widget is used as an option
1147 in a @code{menu-choice} widget.
1148
1149 @item :menu-tag-get
1150 A function used for finding the tag when the widget is used as an option
1151 in a @code{menu-choice} widget. By default, the tag used will be either the
1152 @code{:menu-tag} or @code{:tag} property if present, or the @code{princ}
1153 representation of the @code{:value} property if not.
1154
1155 @item :tab-order
1156 Specify the order in which widgets are traversed with
1157 @code{widget-forward} or @code{widget-backward}. This is only partially
1158 implemented.
1159
1160 @enumerate a
1161 @item
1162 Widgets with tabbing order @code{-1} are ignored.
1163
1164 @item
1165 (Unimplemented) When on a widget with tabbing order @var{n}, go to the
1166 next widget in the buffer with tabbing order @var{n+1} or @code{nil},
1167 whichever comes first.
1168
1169 @item
1170 When on a widget with no tabbing order specified, go to the next widget
1171 in the buffer with a positive tabbing order, or @code{nil}
1172 @end enumerate
1173
1174 @item :parent
1175 The parent of a nested widget (e.g., a @code{menu-choice} item or an
1176 element of a @code{editable-list} widget).
1177
1178 @item :sibling-args
1179 This keyword is only used for members of a @code{radio-button-choice} or
1180 @code{checklist}. The value should be a list of extra keyword
1181 arguments, which will be used when creating the @code{radio-button} or
1182 @code{checkbox} associated with this item.
1183 @end ignore
1184 @end table
1185
1186 @node Defining New Types
1187 @subsection Defining New Types
1188
1189 In the previous sections we have described how to construct elaborate
1190 type specifications for @code{defcustom}. In some cases you may want
1191 to give such a type specification a name. The obvious case is when
1192 you are using the same type for many user options: rather than repeat
1193 the specification for each option, you can give the type specification
1194 a name, and use that name each @code{defcustom}. The other case is
1195 when a user option's value is a recursive data structure. To make it
1196 possible for a datatype to refer to itself, it needs to have a name.
1197
1198 Since custom types are implemented as widgets, the way to define a new
1199 customize type is to define a new widget. We are not going to describe
1200 the widget interface here in details, see @ref{Top, , Introduction,
1201 widget, The Emacs Widget Library}, for that. Instead we are going to
1202 demonstrate the minimal functionality needed for defining new customize
1203 types by a simple example.
1204
1205 @example
1206 (define-widget 'binary-tree-of-string 'lazy
1207 "A binary tree made of cons-cells and strings."
1208 :offset 4
1209 :tag "Node"
1210 :type '(choice (string :tag "Leaf" :value "")
1211 (cons :tag "Interior"
1212 :value ("" . "")
1213 binary-tree-of-string
1214 binary-tree-of-string)))
1215
1216 (defcustom foo-bar ""
1217 "Sample variable holding a binary tree of strings."
1218 :type 'binary-tree-of-string)
1219 @end example
1220
1221 The function to define a new widget is called @code{define-widget}. The
1222 first argument is the symbol we want to make a new widget type. The
1223 second argument is a symbol representing an existing widget, the new
1224 widget is going to be defined in terms of difference from the existing
1225 widget. For the purpose of defining new customization types, the
1226 @code{lazy} widget is perfect, because it accepts a @code{:type} keyword
1227 argument with the same syntax as the keyword argument to
1228 @code{defcustom} with the same name. The third argument is a
1229 documentation string for the new widget. You will be able to see that
1230 string with the @kbd{M-x widget-browse @key{RET} binary-tree-of-string
1231 @key{RET}} command.
1232
1233 After these mandatory arguments follow the keyword arguments. The most
1234 important is @code{:type}, which describes the data type we want to match
1235 with this widget. Here a @code{binary-tree-of-string} is described as
1236 being either a string, or a cons-cell whose car and cdr are themselves
1237 both @code{binary-tree-of-string}. Note the reference to the widget
1238 type we are currently in the process of defining. The @code{:tag}
1239 attribute is a string to name the widget in the user interface, and the
1240 @code{:offset} argument is there to ensure that child nodes are
1241 indented four spaces relative to the parent node, making the tree
1242 structure apparent in the customization buffer.
1243
1244 The @code{defcustom} shows how the new widget can be used as an ordinary
1245 customization type.
1246
1247 The reason for the name @code{lazy} is that the other composite
1248 widgets convert their inferior widgets to internal form when the
1249 widget is instantiated in a buffer. This conversion is recursive, so
1250 the inferior widgets will convert @emph{their} inferior widgets. If
1251 the data structure is itself recursive, this conversion is an infinite
1252 recursion. The @code{lazy} widget prevents the recursion: it convert
1253 its @code{:type} argument only when needed.
1254
1255 @node Applying Customizations
1256 @section Applying Customizations
1257
1258 The following functions are responsible for installing the user's
1259 customization settings for variables and faces, respectively. When
1260 the user invokes @samp{Save for future sessions} in the Customize
1261 interface, that takes effect by writing a @code{custom-set-variables}
1262 and/or a @code{custom-set-faces} form into the custom file, to be
1263 evaluated the next time Emacs starts.
1264
1265 @defun custom-set-variables &rest args
1266 This function installs the variable customizations specified by
1267 @var{args}. Each argument in @var{args} should have the form
1268
1269 @example
1270 (@var{var} @var{expression} [@var{now} [@var{request} [@var{comment}]]])
1271 @end example
1272
1273 @noindent
1274 @var{var} is a variable name (a symbol), and @var{expression} is an
1275 expression which evaluates to the desired customized value.
1276
1277 If the @code{defcustom} form for @var{var} has been evaluated prior to
1278 this @code{custom-set-variables} call, @var{expression} is immediately
1279 evaluated, and the variable's value is set to the result. Otherwise,
1280 @var{expression} is stored into the variable's @code{saved-value}
1281 property, to be evaluated when the relevant @code{defcustom} is called
1282 (usually when the library defining that variable is loaded into
1283 Emacs).
1284
1285 The @var{now}, @var{request}, and @var{comment} entries are for
1286 internal use only, and may be omitted. @var{now}, if non-@code{nil},
1287 means to set the variable's value now, even if the variable's
1288 @code{defcustom} form has not been evaluated. @var{request} is a list
1289 of features to be loaded immediately (@pxref{Named Features}).
1290 @var{comment} is a string describing the customization.
1291 @end defun
1292
1293 @defun custom-set-faces &rest args
1294 This function installs the face customizations specified by
1295 @var{args}. Each argument in @var{args} should have the form
1296
1297 @example
1298 (@var{face} @var{spec} [@var{now} [@var{comment}]])
1299 @end example
1300
1301 @noindent
1302 @var{face} is a face name (a symbol), and @var{spec} is the customized
1303 face specification for that face (@pxref{Defining Faces}).
1304
1305 The @var{now} and @var{comment} entries are for internal use only, and
1306 may be omitted. @var{now}, if non-@code{nil}, means to install the
1307 face specification now, even if the @code{defface} form has not been
1308 evaluated. @var{comment} is a string describing the customization.
1309 @end defun
1310
1311 @node Custom Themes
1312 @section Custom Themes
1313
1314 @dfn{Custom themes} are collections of settings that can be enabled
1315 or disabled as a unit. @xref{Custom Themes,,, emacs, The GNU Emacs
1316 Manual}. Each Custom theme is defined by an Emacs Lisp source file,
1317 which should follow the conventions described in this section.
1318 (Instead of writing a Custom theme by hand, you can also create one
1319 using a Customize-like interface; @pxref{Creating Custom Themes,,,
1320 emacs, The GNU Emacs Manual}.)
1321
1322 A Custom theme file should be named @file{@var{foo}-theme.el}, where
1323 @var{foo} is the theme name. The first Lisp form in the file should
1324 be a call to @code{deftheme}, and the last form should be a call to
1325 @code{provide-theme}.
1326
1327 @defmac deftheme theme &optional doc
1328 This macro declares @var{theme} (a symbol) as the name of a Custom
1329 theme. The optional argument @var{doc} should be a string describing
1330 the theme; this is the description shown when the user invokes the
1331 @code{describe-theme} command or types @kbd{?} in the @samp{*Custom
1332 Themes*} buffer.
1333
1334 Two special theme names are disallowed (using them causes an error):
1335 @code{user} is a ``dummy'' theme that stores the user's direct
1336 customization settings, and @code{changed} is a ``dummy'' theme that
1337 stores changes made outside of the Customize system.
1338 @end defmac
1339
1340 @defmac provide-theme theme
1341 This macro declares that the theme named @var{theme} has been fully
1342 specified.
1343 @end defmac
1344
1345 In between @code{deftheme} and @code{provide-theme} are Lisp forms
1346 specifying the theme settings: usually a call to
1347 @code{custom-theme-set-variables} and/or a call to
1348 @code{custom-theme-set-faces}.
1349
1350 @defun custom-theme-set-variables theme &rest args
1351 This function specifies the Custom theme @var{theme}'s variable
1352 settings. @var{theme} should be a symbol. Each argument in
1353 @var{args} should be a list of the form
1354
1355 @example
1356 (@var{var} @var{expression} [@var{now} [@var{request} [@var{comment}]]])
1357 @end example
1358
1359 @noindent
1360 where the list entries have the same meanings as in
1361 @code{custom-set-variables}. @xref{Applying Customizations}.
1362 @end defun
1363
1364 @defun custom-theme-set-faces theme &rest args
1365 This function specifies the Custom theme @var{theme}'s face settings.
1366 @var{theme} should be a symbol. Each argument in @var{args} should be
1367 a list of the form
1368
1369 @example
1370 (@var{face} @var{spec} [@var{now} [@var{comment}]])
1371 @end example
1372
1373 @noindent
1374 where the list entries have the same meanings as in
1375 @code{custom-set-faces}. @xref{Applying Customizations}.
1376 @end defun
1377
1378 In theory, a theme file can also contain other Lisp forms, which
1379 would be evaluated when loading the theme, but that is ``bad form''.
1380 To protect against loading themes containing malicious code, Emacs
1381 displays the source file and asks for confirmation from the user
1382 before loading any non-built-in theme for the first time.
1383
1384 The following functions are useful for programmatically enabling and
1385 disabling themes:
1386
1387 @defun custom-theme-p theme
1388 This function return a non-@code{nil} value if @var{theme} (a symbol)
1389 is the name of a Custom theme (i.e.@: a Custom theme which has been
1390 loaded into Emacs, whether or not the theme is enabled). Otherwise,
1391 it returns @code{nil}.
1392 @end defun
1393
1394 @deffn Command load-theme theme &optional no-confirm no-enable
1395 This function loads the Custom theme named @var{theme} from its source
1396 file, looking for the source file in the directories specified by the
1397 variable @code{custom-theme-load-path}. @xref{Custom Themes,,, emacs,
1398 The GNU Emacs Manual}. It also @dfn{enables} the theme (unless the
1399 optional argument @var{no-enable} is non-@code{nil}), causing its
1400 variable and face settings to take effect. It prompts the user for
1401 confirmation before loading the theme, unless the optional argument
1402 @var{no-confirm} is non-@code{nil}.
1403 @end deffn
1404
1405 @deffn Command enable-theme theme
1406 This function enables the Custom theme named @var{theme}. It signals
1407 an error if no such theme has been loaded.
1408 @end deffn
1409
1410 @deffn Command disable-theme theme
1411 This function disables the Custom theme named @var{theme}. The theme
1412 remains loaded, so that a subsequent call to @code{enable-theme} will
1413 re-enable it.
1414 @end deffn