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