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