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