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
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.
15 @xref{Defining Faces}, for the @code{defface} macro, which is used
16 for declaring customizable faces.
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.
29 @section Common Item Keywords
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.
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
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
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
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.
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
66 There are several alternatives you can use for @var{link-data}:
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}.
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.
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}.
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.
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.
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.
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.
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.
107 @item (custom-group-link @var{group})
108 Link to another customization group. Invoking it creates a new
109 customization buffer for @var{group}.
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}.
117 You can use this keyword more than once, to add multiple links.
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.
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.
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.
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.
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
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}.
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.
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 are:
164 (@var{package} (@var{pversion} . @var{eversion})@dots{})
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:
172 @c Must be small else too wide.
173 @c FIXME obviously this is out of date (in the code).
175 (add-to-list 'customize-package-emacs-version-alist
176 '(MH-E ("6.0" . "22.1") ("6.1" . "22.1") ("7.0" . "22.1")
177 ("7.1" . "22.1") ("7.2" . "22.1") ("7.3" . "22.1")
178 ("7.4" . "22.1") ("8.0" . "22.1")))
181 The value of @var{package} needs to be unique and it needs to match
182 the @var{package} value appearing in the @code{:package-version}
183 keyword. Since the user might see the value in an error message, a good
184 choice is the official name of the package, such as MH-E or Gnus.
187 @node Group Definitions
188 @section Defining Customization Groups
189 @cindex define customization group
190 @cindex customization groups, defining
192 Each Emacs Lisp package should have one main customization group which
193 contains all the options, faces and other groups in the package. If the
194 package has a small number of options and faces, use just one group and
195 put everything in it. When there are more than twelve or so options and
196 faces, then you should structure them into subgroups, and put the
197 subgroups under the package's main customization group. It is OK to
198 put some of the options and faces in the package's main group alongside
201 The package's main or only group should be a member of one or more of
202 the standard customization groups. (To display the full list of them,
203 use @kbd{M-x customize}.) Choose one or more of them (but not too
204 many), and add your group to each of them using the @code{:group}
207 The way to declare new customization groups is with @code{defgroup}.
209 @defmac defgroup group members doc [keyword value]@dots{}
210 Declare @var{group} as a customization group containing @var{members}.
211 Do not quote the symbol @var{group}. The argument @var{doc} specifies
212 the documentation string for the group.
214 The argument @var{members} is a list specifying an initial set of
215 customization items to be members of the group. However, most often
216 @var{members} is @code{nil}, and you specify the group's members by
217 using the @code{:group} keyword when defining those members.
219 If you want to specify group members through @var{members}, each element
220 should have the form @code{(@var{name} @var{widget})}. Here @var{name}
221 is a symbol, and @var{widget} is a widget type for editing that symbol.
222 Useful widgets are @code{custom-variable} for a variable,
223 @code{custom-face} for a face, and @code{custom-group} for a group.
225 When you introduce a new group into Emacs, use the @code{:version}
226 keyword in the @code{defgroup}; then you need not use it for
227 the individual members of the group.
229 In addition to the common keywords (@pxref{Common Keywords}), you can
230 also use this keyword in @code{defgroup}:
233 @item :prefix @var{prefix}
234 @kindex prefix@r{, @code{defgroup} keyword}
235 If the name of an item in the group starts with @var{prefix}, and the
236 customizable variable @code{custom-unlispify-remove-prefixes} is
237 non-@code{nil}, the item's tag will omit @var{prefix}. A group can
238 have any number of prefixes.
242 @defopt custom-unlispify-remove-prefixes
243 If this variable is non-@code{nil}, the prefixes specified by a
244 group's @code{:prefix} keyword are omitted from tag names, whenever
245 the user customizes the group.
247 The default value is @code{nil}, i.e.@: the prefix-discarding feature
248 is disabled. This is because discarding prefixes often leads to
249 confusing names for options and faces.
252 @node Variable Definitions
253 @section Defining Customization Variables
254 @cindex define customization options
255 @cindex customization variables, how to define
257 @defmac defcustom option standard doc [keyword value]@dots{}
258 This macro declares @var{option} as a user option (i.e.@: a
259 customizable variable). You should not quote @var{option}.
261 The argument @var{standard} is an expression that specifies the
262 standard value for @var{option}. Evaluating the @code{defcustom} form
263 evaluates @var{standard}, but does not necessarily install the
264 standard value. If @var{option} already has a default value,
265 @code{defcustom} does not change it. If the user has saved a
266 customization for @var{option}, @code{defcustom} installs the user's
267 customized value as @var{option}'s default value. If neither of those
268 cases applies, @code{defcustom} installs the result of evaluating
269 @var{standard} as the default value.
271 The expression @var{standard} can be evaluated at various other times,
272 too---whenever the customization facility needs to know @var{option}'s
273 standard value. So be sure to use an expression which is harmless to
274 evaluate at any time.
276 The argument @var{doc} specifies the documentation string for the
279 Every @code{defcustom} should specify @code{:group} at least once.
281 When you evaluate a @code{defcustom} form with @kbd{C-M-x} in Emacs Lisp
282 mode (@code{eval-defun}), a special feature of @code{eval-defun}
283 arranges to set the variable unconditionally, without testing whether
284 its value is void. (The same feature applies to @code{defvar}.)
285 @xref{Defining Variables}.
287 If you put a @code{defcustom} in a pre-loaded Emacs Lisp file
288 (@pxref{Building Emacs}), the standard value installed at dump time
289 might be incorrect, e.g.@: because another variable that it depends on
290 has not been assigned the right value yet. In that case, use
291 @code{custom-reevaluate-setting}, described below, to re-evaluate the
292 standard value after Emacs starts up.
295 @code{defcustom} accepts the following additional keywords:
298 @item :type @var{type}
299 Use @var{type} as the data type for this option. It specifies which
300 values are legitimate, and how to display the value.
301 @xref{Customization Types}, for more information.
303 @item :options @var{value-list}
304 @kindex options@r{, @code{defcustom} keyword}
305 Specify the list of reasonable values for use in this
306 option. The user is not restricted to using only these values, but they
307 are offered as convenient alternatives.
309 This is meaningful only for certain types, currently including
310 @code{hook}, @code{plist} and @code{alist}. See the definition of the
311 individual types for a description of how to use @code{:options}.
313 @item :set @var{setfunction}
314 @kindex set@r{, @code{defcustom} keyword}
315 Specify @var{setfunction} as the way to change the value of this
316 option when using the Customize interface. The function
317 @var{setfunction} should take two arguments, a symbol (the option
318 name) and the new value, and should do whatever is necessary to update
319 the value properly for this option (which may not mean simply setting
320 the option as a Lisp variable). The default for @var{setfunction} is
323 If you specify this keyword, the variable's documentation string
324 should describe how to do the same job in hand-written Lisp code.
326 @item :get @var{getfunction}
327 @kindex get@r{, @code{defcustom} keyword}
328 Specify @var{getfunction} as the way to extract the value of this
329 option. The function @var{getfunction} should take one argument, a
330 symbol, and should return whatever customize should use as the
331 ``current value'' for that symbol (which need not be the symbol's Lisp
332 value). The default is @code{default-value}.
334 You have to really understand the workings of Custom to use
335 @code{:get} correctly. It is meant for values that are treated in
336 Custom as variables but are not actually stored in Lisp variables. It
337 is almost surely a mistake to specify @var{getfunction} for a value
338 that really is stored in a Lisp variable.
340 @item :initialize @var{function}
341 @kindex initialize@r{, @code{defcustom} keyword}
342 @var{function} should be a function used to initialize the variable
343 when the @code{defcustom} is evaluated. It should take two arguments,
344 the option name (a symbol) and the value. Here are some predefined
345 functions meant for use in this way:
348 @item custom-initialize-set
349 Use the variable's @code{:set} function to initialize the variable, but
350 do not reinitialize it if it is already non-void.
352 @item custom-initialize-default
353 Like @code{custom-initialize-set}, but use the function
354 @code{set-default} to set the variable, instead of the variable's
355 @code{:set} function. This is the usual choice for a variable whose
356 @code{:set} function enables or disables a minor mode; with this choice,
357 defining the variable will not call the minor mode function, but
358 customizing the variable will do so.
360 @item custom-initialize-reset
361 Always use the @code{:set} function to initialize the variable. If
362 the variable is already non-void, reset it by calling the @code{:set}
363 function using the current value (returned by the @code{:get} method).
364 This is the default @code{:initialize} function.
366 @item custom-initialize-changed
367 Use the @code{:set} function to initialize the variable, if it is
368 already set or has been customized; otherwise, just use
371 @item custom-initialize-safe-set
372 @itemx custom-initialize-safe-default
373 These functions behave like @code{custom-initialize-set}
374 (@code{custom-initialize-default}, respectively), but catch errors.
375 If an error occurs during initialization, they set the variable to
376 @code{nil} using @code{set-default}, and signal no error.
378 These functions are meant for options defined in pre-loaded files,
379 where the @var{standard} expression may signal an error because some
380 required variable or function is not yet defined. The value normally
381 gets updated in @file{startup.el}, ignoring the value computed by
382 @code{defcustom}. After startup, if one unsets the value and
383 reevaluates the @code{defcustom}, the @var{standard} expression can be
384 evaluated without error.
387 @item :risky @var{value}
388 @kindex risky@r{, @code{defcustom} keyword}
389 Set the variable's @code{risky-local-variable} property to
390 @var{value} (@pxref{File Local Variables}).
392 @item :safe @var{function}
393 @kindex safe@r{, @code{defcustom} keyword}
394 Set the variable's @code{safe-local-variable} property to
395 @var{function} (@pxref{File Local Variables}).
397 @item :set-after @var{variables}
398 @kindex set-after@r{, @code{defcustom} keyword}
399 When setting variables according to saved customizations, make sure to
400 set the variables @var{variables} before this one; i.e., delay
401 setting this variable until after those others have been handled. Use
402 @code{:set-after} if setting this variable won't work properly unless
403 those other variables already have their intended values.
406 It is useful to specify the @code{:require} keyword for an option
407 that ``turns on'' a certain feature. This causes Emacs to load the
408 feature, if it is not already loaded, whenever the option is set.
409 @xref{Common Keywords}. Here is an example, from the library
413 (defcustom save-place nil
414 "Non-nil means automatically save place in each file..."
420 If a customization item has a type such as @code{hook} or
421 @code{alist}, which supports @code{:options}, you can add additional
422 values to the list from outside the @code{defcustom} declaration by
423 calling @code{custom-add-frequent-value}. For example, if you define a
424 function @code{my-lisp-mode-initialization} intended to be called from
425 @code{emacs-lisp-mode-hook}, you might want to add that to the list of
426 reasonable values for @code{emacs-lisp-mode-hook}, but not by editing
427 its definition. You can do it thus:
430 (custom-add-frequent-value 'emacs-lisp-mode-hook
431 'my-lisp-mode-initialization)
434 @defun custom-add-frequent-value symbol value
435 For the customization option @var{symbol}, add @var{value} to the
436 list of reasonable values.
438 The precise effect of adding a value depends on the customization type
442 Internally, @code{defcustom} uses the symbol property
443 @code{standard-value} to record the expression for the standard value,
444 @code{saved-value} to record the value saved by the user with the
445 customization buffer, and @code{customized-value} to record the value
446 set by the user with the customization buffer, but not saved.
447 @xref{Property Lists}. These properties are lists, the car of which
448 is an expression that evaluates to the value.
450 @defun custom-reevaluate-setting symbol
451 This function re-evaluates the standard value of @var{symbol}, which
452 should be a user option declared via @code{defcustom}. If the
453 variable was customized, this function re-evaluates the saved value
454 instead. Then it sets the user option to that value (using the
455 option's @code{:set} property if that is defined).
457 This is useful for customizable options that are defined before their
458 value could be computed correctly. For example, during startup Emacs
459 calls this function for some user options that were defined in
460 pre-loaded Emacs Lisp files, but whose initial values depend on
461 information available only at run-time.
464 @defun custom-variable-p arg
465 This function returns non-@code{nil} if @var{arg} is a customizable
466 variable. A customizable variable is either a variable that has a
467 @code{standard-value} or @code{custom-autoload} property (usually
468 meaning it was declared with @code{defcustom}), or an alias for
469 another customizable variable.
472 @defun user-variable-p arg
473 This function is like @code{custom-variable-p}, except it also returns
474 @code{t} if the first character of the variable's documentation string
475 is the character @samp{*}. That is an obsolete way of indicating a
476 user option, so for most purposes you may consider
477 @code{user-variable-p} as equivalent to @code{custom-variable-p}.
480 @node Customization Types
481 @section Customization Types
483 @cindex customization types
484 When you define a user option with @code{defcustom}, you must specify
485 its @dfn{customization type}. That is a Lisp object which describes (1)
486 which values are legitimate and (2) how to display the value in the
487 customization buffer for editing.
489 @kindex type@r{, @code{defcustom} keyword}
490 You specify the customization type in @code{defcustom} with the
491 @code{:type} keyword. The argument of @code{:type} is evaluated, but
492 only once when the @code{defcustom} is executed, so it isn't useful
493 for the value to vary. Normally we use a quoted constant. For
497 (defcustom diff-command "diff"
498 "The command to use to run diff."
503 In general, a customization type is a list whose first element is a
504 symbol, one of the customization type names defined in the following
505 sections. After this symbol come a number of arguments, depending on
506 the symbol. Between the type symbol and its arguments, you can
507 optionally write keyword-value pairs (@pxref{Type Keywords}).
509 Some type symbols do not use any arguments; those are called
510 @dfn{simple types}. For a simple type, if you do not use any
511 keyword-value pairs, you can omit the parentheses around the type
512 symbol. For example just @code{string} as a customization type is
513 equivalent to @code{(string)}.
515 All customization types are implemented as widgets; see @ref{Top, ,
516 Introduction, widget, The Emacs Widget Library}, for details.
519 * Simple Types:: Simple customization types: sexp, integer, etc.
520 * Composite Types:: Build new types from other types or data.
521 * Splicing into Lists:: Splice elements into list with @code{:inline}.
522 * Type Keywords:: Keyword-argument pairs in a customization type.
523 * Defining New Types:: Give your type a name.
527 @subsection Simple Types
529 This section describes all the simple customization types. For
530 several of these customization types, the customization widget
531 provides inline completion with @kbd{C-M-i} or @kbd{M-@key{TAB}}.
535 The value may be any Lisp object that can be printed and read back.
536 You can use @code{sexp} as a fall-back for any option, if you don't
537 want to take the time to work out a more specific type to use.
540 The value must be an integer.
543 The value must be a number (floating point or integer).
546 The value must be a floating point number.
549 The value must be a string. The customization buffer shows the string
550 without delimiting @samp{"} characters or @samp{\} quotes.
553 Like @code{string} except that the string must be a valid regular
557 The value must be a character code. A character code is actually an
558 integer, but this type shows the value by inserting the character in the
559 buffer, rather than by showing the number.
562 The value must be a file name. The widget provides completion.
564 @item (file :must-match t)
565 The value must be a file name for an existing file. The widget
569 The value must be a directory name. The widget provides completion.
572 The value must be a list of functions. This customization type is
573 used for hook variables. You can use the @code{:options} keyword in a
574 hook variable's @code{defcustom} to specify a list of functions
575 recommended for use in the hook; @xref{Variable Definitions}.
578 The value must be a symbol. It appears in the customization buffer as
579 the symbol name. The widget provides completion.
582 The value must be either a lambda expression or a function name. The
583 widget provides completion for function names.
586 The value must be a variable name. The widget provides completion.
589 The value must be a symbol which is a face name. The widget provides
593 The value is boolean---either @code{nil} or @code{t}. Note that by
594 using @code{choice} and @code{const} together (see the next section),
595 you can specify that the value must be @code{nil} or @code{t}, but also
596 specify the text to describe each value in a way that fits the specific
597 meaning of the alternative.
600 The value must be a coding-system name, and you can do completion with
604 The value must be a valid color name. The widget provides completion
605 for color names, as well as a sample and a button for selecting a
606 color name from a list of color names shown in a @file{*Colors*}
610 @node Composite Types
611 @subsection Composite Types
612 @cindex composite types (customization)
614 When none of the simple types is appropriate, you can use composite
615 types, which build new types from other types or from specified data.
616 The specified types or data are called the @dfn{arguments} of the
617 composite type. The composite type normally looks like this:
620 (@var{constructor} @var{arguments}@dots{})
624 but you can also add keyword-value pairs before the arguments, like
628 (@var{constructor} @r{@{}@var{keyword} @var{value}@r{@}}@dots{} @var{arguments}@dots{})
631 Here is a table of constructors and how to use them to write
635 @item (cons @var{car-type} @var{cdr-type})
636 The value must be a cons cell, its @sc{car} must fit @var{car-type}, and
637 its @sc{cdr} must fit @var{cdr-type}. For example, @code{(cons string
638 symbol)} is a customization type which matches values such as
639 @code{("foo" . foo)}.
641 In the customization buffer, the @sc{car} and @sc{cdr} are displayed
642 and edited separately, each according to their specified type.
644 @item (list @var{element-types}@dots{})
645 The value must be a list with exactly as many elements as the
646 @var{element-types} given; and each element must fit the
647 corresponding @var{element-type}.
649 For example, @code{(list integer string function)} describes a list of
650 three elements; the first element must be an integer, the second a
651 string, and the third a function.
653 In the customization buffer, each element is displayed and edited
654 separately, according to the type specified for it.
656 @item (group @var{element-types}@dots{})
657 This works like @code{list} except for the formatting
658 of text in the Custom buffer. @code{list} labels each
659 element value with its tag; @code{group} does not.
661 @item (vector @var{element-types}@dots{})
662 Like @code{list} except that the value must be a vector instead of a
663 list. The elements work the same as in @code{list}.
665 @item (alist :key-type @var{key-type} :value-type @var{value-type})
666 The value must be a list of cons-cells, the @sc{car} of each cell
667 representing a key of customization type @var{key-type}, and the
668 @sc{cdr} of the same cell representing a value of customization type
669 @var{value-type}. The user can add and delete key/value pairs, and
670 edit both the key and the value of each pair.
672 If omitted, @var{key-type} and @var{value-type} default to
675 The user can add any key matching the specified key type, but you can
676 give some keys a preferential treatment by specifying them with the
677 @code{:options} (see @ref{Variable Definitions}). The specified keys
678 will always be shown in the customize buffer (together with a suitable
679 value), with a checkbox to include or exclude or disable the key/value
680 pair from the alist. The user will not be able to edit the keys
681 specified by the @code{:options} keyword argument.
683 The argument to the @code{:options} keywords should be a list of
684 specifications for reasonable keys in the alist. Ordinarily, they are
685 simply atoms, which stand for themselves. For example:
688 :options '("foo" "bar" "baz")
692 specifies that there are three ``known'' keys, namely @code{"foo"},
693 @code{"bar"} and @code{"baz"}, which will always be shown first.
695 You may want to restrict the value type for specific keys, for
696 example, the value associated with the @code{"bar"} key can only be an
697 integer. You can specify this by using a list instead of an atom in
698 the list. The first element will specify the key, like before, while
699 the second element will specify the value type. For example:
702 :options '("foo" ("bar" integer) "baz")
705 Finally, you may want to change how the key is presented. By default,
706 the key is simply shown as a @code{const}, since the user cannot change
707 the special keys specified with the @code{:options} keyword. However,
708 you may want to use a more specialized type for presenting the key, like
709 @code{function-item} if you know it is a symbol with a function binding.
710 This is done by using a customization type specification instead of a
714 :options '("foo" ((function-item some-function) integer)
718 Many alists use lists with two elements, instead of cons cells. For
722 (defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
723 "Each element is a list of the form (KEY VALUE).")
730 (defcustom cons-alist '(("foo" . 1) ("bar" . 2) ("baz" . 3))
731 "Each element is a cons-cell (KEY . VALUE).")
734 Because of the way lists are implemented on top of cons cells, you can
735 treat @code{list-alist} in the example above as a cons cell alist, where
736 the value type is a list with a single element containing the real
740 (defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
741 "Each element is a list of the form (KEY VALUE)."
742 :type '(alist :value-type (group integer)))
745 The @code{group} widget is used here instead of @code{list} only because
746 the formatting is better suited for the purpose.
748 Similarly, you can have alists with more values associated with each
749 key, using variations of this trick:
752 (defcustom person-data '(("brian" 50 t)
755 "Alist of basic info about people.
756 Each element has the form (NAME AGE MALE-FLAG)."
757 :type '(alist :value-type (group integer boolean)))
760 @item (plist :key-type @var{key-type} :value-type @var{value-type})
761 This customization type is similar to @code{alist} (see above), except
762 that (i) the information is stored as a property list,
763 (@pxref{Property Lists}), and (ii) @var{key-type}, if omitted,
764 defaults to @code{symbol} rather than @code{sexp}.
766 @item (choice @var{alternative-types}@dots{})
767 The value must fit one of @var{alternative-types}. For example,
768 @code{(choice integer string)} allows either an integer or a string.
770 In the customization buffer, the user selects an alternative
771 using a menu, and can then edit the value in the usual way for that
774 Normally the strings in this menu are determined automatically from the
775 choices; however, you can specify different strings for the menu by
776 including the @code{:tag} keyword in the alternatives. For example, if
777 an integer stands for a number of spaces, while a string is text to use
778 verbatim, you might write the customization type this way,
781 (choice (integer :tag "Number of spaces")
782 (string :tag "Literal text"))
786 so that the menu offers @samp{Number of spaces} and @samp{Literal text}.
788 In any alternative for which @code{nil} is not a valid value, other than
789 a @code{const}, you should specify a valid default for that alternative
790 using the @code{:value} keyword. @xref{Type Keywords}.
792 If some values are covered by more than one of the alternatives,
793 customize will choose the first alternative that the value fits. This
794 means you should always list the most specific types first, and the
795 most general last. Here's an example of proper usage:
798 (choice (const :tag "Off" nil)
799 symbol (sexp :tag "Other"))
803 This way, the special value @code{nil} is not treated like other
804 symbols, and symbols are not treated like other Lisp expressions.
806 @item (radio @var{element-types}@dots{})
807 This is similar to @code{choice}, except that the choices are displayed
808 using `radio buttons' rather than a menu. This has the advantage of
809 displaying documentation for the choices when applicable and so is often
810 a good choice for a choice between constant functions
811 (@code{function-item} customization types).
813 @item (const @var{value})
814 The value must be @var{value}---nothing else is allowed.
816 The main use of @code{const} is inside of @code{choice}. For example,
817 @code{(choice integer (const nil))} allows either an integer or
820 @code{:tag} is often used with @code{const}, inside of @code{choice}.
824 (choice (const :tag "Yes" t)
825 (const :tag "No" nil)
826 (const :tag "Ask" foo))
830 describes a variable for which @code{t} means yes, @code{nil} means no,
831 and @code{foo} means ``ask''.
833 @item (other @var{value})
834 This alternative can match any Lisp value, but if the user chooses this
835 alternative, that selects the value @var{value}.
837 The main use of @code{other} is as the last element of @code{choice}.
841 (choice (const :tag "Yes" t)
842 (const :tag "No" nil)
843 (other :tag "Ask" foo))
847 describes a variable for which @code{t} means yes, @code{nil} means no,
848 and anything else means ``ask''. If the user chooses @samp{Ask} from
849 the menu of alternatives, that specifies the value @code{foo}; but any
850 other value (not @code{t}, @code{nil} or @code{foo}) displays as
851 @samp{Ask}, just like @code{foo}.
853 @item (function-item @var{function})
854 Like @code{const}, but used for values which are functions. This
855 displays the documentation string as well as the function name.
856 The documentation string is either the one you specify with
857 @code{:doc}, or @var{function}'s own documentation string.
859 @item (variable-item @var{variable})
860 Like @code{const}, but used for values which are variable names. This
861 displays the documentation string as well as the variable name. The
862 documentation string is either the one you specify with @code{:doc}, or
863 @var{variable}'s own documentation string.
865 @item (set @var{types}@dots{})
866 The value must be a list, and each element of the list must match one of
867 the @var{types} specified.
869 This appears in the customization buffer as a checklist, so that each of
870 @var{types} may have either one corresponding element or none. It is
871 not possible to specify two different elements that match the same one
872 of @var{types}. For example, @code{(set integer symbol)} allows one
873 integer and/or one symbol in the list; it does not allow multiple
874 integers or multiple symbols. As a result, it is rare to use
875 nonspecific types such as @code{integer} in a @code{set}.
877 Most often, the @var{types} in a @code{set} are @code{const} types, as
881 (set (const :bold) (const :italic))
884 Sometimes they describe possible elements in an alist:
887 (set (cons :tag "Height" (const height) integer)
888 (cons :tag "Width" (const width) integer))
892 That lets the user specify a height value optionally
893 and a width value optionally.
895 @item (repeat @var{element-type})
896 The value must be a list and each element of the list must fit the type
897 @var{element-type}. This appears in the customization buffer as a
898 list of elements, with @samp{[INS]} and @samp{[DEL]} buttons for adding
899 more elements or removing elements.
901 @item (restricted-sexp :match-alternatives @var{criteria})
902 This is the most general composite type construct. The value may be
903 any Lisp object that satisfies one of @var{criteria}. @var{criteria}
904 should be a list, and each element should be one of these
909 A predicate---that is, a function of one argument that has no side
910 effects, and returns either @code{nil} or non-@code{nil} according to
911 the argument. Using a predicate in the list says that objects for which
912 the predicate returns non-@code{nil} are acceptable.
915 A quoted constant---that is, @code{'@var{object}}. This sort of element
916 in the list says that @var{object} itself is an acceptable value.
922 (restricted-sexp :match-alternatives
927 allows integers, @code{t} and @code{nil} as legitimate values.
929 The customization buffer shows all legitimate values using their read
930 syntax, and the user edits them textually.
933 Here is a table of the keywords you can use in keyword-value pairs
938 Use @var{tag} as the name of this alternative, for user communication
939 purposes. This is useful for a type that appears inside of a
942 @item :match-alternatives @var{criteria}
943 @kindex match-alternatives@r{, customization keyword}
944 Use @var{criteria} to match possible values. This is used only in
945 @code{restricted-sexp}.
947 @item :args @var{argument-list}
948 @kindex args@r{, customization keyword}
949 Use the elements of @var{argument-list} as the arguments of the type
950 construct. For instance, @code{(const :args (foo))} is equivalent to
951 @code{(const foo)}. You rarely need to write @code{:args} explicitly,
952 because normally the arguments are recognized automatically as
953 whatever follows the last keyword-value pair.
956 @node Splicing into Lists
957 @subsection Splicing into Lists
959 The @code{:inline} feature lets you splice a variable number of
960 elements into the middle of a @code{list} or @code{vector}
961 customization type. You use it by adding @code{:inline t} to a type
962 specification which is contained in a @code{list} or @code{vector}
965 Normally, each entry in a @code{list} or @code{vector} type
966 specification describes a single element type. But when an entry
967 contains @code{:inline t}, the value it matches is merged directly
968 into the containing sequence. For example, if the entry matches a
969 list with three elements, those become three elements of the overall
970 sequence. This is analogous to @samp{,@@} in a backquote construct
973 For example, to specify a list whose first element must be @code{baz}
974 and whose remaining arguments should be zero or more of @code{foo} and
975 @code{bar}, use this customization type:
978 (list (const baz) (set :inline t (const foo) (const bar)))
982 This matches values such as @code{(baz)}, @code{(baz foo)}, @code{(baz bar)}
983 and @code{(baz foo bar)}.
985 When the element-type is a @code{choice}, you use @code{:inline} not
986 in the @code{choice} itself, but in (some of) the alternatives of the
987 @code{choice}. For example, to match a list which must start with a
988 file name, followed either by the symbol @code{t} or two strings, use
989 this customization type:
994 (list :inline t string string)))
998 If the user chooses the first alternative in the choice, then the
999 overall list has two elements and the second element is @code{t}. If
1000 the user chooses the second alternative, then the overall list has three
1001 elements and the second and third must be strings.
1004 @subsection Type Keywords
1006 You can specify keyword-argument pairs in a customization type after the
1007 type name symbol. Here are the keywords you can use, and their
1011 @item :value @var{default}
1012 Provide a default value.
1014 If @code{nil} is not a valid value for the alternative, then it is
1015 essential to specify a valid default with @code{:value}.
1017 If you use this for a type that appears as an alternative inside of
1018 @code{choice}; it specifies the default value to use, at first, if and
1019 when the user selects this alternative with the menu in the
1020 customization buffer.
1022 Of course, if the actual value of the option fits this alternative, it
1023 will appear showing the actual value, not @var{default}.
1025 @item :format @var{format-string}
1026 @kindex format@r{, customization keyword}
1027 This string will be inserted in the buffer to represent the value
1028 corresponding to the type. The following @samp{%} escapes are available
1029 for use in @var{format-string}:
1032 @item %[@var{button}%]
1033 Display the text @var{button} marked as a button. The @code{:action}
1034 attribute specifies what the button will do if the user invokes it;
1035 its value is a function which takes two arguments---the widget which
1036 the button appears in, and the event.
1038 There is no way to specify two different buttons with different
1041 @item %@{@var{sample}%@}
1042 Show @var{sample} in a special face specified by @code{:sample-face}.
1045 Substitute the item's value. How the value is represented depends on
1046 the kind of item, and (for variables) on the customization type.
1049 Substitute the item's documentation string.
1052 Like @samp{%d}, but if the documentation string is more than one line,
1053 add an active field to control whether to show all of it or just the
1057 Substitute the tag here. You specify the tag with the @code{:tag}
1061 Display a literal @samp{%}.
1064 @item :action @var{action}
1065 @kindex action@r{, customization keyword}
1066 Perform @var{action} if the user clicks on a button.
1068 @item :button-face @var{face}
1069 @kindex button-face@r{, customization keyword}
1070 Use the face @var{face} (a face name or a list of face names) for button
1071 text displayed with @samp{%[@dots{}%]}.
1073 @item :button-prefix @var{prefix}
1074 @itemx :button-suffix @var{suffix}
1075 @kindex button-prefix@r{, customization keyword}
1076 @kindex button-suffix@r{, customization keyword}
1077 These specify the text to display before and after a button.
1082 No text is inserted.
1085 The string is inserted literally.
1088 The symbol's value is used.
1091 @item :tag @var{tag}
1092 Use @var{tag} (a string) as the tag for the value (or part of the value)
1093 that corresponds to this type.
1095 @item :doc @var{doc}
1096 @kindex doc@r{, customization keyword}
1097 Use @var{doc} as the documentation string for this value (or part of the
1098 value) that corresponds to this type. In order for this to work, you
1099 must specify a value for @code{:format}, and use @samp{%d} or @samp{%h}
1102 The usual reason to specify a documentation string for a type is to
1103 provide more information about the meanings of alternatives inside a
1104 @code{:choice} type or the parts of some other composite type.
1106 @item :help-echo @var{motion-doc}
1107 @kindex help-echo@r{, customization keyword}
1108 When you move to this item with @code{widget-forward} or
1109 @code{widget-backward}, it will display the string @var{motion-doc} in
1110 the echo area. In addition, @var{motion-doc} is used as the mouse
1111 @code{help-echo} string and may actually be a function or form evaluated
1112 to yield a help string. If it is a function, it is called with one
1113 argument, the widget.
1115 @item :match @var{function}
1116 @kindex match@r{, customization keyword}
1117 Specify how to decide whether a value matches the type. The
1118 corresponding value, @var{function}, should be a function that accepts
1119 two arguments, a widget and a value; it should return non-@code{nil} if
1120 the value is acceptable.
1122 @item :validate @var{function}
1123 Specify a validation function for input. @var{function} takes a
1124 widget as an argument, and should return @code{nil} if the widget's
1125 current value is valid for the widget. Otherwise, it should return
1126 the widget containing the invalid data, and set that widget's
1127 @code{:error} property to a string explaining the error.
1130 @item :indent @var{columns}
1131 Indent this item by @var{columns} columns. The indentation is used for
1132 @samp{%n}, and automatically for group names, for checklists and radio
1133 buttons, and for editable lists. It affects the whole of the
1134 item except for the first line.
1136 @item :offset @var{extra}
1137 Indent the subitems of this item @var{extra} columns more than this
1138 item itself. By default, subitems are indented the same as their
1141 @item :extra-offset @var{n}
1142 Add @var{n} extra spaces to this item's indentation, compared to its
1143 parent's indentation.
1145 @item :notify @var{function}
1146 Call @var{function} each time the item or a subitem is changed. The
1147 function gets two or three arguments. The first argument is the item
1148 itself, the second argument is the item that was changed, and the
1149 third argument is the event leading to the change, if any.
1151 @item :menu-tag @var{tag-string}
1152 Use @var{tag-string} in the menu when the widget is used as an option
1153 in a @code{menu-choice} widget.
1156 A function used for finding the tag when the widget is used as an option
1157 in a @code{menu-choice} widget. By default, the tag used will be either the
1158 @code{:menu-tag} or @code{:tag} property if present, or the @code{princ}
1159 representation of the @code{:value} property if not.
1162 Specify the order in which widgets are traversed with
1163 @code{widget-forward} or @code{widget-backward}. This is only partially
1168 Widgets with tabbing order @code{-1} are ignored.
1171 (Unimplemented) When on a widget with tabbing order @var{n}, go to the
1172 next widget in the buffer with tabbing order @var{n+1} or @code{nil},
1173 whichever comes first.
1176 When on a widget with no tabbing order specified, go to the next widget
1177 in the buffer with a positive tabbing order, or @code{nil}
1181 The parent of a nested widget (e.g., a @code{menu-choice} item or an
1182 element of a @code{editable-list} widget).
1185 This keyword is only used for members of a @code{radio-button-choice} or
1186 @code{checklist}. The value should be a list of extra keyword
1187 arguments, which will be used when creating the @code{radio-button} or
1188 @code{checkbox} associated with this item.
1192 @node Defining New Types
1193 @subsection Defining New Types
1195 In the previous sections we have described how to construct elaborate
1196 type specifications for @code{defcustom}. In some cases you may want
1197 to give such a type specification a name. The obvious case is when
1198 you are using the same type for many user options: rather than repeat
1199 the specification for each option, you can give the type specification
1200 a name, and use that name each @code{defcustom}. The other case is
1201 when a user option's value is a recursive data structure. To make it
1202 possible for a datatype to refer to itself, it needs to have a name.
1204 Since custom types are implemented as widgets, the way to define a new
1205 customize type is to define a new widget. We are not going to describe
1206 the widget interface here in details, see @ref{Top, , Introduction,
1207 widget, The Emacs Widget Library}, for that. Instead we are going to
1208 demonstrate the minimal functionality needed for defining new customize
1209 types by a simple example.
1212 (define-widget 'binary-tree-of-string 'lazy
1213 "A binary tree made of cons-cells and strings."
1216 :type '(choice (string :tag "Leaf" :value "")
1217 (cons :tag "Interior"
1219 binary-tree-of-string
1220 binary-tree-of-string)))
1222 (defcustom foo-bar ""
1223 "Sample variable holding a binary tree of strings."
1224 :type 'binary-tree-of-string)
1227 The function to define a new widget is called @code{define-widget}. The
1228 first argument is the symbol we want to make a new widget type. The
1229 second argument is a symbol representing an existing widget, the new
1230 widget is going to be defined in terms of difference from the existing
1231 widget. For the purpose of defining new customization types, the
1232 @code{lazy} widget is perfect, because it accepts a @code{:type} keyword
1233 argument with the same syntax as the keyword argument to
1234 @code{defcustom} with the same name. The third argument is a
1235 documentation string for the new widget. You will be able to see that
1236 string with the @kbd{M-x widget-browse @key{RET} binary-tree-of-string
1239 After these mandatory arguments follow the keyword arguments. The most
1240 important is @code{:type}, which describes the data type we want to match
1241 with this widget. Here a @code{binary-tree-of-string} is described as
1242 being either a string, or a cons-cell whose car and cdr are themselves
1243 both @code{binary-tree-of-string}. Note the reference to the widget
1244 type we are currently in the process of defining. The @code{:tag}
1245 attribute is a string to name the widget in the user interface, and the
1246 @code{:offset} argument is there to ensure that child nodes are
1247 indented four spaces relative to the parent node, making the tree
1248 structure apparent in the customization buffer.
1250 The @code{defcustom} shows how the new widget can be used as an ordinary
1253 The reason for the name @code{lazy} is that the other composite
1254 widgets convert their inferior widgets to internal form when the
1255 widget is instantiated in a buffer. This conversion is recursive, so
1256 the inferior widgets will convert @emph{their} inferior widgets. If
1257 the data structure is itself recursive, this conversion is an infinite
1258 recursion. The @code{lazy} widget prevents the recursion: it convert
1259 its @code{:type} argument only when needed.
1261 @node Applying Customizations
1262 @section Applying Customizations
1264 The following functions are responsible for installing the user's
1265 customization settings for variables and faces, respectively. When
1266 the user invokes @samp{Save for future sessions} in the Customize
1267 interface, that takes effect by writing a @code{custom-set-variables}
1268 and/or a @code{custom-set-faces} form into the custom file, to be
1269 evaluated the next time Emacs starts.
1271 @defun custom-set-variables &rest args
1272 This function installs the variable customizations specified by
1273 @var{args}. Each argument in @var{args} should have the form
1276 (@var{var} @var{expression} [@var{now} [@var{request} [@var{comment}]]])
1280 @var{var} is a variable name (a symbol), and @var{expression} is an
1281 expression which evaluates to the desired customized value.
1283 If the @code{defcustom} form for @var{var} has been evaluated prior to
1284 this @code{custom-set-variables} call, @var{expression} is immediately
1285 evaluated, and the variable's value is set to the result. Otherwise,
1286 @var{expression} is stored into the variable's @code{saved-value}
1287 property, to be evaluated when the relevant @code{defcustom} is called
1288 (usually when the library defining that variable is loaded into
1291 The @var{now}, @var{request}, and @var{comment} entries are for
1292 internal use only, and may be omitted. @var{now}, if non-@code{nil},
1293 means to set the variable's value now, even if the variable's
1294 @code{defcustom} form has not been evaluated. @var{request} is a list
1295 of features to be loaded immediately (@pxref{Named Features}).
1296 @var{comment} is a string describing the customization.
1299 @defun custom-set-faces &rest args
1300 This function installs the face customizations specified by
1301 @var{args}. Each argument in @var{args} should have the form
1304 (@var{face} @var{spec} [@var{now} [@var{comment}]])
1308 @var{face} is a face name (a symbol), and @var{spec} is the customized
1309 face specification for that face (@pxref{Defining Faces}).
1311 The @var{now} and @var{comment} entries are for internal use only, and
1312 may be omitted. @var{now}, if non-@code{nil}, means to install the
1313 face specification now, even if the @code{defface} form has not been
1314 evaluated. @var{comment} is a string describing the customization.
1318 @section Custom Themes
1320 @dfn{Custom themes} are collections of settings that can be enabled
1321 or disabled as a unit. @xref{Custom Themes,,, emacs, The GNU Emacs
1322 Manual}. Each Custom theme is defined by an Emacs Lisp source file,
1323 which should follow the conventions described in this section.
1324 (Instead of writing a Custom theme by hand, you can also create one
1325 using a Customize-like interface; @pxref{Creating Custom Themes,,,
1326 emacs, The GNU Emacs Manual}.)
1328 A Custom theme file should be named @file{@var{foo}-theme.el}, where
1329 @var{foo} is the theme name. The first Lisp form in the file should
1330 be a call to @code{deftheme}, and the last form should be a call to
1331 @code{provide-theme}.
1333 @defmac deftheme theme &optional doc
1334 This macro declares @var{theme} (a symbol) as the name of a Custom
1335 theme. The optional argument @var{doc} should be a string describing
1336 the theme; this is the description shown when the user invokes the
1337 @code{describe-theme} command or types @kbd{?} in the @samp{*Custom
1340 Two special theme names are disallowed (using them causes an error):
1341 @code{user} is a ``dummy'' theme that stores the user's direct
1342 customization settings, and @code{changed} is a ``dummy'' theme that
1343 stores changes made outside of the Customize system.
1346 @defmac provide-theme theme
1347 This macro declares that the theme named @var{theme} has been fully
1351 In between @code{deftheme} and @code{provide-theme} are Lisp forms
1352 specifying the theme settings: usually a call to
1353 @code{custom-theme-set-variables} and/or a call to
1354 @code{custom-theme-set-faces}.
1356 @defun custom-theme-set-variables theme &rest args
1357 This function specifies the Custom theme @var{theme}'s variable
1358 settings. @var{theme} should be a symbol. Each argument in
1359 @var{args} should be a list of the form
1362 (@var{var} @var{expression} [@var{now} [@var{request} [@var{comment}]]])
1366 where the list entries have the same meanings as in
1367 @code{custom-set-variables}. @xref{Applying Customizations}.
1370 @defun custom-theme-set-faces theme &rest args
1371 This function specifies the Custom theme @var{theme}'s face settings.
1372 @var{theme} should be a symbol. Each argument in @var{args} should be
1376 (@var{face} @var{spec} [@var{now} [@var{comment}]])
1380 where the list entries have the same meanings as in
1381 @code{custom-set-faces}. @xref{Applying Customizations}.
1384 In theory, a theme file can also contain other Lisp forms, which
1385 would be evaluated when loading the theme, but that is ``bad form''.
1386 To protect against loading themes containing malicious code, Emacs
1387 displays the source file and asks for confirmation from the user
1388 before loading any non-built-in theme for the first time.
1390 The following functions are useful for programmatically enabling and
1393 @defun custom-theme-p theme
1394 This function return a non-@code{nil} value if @var{theme} (a symbol)
1395 is the name of a Custom theme (i.e.@: a Custom theme which has been
1396 loaded into Emacs, whether or not the theme is enabled). Otherwise,
1397 it returns @code{nil}.
1400 @deffn Command load-theme theme &optional no-confirm no-enable
1401 This function loads the Custom theme named @var{theme} from its source
1402 file, looking for the source file in the directories specified by the
1403 variable @code{custom-theme-load-path}. @xref{Custom Themes,,, emacs,
1404 The GNU Emacs Manual}. It also @dfn{enables} the theme (unless the
1405 optional argument @var{no-enable} is non-@code{nil}), causing its
1406 variable and face settings to take effect. It prompts the user for
1407 confirmation before loading the theme, unless the optional argument
1408 @var{no-confirm} is non-@code{nil}.
1411 @deffn Command enable-theme theme
1412 This function enables the Custom theme named @var{theme}. It signals
1413 an error if no such theme has been loaded.
1416 @deffn Command disable-theme theme
1417 This function disables the Custom theme named @var{theme}. The theme
1418 remains loaded, so that a subsequent call to @code{enable-theme} will