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