Merge from trunk.
[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.
73b0cd50 3@c Copyright (C) 1997-2011 Free Software Foundation, Inc.
b8d4c8d0 4@c See the file elisp.texi for copying conditions.
6336d8c3 5@setfilename ../../info/customize
b8d4c8d0
GM
6@node Customization, Loading, Macros, Top
7@chapter Writing Customization Definitions
8
9@cindex customization definitions
10 This chapter describes how to declare user options for customization,
11and also customization groups for classifying them. We use the term
12@dfn{customization item} to include both kinds of customization
13definitions---as well as face definitions (@pxref{Defining Faces}).
14
15@menu
16* Common Keywords:: Common keyword arguments for all kinds of
17 customization declarations.
18* Group Definitions:: Writing customization group definitions.
19* Variable Definitions:: Declaring user options.
20* Customization Types:: Specifying the type of a user option.
21@end menu
22
23@node Common Keywords
24@section Common Item Keywords
25
26@cindex customization keywords
27 All kinds of customization declarations (for variables and groups, and
28for faces) accept keyword arguments for specifying various information.
29This section describes some keywords that apply to all kinds.
30
31 All of these keywords, except @code{:tag}, can be used more than once
32in a given item. Each use of the keyword has an independent effect.
33The keyword @code{:tag} is an exception because any given item can only
34display one name.
35
36@table @code
37@item :tag @var{label}
38@kindex tag@r{, customization keyword}
39Use @var{label}, a string, instead of the item's name, to label the
40item in customization menus and buffers. @strong{Don't use a tag
41which is substantially different from the item's real name; that would
0f631634 42cause confusion.}
b8d4c8d0
GM
43
44@kindex group@r{, customization keyword}
45@item :group @var{group}
46Put this customization item in group @var{group}. When you use
47@code{:group} in a @code{defgroup}, it makes the new group a subgroup of
48@var{group}.
49
50If you use this keyword more than once, you can put a single item into
51more than one group. Displaying any of those groups will show this
52item. Please don't overdo this, since the result would be annoying.
53
54@item :link @var{link-data}
55@kindex link@r{, customization keyword}
56Include an external link after the documentation string for this item.
57This is a sentence containing an active field which references some
58other documentation.
59
60There are several alternatives you can use for @var{link-data}:
61
62@table @code
63@item (custom-manual @var{info-node})
64Link to an Info node; @var{info-node} is a string which specifies the
65node name, as in @code{"(emacs)Top"}. The link appears as
66@samp{[Manual]} in the customization buffer and enters the built-in
67Info reader on @var{info-node}.
68
69@item (info-link @var{info-node})
70Like @code{custom-manual} except that the link appears
71in the customization buffer with the Info node name.
72
73@item (url-link @var{url})
74Link to a web page; @var{url} is a string which specifies the
75@acronym{URL}. The link appears in the customization buffer as
76@var{url} and invokes the WWW browser specified by
77@code{browse-url-browser-function}.
78
79@item (emacs-commentary-link @var{library})
80Link to the commentary section of a library; @var{library} is a string
81which specifies the library name.
82
83@item (emacs-library-link @var{library})
84Link to an Emacs Lisp library file; @var{library} is a string which
85specifies the library name.
86
87@item (file-link @var{file})
88Link to a file; @var{file} is a string which specifies the name of the
89file to visit with @code{find-file} when the user invokes this link.
90
91@item (function-link @var{function})
92Link to the documentation of a function; @var{function} is a string
93which specifies the name of the function to describe with
94@code{describe-function} when the user invokes this link.
95
96@item (variable-link @var{variable})
97Link to the documentation of a variable; @var{variable} is a string
98which specifies the name of the variable to describe with
99@code{describe-variable} when the user invokes this link.
100
101@item (custom-group-link @var{group})
102Link to another customization group. Invoking it creates a new
103customization buffer for @var{group}.
104@end table
105
106You can specify the text to use in the customization buffer by adding
107@code{:tag @var{name}} after the first element of the @var{link-data};
108for example, @code{(info-link :tag "foo" "(emacs)Top")} makes a link to
109the Emacs manual which appears in the buffer as @samp{foo}.
110
111An item can have more than one external link; however, most items have
112none at all.
113
114@item :load @var{file}
115@kindex load@r{, customization keyword}
116Load file @var{file} (a string) before displaying this customization
f6de8a37
CY
117item (@pxref{Loading}). Loading is done with @code{load}, and only if
118the file is not already loaded.
b8d4c8d0
GM
119
120@item :require @var{feature}
121@kindex require@r{, customization keyword}
122Execute @code{(require '@var{feature})} when your saved customizations
123set the value of this item. @var{feature} should be a symbol.
124
125The most common reason to use @code{:require} is when a variable enables
126a feature such as a minor mode, and just setting the variable won't have
127any effect unless the code which implements the mode is loaded.
128
129@item :version @var{version}
130@kindex version@r{, customization keyword}
131This keyword specifies that the item was first introduced in Emacs
132version @var{version}, or that its default value was changed in that
133version. The value @var{version} must be a string.
134
135@item :package-version '(@var{package} . @var{version})
136@kindex package-version@r{, customization keyword}
137This keyword specifies that the item was first introduced in
138@var{package} version @var{version}, or that its meaning or default
139value was changed in that version. The value of @var{package} is a
140symbol and @var{version} is a string.
141
142This keyword takes priority over @code{:version}.
143
144@var{package} should be the official name of the package, such as MH-E
145or Gnus. If the package @var{package} is released as part of Emacs,
146@var{package} and @var{version} should appear in the value of
147@code{customize-package-emacs-version-alist}.
148@end table
149
150Packages distributed as part of Emacs that use the
151@code{:package-version} keyword must also update the
152@code{customize-package-emacs-version-alist} variable.
153
154@defvar customize-package-emacs-version-alist
155This alist provides a mapping for the versions of Emacs that are
156associated with versions of a package listed in the
157@code{:package-version} keyword. Its elements look like this:
158
159@example
160(@var{package} (@var{pversion} . @var{eversion})@dots{})
161@end example
162
163For each @var{package}, which is a symbol, there are one or more
164elements that contain a package version @var{pversion} with an
165associated Emacs version @var{eversion}. These versions are strings.
166For example, the MH-E package updates this alist with the following:
167
168@smallexample
169(add-to-list 'customize-package-emacs-version-alist
170 '(MH-E ("6.0" . "22.1") ("6.1" . "22.1") ("7.0" . "22.1")
171 ("7.1" . "22.1") ("7.2" . "22.1") ("7.3" . "22.1")
172 ("7.4" . "22.1") ("8.0" . "22.1")))
173@end smallexample
174
175The value of @var{package} needs to be unique and it needs to match
176the @var{package} value appearing in the @code{:package-version}
35a30759 177keyword. Since the user might see the value in an error message, a good
b8d4c8d0
GM
178choice is the official name of the package, such as MH-E or Gnus.
179@end defvar
180
181@node Group Definitions
182@section Defining Customization Groups
183@cindex define customization group
184@cindex customization groups, defining
185
186 Each Emacs Lisp package should have one main customization group which
187contains all the options, faces and other groups in the package. If the
188package has a small number of options and faces, use just one group and
189put everything in it. When there are more than twelve or so options and
190faces, then you should structure them into subgroups, and put the
191subgroups under the package's main customization group. It is OK to
192put some of the options and faces in the package's main group alongside
193the subgroups.
194
195 The package's main or only group should be a member of one or more of
196the standard customization groups. (To display the full list of them,
197use @kbd{M-x customize}.) Choose one or more of them (but not too
198many), and add your group to each of them using the @code{:group}
199keyword.
200
201 The way to declare new customization groups is with @code{defgroup}.
202
203@defmac defgroup group members doc [keyword value]@dots{}
204Declare @var{group} as a customization group containing @var{members}.
205Do not quote the symbol @var{group}. The argument @var{doc} specifies
206the documentation string for the group.
207
208The argument @var{members} is a list specifying an initial set of
209customization items to be members of the group. However, most often
210@var{members} is @code{nil}, and you specify the group's members by
211using the @code{:group} keyword when defining those members.
212
213If you want to specify group members through @var{members}, each element
214should have the form @code{(@var{name} @var{widget})}. Here @var{name}
215is a symbol, and @var{widget} is a widget type for editing that symbol.
216Useful widgets are @code{custom-variable} for a variable,
217@code{custom-face} for a face, and @code{custom-group} for a group.
218
219When you introduce a new group into Emacs, use the @code{:version}
220keyword in the @code{defgroup}; then you need not use it for
221the individual members of the group.
222
223In addition to the common keywords (@pxref{Common Keywords}), you can
224also use this keyword in @code{defgroup}:
225
226@table @code
227@item :prefix @var{prefix}
228@kindex prefix@r{, @code{defgroup} keyword}
229If the name of an item in the group starts with @var{prefix}, then the
230tag for that item is constructed (by default) by omitting @var{prefix}.
231
232One group can have any number of prefixes.
233@end table
234@end defmac
235
236 The prefix-discarding feature is currently turned off, which means
237that @code{:prefix} currently has no effect. We did this because we
238found that discarding the specified prefixes often led to confusing
239names for options. This happened because the people who wrote the
240@code{defgroup} definitions for various groups added @code{:prefix}
241keywords whenever they make logical sense---that is, whenever the
242variables in the library have a common prefix.
243
244 In order to obtain good results with @code{:prefix}, it would be
245necessary to check the specific effects of discarding a particular
246prefix, given the specific items in a group and their names and
247documentation. If the resulting text is not clear, then @code{:prefix}
248should not be used in that case.
249
250 It should be possible to recheck all the customization groups, delete
251the @code{:prefix} specifications which give unclear results, and then
252turn this feature back on, if someone would like to do the work.
253
254@node Variable Definitions
255@section Defining Customization Variables
256@cindex define customization options
257@cindex customization variables, how to define
258
259 Use @code{defcustom} to declare user-customizable variables.
260
261@defmac defcustom option standard doc [keyword value]@dots{}
0f631634
CY
262This macro declares @var{option} as a customizable @dfn{user option}.
263You should not quote @var{option}.
264
265This causes the function @code{user-variable-p} to return @code{t}
266when given @var{option} as an argument. @xref{Defining Variables}.
267The argument @var{doc} specifies the documentation string for the
268variable. (Note that there is no need to start @var{doc} with a
269@samp{*}.)
b8d4c8d0
GM
270
271The argument @var{standard} is an expression that specifies the
272standard value for @var{option}. Evaluating the @code{defcustom} form
273evaluates @var{standard}, but does not necessarily install the
274standard value. If @var{option} already has a default value,
275@code{defcustom} does not change it. If the user has saved a
276customization for @var{option}, @code{defcustom} installs the user's
277customized value as @var{option}'s default value. If neither of those
278cases applies, @code{defcustom} installs the result of evaluating
279@var{standard} as the default value.
280
281The expression @var{standard} can be evaluated at various other times,
282too---whenever the customization facility needs to know @var{option}'s
283standard value. So be sure to use an expression which is harmless to
284evaluate at any time. We recommend avoiding backquotes in
285@var{standard}, because they are not expanded when editing the value,
286so list values will appear to have the wrong structure.
287
288Every @code{defcustom} should specify @code{:group} at least once.
289
290If you specify the @code{:set} keyword, to make the variable take other
291special actions when set through the customization buffer, the
292variable's documentation string should tell the user specifically how
293to do the same job in hand-written Lisp code.
294
295When you evaluate a @code{defcustom} form with @kbd{C-M-x} in Emacs Lisp
296mode (@code{eval-defun}), a special feature of @code{eval-defun}
297arranges to set the variable unconditionally, without testing whether
298its value is void. (The same feature applies to @code{defvar}.)
299@xref{Defining Variables}.
437706cd
EZ
300
301If you put a @code{defcustom} in a file that is preloaded at dump time
302(@pxref{Building Emacs}), and the standard value installed for the
303variable at that time might not be correct, use
304@code{custom-reevaluate-setting}, described below, to re-evaluate the
305standard value during or after Emacs startup.
b8d4c8d0
GM
306@end defmac
307
308 @code{defcustom} accepts the following additional keywords:
309
310@table @code
311@item :type @var{type}
312Use @var{type} as the data type for this option. It specifies which
313values are legitimate, and how to display the value.
314@xref{Customization Types}, for more information.
315
316@item :options @var{value-list}
317@kindex options@r{, @code{defcustom} keyword}
318Specify the list of reasonable values for use in this
319option. The user is not restricted to using only these values, but they
320are offered as convenient alternatives.
321
322This is meaningful only for certain types, currently including
323@code{hook}, @code{plist} and @code{alist}. See the definition of the
324individual types for a description of how to use @code{:options}.
325
326@item :set @var{setfunction}
327@kindex set@r{, @code{defcustom} keyword}
328Specify @var{setfunction} as the way to change the value of this
8a20ca4c
LMI
329option when using the Customize user interface. The function
330@var{setfunction} should take two arguments, a symbol (the option
331name) and the new value, and should do whatever is necessary to update
332the value properly for this option (which may not mean simply setting
333the option as a Lisp variable). The default for @var{setfunction} is
334@code{set-default}.
b8d4c8d0
GM
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
3deead93 516* Simple Types:: Simple customization types: sexp, integer, etc.
51d9979c
GM
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.
b8d4c8d0
GM
521@end menu
522
b8d4c8d0
GM
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
530The value may be any Lisp object that can be printed and read back. You
531can use @code{sexp} as a fall-back for any option, if you don't want to
532take the time to work out a more specific type to use.
533
534@item integer
535The value must be an integer, and is represented textually
536in the customization buffer.
537
538@item number
539The value must be a number (floating point or integer), and is
540represented textually in the customization buffer.
541
542@item float
543The value must be a floating point number, and is represented
544textually in the customization buffer.
545
546@item string
547The value must be a string, and the customization buffer shows just the
548contents, with no delimiting @samp{"} characters and no quoting with
549@samp{\}.
550
551@item regexp
552Like @code{string} except that the string must be a valid regular
553expression.
554
555@item character
556The value must be a character code. A character code is actually an
557integer, but this type shows the value by inserting the character in the
558buffer, rather than by showing the number.
559
560@item file
561The value must be a file name, and you can do completion with
562@kbd{M-@key{TAB}}.
563
564@item (file :must-match t)
565The value must be a file name for an existing file, and you can do
566completion with @kbd{M-@key{TAB}}.
567
568@item directory
569The value must be a directory name, and you can do completion with
570@kbd{M-@key{TAB}}.
571
572@item hook
573The value must be a list of functions (or a single function, but that is
574obsolete usage). This customization type is used for hook variables.
575You can use the @code{:options} keyword in a hook variable's
576@code{defcustom} to specify a list of functions recommended for use in
577the hook; see @ref{Variable Definitions}.
578
3deead93
CY
579@item symbol
580The value must be a symbol. It appears in the customization buffer as
581the name of the symbol.
b8d4c8d0 582
3deead93
CY
583@item function
584The value must be either a lambda expression or a function name. When
585it is a function name, you can do completion with @kbd{M-@key{TAB}}.
b8d4c8d0 586
3deead93
CY
587@item variable
588The value must be a variable name, and you can do completion with
589@kbd{M-@key{TAB}}.
590
591@item face
592The value must be a symbol which is a face name, and you can do
593completion with @kbd{M-@key{TAB}}.
594
595@item boolean
596The value is boolean---either @code{nil} or @code{t}. Note that by
597using @code{choice} and @code{const} together (see the next section),
598you can specify that the value must be @code{nil} or @code{t}, but also
599specify the text to describe each value in a way that fits the specific
600meaning of the alternative.
601
602@item coding-system
603The value must be a coding-system name, and you can do completion with
604@kbd{M-@key{TAB}}.
605
606@item color
607The 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
616types, which build new types from other types or from specified data.
617The specified types or data are called the @dfn{arguments} of the
618composite type. The composite type normally looks like this:
619
620@example
621(@var{constructor} @var{arguments}@dots{})
622@end example
b8d4c8d0
GM
623
624@noindent
3deead93
CY
625but you can also add keyword-value pairs before the arguments, like
626this:
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
633composite types:
634
635@table @code
636@item (cons @var{car-type} @var{cdr-type})
637The value must be a cons cell, its @sc{car} must fit @var{car-type}, and
638its @sc{cdr} must fit @var{cdr-type}. For example, @code{(cons string
639symbol)} is a customization type which matches values such as
640@code{("foo" . foo)}.
641
642In the customization buffer, the @sc{car} and the @sc{cdr} are
643displayed and edited separately, each according to the type
644that you specify for it.
645
646@item (list @var{element-types}@dots{})
647The value must be a list with exactly as many elements as the
648@var{element-types} given; and each element must fit the
649corresponding @var{element-type}.
650
651For example, @code{(list integer string function)} describes a list of
652three elements; the first element must be an integer, the second a
653string, and the third a function.
654
655In the customization buffer, each element is displayed and edited
656separately, according to the type specified for it.
657
658@item (group @var{element-types}@dots{})
659This works like @code{list} except for the formatting
660of text in the Custom buffer. @code{list} labels each
661element value with its tag; @code{group} does not.
662
663@item (vector @var{element-types}@dots{})
664Like @code{list} except that the value must be a vector instead of a
665list. The elements work the same as in @code{list}.
666
667@item (alist :key-type @var{key-type} :value-type @var{value-type})
668The value must be a list of cons-cells, the @sc{car} of each cell
669representing 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
672edit both the key and the value of each pair.
673
674If omitted, @var{key-type} and @var{value-type} default to
675@code{sexp}.
b8d4c8d0
GM
676
677The user can add any key matching the specified key type, but you can
678give some keys a preferential treatment by specifying them with the
679@code{:options} (see @ref{Variable Definitions}). The specified keys
680will always be shown in the customize buffer (together with a suitable
681value), with a checkbox to include or exclude or disable the key/value
682pair from the alist. The user will not be able to edit the keys
683specified by the @code{:options} keyword argument.
684
685The argument to the @code{:options} keywords should be a list of
686specifications for reasonable keys in the alist. Ordinarily, they are
687simply atoms, which stand for themselves as. For example:
688
689@smallexample
690:options '("foo" "bar" "baz")
691@end smallexample
692
693@noindent
694specifies that there are three ``known'' keys, namely @code{"foo"},
695@code{"bar"} and @code{"baz"}, which will always be shown first.
696
697You may want to restrict the value type for specific keys, for
698example, the value associated with the @code{"bar"} key can only be an
699integer. You can specify this by using a list instead of an atom in
700the list. The first element will specify the key, like before, while
701the second element will specify the value type. For example:
702
703@smallexample
704:options '("foo" ("bar" integer) "baz")
705@end smallexample
706
707Finally, you may want to change how the key is presented. By default,
708the key is simply shown as a @code{const}, since the user cannot change
709the special keys specified with the @code{:options} keyword. However,
710you 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.
712This is done by using a customization type specification instead of a
713symbol for the key.
714
715@smallexample
716:options '("foo" ((function-item some-function) integer)
717 "baz")
718@end smallexample
719
720Many alists use lists with two elements, instead of cons cells. For
721example,
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
729instead 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
736Because of the way lists are implemented on top of cons cells, you can
737treat @code{list-alist} in the example above as a cons cell alist, where
738the value type is a list with a single element containing the real
739value.
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
747The @code{group} widget is used here instead of @code{list} only because
748the formatting is better suited for the purpose.
749
750Similarly, you can have alists with more values associated with each
751key, 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.
758Each 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.
765In an element (KEY . VALUE), KEY is the person's name,
766and the VALUE is a list of that person's pets."
767 :type '(alist :value-type (repeat string)))
768@end smallexample
769
3deead93
CY
770@item (plist :key-type @var{key-type} :value-type @var{value-type})
771This customization type is similar to @code{alist} (see above), except
772that (i) the information is stored as a property list,
773(@pxref{Property Lists}), and (ii) @var{key-type}, if omitted,
774defaults to @code{symbol} rather than @code{sexp}.
b8d4c8d0
GM
775
776@item (choice @var{alternative-types}@dots{})
777The value must fit at least one of @var{alternative-types}.
778For example, @code{(choice integer string)} allows either an
779integer or a string.
780
781In the customization buffer, the user selects an alternative
782using a menu, and can then edit the value in the usual way for that
783alternative.
784
785Normally the strings in this menu are determined automatically from the
786choices; however, you can specify different strings for the menu by
787including the @code{:tag} keyword in the alternatives. For example, if
788an integer stands for a number of spaces, while a string is text to use
789verbatim, 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
797so that the menu offers @samp{Number of spaces} and @samp{Literal text}.
798
799In any alternative for which @code{nil} is not a valid value, other than
800a @code{const}, you should specify a valid default for that alternative
801using the @code{:value} keyword. @xref{Type Keywords}.
802
803If some values are covered by more than one of the alternatives,
804customize will choose the first alternative that the value fits. This
805means you should always list the most specific types first, and the
806most 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
814This way, the special value @code{nil} is not treated like other
815symbols, and symbols are not treated like other Lisp expressions.
816
817@item (radio @var{element-types}@dots{})
818This is similar to @code{choice}, except that the choices are displayed
819using `radio buttons' rather than a menu. This has the advantage of
820displaying documentation for the choices when applicable and so is often
821a good choice for a choice between constant functions
822(@code{function-item} customization types).
823
824@item (const @var{value})
825The value must be @var{value}---nothing else is allowed.
826
827The 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}.
832For 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
841describes a variable for which @code{t} means yes, @code{nil} means no,
842and @code{foo} means ``ask.''
843
844@item (other @var{value})
845This alternative can match any Lisp value, but if the user chooses this
846alternative, that selects the value @var{value}.
847
848The main use of @code{other} is as the last element of @code{choice}.
849For 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
858describes a variable for which @code{t} means yes, @code{nil} means no,
859and anything else means ``ask.'' If the user chooses @samp{Ask} from
860the menu of alternatives, that specifies the value @code{foo}; but any
861other 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})
865Like @code{const}, but used for values which are functions. This
866displays the documentation string as well as the function name.
867The 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})
871Like @code{const}, but used for values which are variable names. This
872displays the documentation string as well as the variable name. The
873documentation 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{})
877The value must be a list, and each element of the list must match one of
878the @var{types} specified.
879
880This 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
882not possible to specify two different elements that match the same one
883of @var{types}. For example, @code{(set integer symbol)} allows one
884integer and/or one symbol in the list; it does not allow multiple
885integers or multiple symbols. As a result, it is rare to use
886nonspecific types such as @code{integer} in a @code{set}.
887
888Most often, the @var{types} in a @code{set} are @code{const} types, as
889shown here:
890
891@example
892(set (const :bold) (const :italic))
893@end example
894
895Sometimes 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
903That lets the user specify a height value optionally
904and a width value optionally.
905
906@item (repeat @var{element-type})
907The 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
909list of elements, with @samp{[INS]} and @samp{[DEL]} buttons for adding
910more elements or removing elements.
911
912@item (restricted-sexp :match-alternatives @var{criteria})
913This is the most general composite type construct. The value may be
914any Lisp object that satisfies one of @var{criteria}. @var{criteria}
915should be a list, and each element should be one of these
916possibilities:
917
918@itemize @bullet
919@item
920A predicate---that is, a function of one argument that has no side
921effects, and returns either @code{nil} or non-@code{nil} according to
922the argument. Using a predicate in the list says that objects for which
923the predicate returns non-@code{nil} are acceptable.
924
925@item
926A quoted constant---that is, @code{'@var{object}}. This sort of element
927in the list says that @var{object} itself is an acceptable value.
928@end itemize
929
930For example,
931
932@example
933(restricted-sexp :match-alternatives
934 (integerp 't 'nil))
935@end example
936
937@noindent
938allows integers, @code{t} and @code{nil} as legitimate values.
939
940The customization buffer shows all legitimate values using their read
941syntax, 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
945in a composite type:
946
947@table @code
948@item :tag @var{tag}
949Use @var{tag} as the name of this alternative, for user communication
950purposes. 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}
955Use @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}
960Use the elements of @var{argument-list} as the arguments of the type
961construct. For instance, @code{(const :args (foo))} is equivalent to
962@code{(const foo)}. You rarely need to write @code{:args} explicitly,
963because normally the arguments are recognized automatically as
964whatever 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
971elements 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
973element-types of a @code{list} or @code{vector}.
974
975 Normally, each of the element-types in a @code{list} or @code{vector}
976describes one and only one element of the list or vector. Thus, if an
977element-type is a @code{repeat}, that specifies a list of unspecified
978length which appears as one element.
979
980 But when the element-type uses @code{:inline}, the value it matches is
981merged directly into the containing sequence. For example, if it
982matches a list with three elements, those become three elements of the
983overall sequence. This is analogous to using @samp{,@@} in the backquote
984construct.
985
986 For example, to specify a list whose first element must be @code{baz}
987and 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
995This matches values such as @code{(baz)}, @code{(baz foo)}, @code{(baz bar)}
996and @code{(baz foo bar)}.
997
998 When the element-type is a @code{choice}, you use @code{:inline} not
999in 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
1001file name, followed either by the symbol @code{t} or two strings, use
1002this customization type:
1003
1004@example
1005(list file
1006 (choice (const t)
1007 (list :inline t string string)))
1008@end example
1009
1010@noindent
1011If the user chooses the first alternative in the choice, then the
1012overall list has two elements and the second element is @code{t}. If
1013the user chooses the second alternative, then the overall list has three
1014elements and the second and third must be strings.
1015
1016@node Type Keywords
1017@subsection Type Keywords
1018
1019You can specify keyword-argument pairs in a customization type after the
1020type name symbol. Here are the keywords you can use, and their
1021meanings:
1022
1023@table @code
1024@item :value @var{default}
0ec389b9
LMI
1025Provide a default value.
1026
1027If @code{nil} is not a valid value for the alternative, then it is
1028essential to specify a valid default with @code{:value}.
1029
1030If you use this for a type that appears as an alternative inside of
b8d4c8d0
GM
1031@code{choice}; it specifies the default value to use, at first, if and
1032when the user selects this alternative with the menu in the
1033customization buffer.
1034
1035Of course, if the actual value of the option fits this alternative, it
1036will appear showing the actual value, not @var{default}.
1037
b8d4c8d0
GM
1038@item :format @var{format-string}
1039@kindex format@r{, customization keyword}
1040This string will be inserted in the buffer to represent the value
1041corresponding to the type. The following @samp{%} escapes are available
1042for use in @var{format-string}:
1043
1044@table @samp
1045@item %[@var{button}%]
1046Display the text @var{button} marked as a button. The @code{:action}
1047attribute specifies what the button will do if the user invokes it;
1048its value is a function which takes two arguments---the widget which
1049the button appears in, and the event.
1050
1051There is no way to specify two different buttons with different
1052actions.
1053
1054@item %@{@var{sample}%@}
1055Show @var{sample} in a special face specified by @code{:sample-face}.
1056
1057@item %v
1058Substitute the item's value. How the value is represented depends on
1059the kind of item, and (for variables) on the customization type.
1060
1061@item %d
1062Substitute the item's documentation string.
1063
1064@item %h
1065Like @samp{%d}, but if the documentation string is more than one line,
1066add an active field to control whether to show all of it or just the
1067first line.
1068
1069@item %t
1070Substitute the tag here. You specify the tag with the @code{:tag}
1071keyword.
1072
1073@item %%
1074Display a literal @samp{%}.
1075@end table
1076
1077@item :action @var{action}
1078@kindex action@r{, customization keyword}
1079Perform @var{action} if the user clicks on a button.
1080
1081@item :button-face @var{face}
1082@kindex button-face@r{, customization keyword}
1083Use the face @var{face} (a face name or a list of face names) for button
1084text displayed with @samp{%[@dots{}%]}.
1085
1086@item :button-prefix @var{prefix}
1087@itemx :button-suffix @var{suffix}
1088@kindex button-prefix@r{, customization keyword}
1089@kindex button-suffix@r{, customization keyword}
1090These specify the text to display before and after a button.
1091Each can be:
1092
1093@table @asis
1094@item @code{nil}
1095No text is inserted.
1096
1097@item a string
1098The string is inserted literally.
1099
1100@item a symbol
1101The symbol's value is used.
1102@end table
1103
1104@item :tag @var{tag}
1105Use @var{tag} (a string) as the tag for the value (or part of the value)
1106that corresponds to this type.
1107
1108@item :doc @var{doc}
1109@kindex doc@r{, customization keyword}
1110Use @var{doc} as the documentation string for this value (or part of the
1111value) that corresponds to this type. In order for this to work, you
1112must specify a value for @code{:format}, and use @samp{%d} or @samp{%h}
1113in that value.
1114
1115The usual reason to specify a documentation string for a type is to
1116provide more information about the meanings of alternatives inside a
1117@code{:choice} type or the parts of some other composite type.
1118
1119@item :help-echo @var{motion-doc}
1120@kindex help-echo@r{, customization keyword}
1121When you move to this item with @code{widget-forward} or
1122@code{widget-backward}, it will display the string @var{motion-doc} in
1123the echo area. In addition, @var{motion-doc} is used as the mouse
1124@code{help-echo} string and may actually be a function or form evaluated
1125to yield a help string. If it is a function, it is called with one
1126argument, the widget.
1127
1128@item :match @var{function}
1129@kindex match@r{, customization keyword}
1130Specify how to decide whether a value matches the type. The
1131corresponding value, @var{function}, should be a function that accepts
1132two arguments, a widget and a value; it should return non-@code{nil} if
1133the value is acceptable.
1134
72b7e664
RS
1135@item :validate @var{function}
1136Specify a validation function for input. @var{function} takes a
1137widget as an argument, and should return @code{nil} if the widget's
1138current value is valid for the widget. Otherwise, it should return
1139the widget containing the invalid data, and set that widget's
1140@code{:error} property to a string explaining the error.
1141
b8d4c8d0
GM
1142@ignore
1143@item :indent @var{columns}
1144Indent this item by @var{columns} columns. The indentation is used for
1145@samp{%n}, and automatically for group names, for checklists and radio
1146buttons, and for editable lists. It affects the whole of the
1147item except for the first line.
1148
72b7e664
RS
1149@item :offset @var{extra}
1150Indent the subitems of this item @var{extra} columns more than this
1151item itself. By default, subitems are indented the same as their
1152parent.
b8d4c8d0 1153
72b7e664
RS
1154@item :extra-offset @var{n}
1155Add @var{n} extra spaces to this item's indentation, compared to its
1156parent's indentation.
b8d4c8d0 1157
72b7e664
RS
1158@item :notify @var{function}
1159Call @var{function} each time the item or a subitem is changed. The
1160function gets two or three arguments. The first argument is the item
1161itself, the second argument is the item that was changed, and the
1162third argument is the event leading to the change, if any.
b8d4c8d0 1163
72b7e664
RS
1164@item :menu-tag @var{tag-string}
1165Use @var{tag-string} in the menu when the widget is used as an option
1166in a @code{menu-choice} widget.
b8d4c8d0
GM
1167
1168@item :menu-tag-get
1169A function used for finding the tag when the widget is used as an option
1170in a @code{menu-choice} widget. By default, the tag used will be either the
1171@code{:menu-tag} or @code{:tag} property if present, or the @code{princ}
1172representation of the @code{:value} property if not.
1173
b8d4c8d0
GM
1174@item :tab-order
1175Specify the order in which widgets are traversed with
1176@code{widget-forward} or @code{widget-backward}. This is only partially
1177implemented.
1178
1179@enumerate a
1180@item
1181Widgets with tabbing order @code{-1} are ignored.
1182
1183@item
1184(Unimplemented) When on a widget with tabbing order @var{n}, go to the
1185next widget in the buffer with tabbing order @var{n+1} or @code{nil},
1186whichever comes first.
1187
1188@item
1189When on a widget with no tabbing order specified, go to the next widget
1190in the buffer with a positive tabbing order, or @code{nil}
1191@end enumerate
1192
1193@item :parent
1194The parent of a nested widget (e.g., a @code{menu-choice} item or an
1195element of a @code{editable-list} widget).
1196
1197@item :sibling-args
1198This keyword is only used for members of a @code{radio-button-choice} or
1199@code{checklist}. The value should be a list of extra keyword
1200arguments, which will be used when creating the @code{radio-button} or
1201@code{checkbox} associated with this item.
1202@end ignore
1203@end table
1204
1205@node Defining New Types
1206@subsection Defining New Types
1207
1208In the previous sections we have described how to construct elaborate
1209type specifications for @code{defcustom}. In some cases you may want
1210to give such a type specification a name. The obvious case is when
1211you are using the same type for many user options: rather than repeat
1212the specification for each option, you can give the type specification
1213a name, and use that name each @code{defcustom}. The other case is
1214when a user option's value is a recursive data structure. To make it
1215possible for a datatype to refer to itself, it needs to have a name.
1216
1217Since custom types are implemented as widgets, the way to define a new
1218customize type is to define a new widget. We are not going to describe
1219the widget interface here in details, see @ref{Top, , Introduction,
1220widget, The Emacs Widget Library}, for that. Instead we are going to
1221demonstrate the minimal functionality needed for defining new customize
1222types by a simple example.
1223
1224@example
1225(define-widget 'binary-tree-of-string 'lazy
1226 "A binary tree made of cons-cells and strings."
1227 :offset 4
1228 :tag "Node"
1229 :type '(choice (string :tag "Leaf" :value "")
1230 (cons :tag "Interior"
1231 :value ("" . "")
1232 binary-tree-of-string
1233 binary-tree-of-string)))
1234
1235(defcustom foo-bar ""
1236 "Sample variable holding a binary tree of strings."
1237 :type 'binary-tree-of-string)
1238@end example
1239
1240The function to define a new widget is called @code{define-widget}. The
1241first argument is the symbol we want to make a new widget type. The
1242second argument is a symbol representing an existing widget, the new
1243widget is going to be defined in terms of difference from the existing
1244widget. For the purpose of defining new customization types, the
1245@code{lazy} widget is perfect, because it accepts a @code{:type} keyword
1246argument with the same syntax as the keyword argument to
1247@code{defcustom} with the same name. The third argument is a
1248documentation string for the new widget. You will be able to see that
1249string with the @kbd{M-x widget-browse @key{RET} binary-tree-of-string
1250@key{RET}} command.
1251
1252After these mandatory arguments follow the keyword arguments. The most
1253important is @code{:type}, which describes the data type we want to match
1254with this widget. Here a @code{binary-tree-of-string} is described as
1255being either a string, or a cons-cell whose car and cdr are themselves
1256both @code{binary-tree-of-string}. Note the reference to the widget
1257type we are currently in the process of defining. The @code{:tag}
1258attribute is a string to name the widget in the user interface, and the
1259@code{:offset} argument is there to ensure that child nodes are
1260indented four spaces relative to the parent node, making the tree
1261structure apparent in the customization buffer.
1262
1263The @code{defcustom} shows how the new widget can be used as an ordinary
1264customization type.
1265
1266The reason for the name @code{lazy} is that the other composite
1267widgets convert their inferior widgets to internal form when the
1268widget is instantiated in a buffer. This conversion is recursive, so
1269the inferior widgets will convert @emph{their} inferior widgets. If
1270the data structure is itself recursive, this conversion is an infinite
1271recursion. The @code{lazy} widget prevents the recursion: it convert
1272its @code{:type} argument only when needed.