* display.texi (Truncation): Overlays can use line-prefix and
[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,
6ed161e1 4@c 2005, 2006, 2007, 2008, 2009 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
118item. Loading is done with @code{load-library}, and only if the file is
119not already loaded.
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}
0f631634
CY
400Set this variable's @code{risky-local-variable} property to
401@var{value} (@pxref{File Local Variables}).
db21122c
GM
402
403@item :safe @var{function}
404@kindex safe@r{, @code{defcustom} keyword}
0f631634
CY
405Set this variable's @code{safe-local-variable} property to
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
GM
515@menu
516* Simple Types::
517* Composite Types::
518* Splicing into Lists::
519* Type Keywords::
520* Defining New Types::
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
579@item alist
580The value must be a list of cons-cells, the @sc{car} of each cell
581representing a key, and the @sc{cdr} of the same cell representing an
582associated value. The user can add and delete key/value pairs, and
583edit both the key and the value of each pair.
584
585You can specify the key and value types like this:
586
587@smallexample
588(alist :key-type @var{key-type} :value-type @var{value-type})
589@end smallexample
590
591@noindent
592where @var{key-type} and @var{value-type} are customization type
593specifications. The default key type is @code{sexp}, and the default
594value type is @code{sexp}.
595
596The user can add any key matching the specified key type, but you can
597give some keys a preferential treatment by specifying them with the
598@code{:options} (see @ref{Variable Definitions}). The specified keys
599will always be shown in the customize buffer (together with a suitable
600value), with a checkbox to include or exclude or disable the key/value
601pair from the alist. The user will not be able to edit the keys
602specified by the @code{:options} keyword argument.
603
604The argument to the @code{:options} keywords should be a list of
605specifications for reasonable keys in the alist. Ordinarily, they are
606simply atoms, which stand for themselves as. For example:
607
608@smallexample
609:options '("foo" "bar" "baz")
610@end smallexample
611
612@noindent
613specifies that there are three ``known'' keys, namely @code{"foo"},
614@code{"bar"} and @code{"baz"}, which will always be shown first.
615
616You may want to restrict the value type for specific keys, for
617example, the value associated with the @code{"bar"} key can only be an
618integer. You can specify this by using a list instead of an atom in
619the list. The first element will specify the key, like before, while
620the second element will specify the value type. For example:
621
622@smallexample
623:options '("foo" ("bar" integer) "baz")
624@end smallexample
625
626Finally, you may want to change how the key is presented. By default,
627the key is simply shown as a @code{const}, since the user cannot change
628the special keys specified with the @code{:options} keyword. However,
629you may want to use a more specialized type for presenting the key, like
630@code{function-item} if you know it is a symbol with a function binding.
631This is done by using a customization type specification instead of a
632symbol for the key.
633
634@smallexample
635:options '("foo" ((function-item some-function) integer)
636 "baz")
637@end smallexample
638
639Many alists use lists with two elements, instead of cons cells. For
640example,
641
642@smallexample
643(defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
644 "Each element is a list of the form (KEY VALUE).")
645@end smallexample
646
647@noindent
648instead of
649
650@smallexample
651(defcustom cons-alist '(("foo" . 1) ("bar" . 2) ("baz" . 3))
652 "Each element is a cons-cell (KEY . VALUE).")
653@end smallexample
654
655Because of the way lists are implemented on top of cons cells, you can
656treat @code{list-alist} in the example above as a cons cell alist, where
657the value type is a list with a single element containing the real
658value.
659
660@smallexample
661(defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
662 "Each element is a list of the form (KEY VALUE)."
663 :type '(alist :value-type (group integer)))
664@end smallexample
665
666The @code{group} widget is used here instead of @code{list} only because
667the formatting is better suited for the purpose.
668
669Similarly, you can have alists with more values associated with each
670key, using variations of this trick:
671
672@smallexample
673(defcustom person-data '(("brian" 50 t)
674 ("dorith" 55 nil)
675 ("ken" 52 t))
676 "Alist of basic info about people.
677Each element has the form (NAME AGE MALE-FLAG)."
678 :type '(alist :value-type (group integer boolean)))
679
680(defcustom pets '(("brian")
681 ("dorith" "dog" "guppy")
682 ("ken" "cat"))
683 "Alist of people's pets.
684In an element (KEY . VALUE), KEY is the person's name,
685and the VALUE is a list of that person's pets."
686 :type '(alist :value-type (repeat string)))
687@end smallexample
688
689@item plist
690The @code{plist} custom type is similar to the @code{alist} (see above),
691except that the information is stored as a property list, i.e. a list of
692this form:
693
694@smallexample
695(@var{key} @var{value} @var{key} @var{value} @var{key} @var{value} @dots{})
696@end smallexample
697
698The default @code{:key-type} for @code{plist} is @code{symbol},
699rather than @code{sexp}.
700
701@item symbol
702The value must be a symbol. It appears in the customization buffer as
703the name of the symbol.
704
705@item function
706The value must be either a lambda expression or a function name. When
707it is a function name, you can do completion with @kbd{M-@key{TAB}}.
708
709@item variable
710The value must be a variable name, and you can do completion with
711@kbd{M-@key{TAB}}.
712
713@item face
714The value must be a symbol which is a face name, and you can do
715completion with @kbd{M-@key{TAB}}.
716
717@item boolean
718The value is boolean---either @code{nil} or @code{t}. Note that by
719using @code{choice} and @code{const} together (see the next section),
720you can specify that the value must be @code{nil} or @code{t}, but also
721specify the text to describe each value in a way that fits the specific
722meaning of the alternative.
723
724@item coding-system
725The value must be a coding-system name, and you can do completion with
726@kbd{M-@key{TAB}}.
727
728@item color
729The value must be a valid color name, and you can do completion with
730@kbd{M-@key{TAB}}. A sample is provided.
731@end table
732
733@node Composite Types
734@subsection Composite Types
735@cindex Composite Types (customization)
736
737 When none of the simple types is appropriate, you can use composite
738types, which build new types from other types or from specified data.
739The specified types or data are called the @dfn{arguments} of the
740composite type. The composite type normally looks like this:
741
742@example
743(@var{constructor} @var{arguments}@dots{})
744@end example
745
746@noindent
747but you can also add keyword-value pairs before the arguments, like
748this:
749
750@example
751(@var{constructor} @r{@{}@var{keyword} @var{value}@r{@}}@dots{} @var{arguments}@dots{})
752@end example
753
754 Here is a table of constructors and how to use them to write
755composite types:
756
757@table @code
758@item (cons @var{car-type} @var{cdr-type})
759The value must be a cons cell, its @sc{car} must fit @var{car-type}, and
760its @sc{cdr} must fit @var{cdr-type}. For example, @code{(cons string
761symbol)} is a customization type which matches values such as
762@code{("foo" . foo)}.
763
764In the customization buffer, the @sc{car} and the @sc{cdr} are
765displayed and edited separately, each according to the type
766that you specify for it.
767
768@item (list @var{element-types}@dots{})
769The value must be a list with exactly as many elements as the
770@var{element-types} given; and each element must fit the
771corresponding @var{element-type}.
772
773For example, @code{(list integer string function)} describes a list of
774three elements; the first element must be an integer, the second a
775string, and the third a function.
776
777In the customization buffer, each element is displayed and edited
778separately, according to the type specified for it.
779
61a2fe01
RS
780@item (group @var{element-types}@dots{})
781This works like @code{list} except for the formatting
782of text in the Custom buffer. @code{list} labels each
783element value with its tag; @code{group} does not.
784
b8d4c8d0
GM
785@item (vector @var{element-types}@dots{})
786Like @code{list} except that the value must be a vector instead of a
787list. The elements work the same as in @code{list}.
788
789@item (choice @var{alternative-types}@dots{})
790The value must fit at least one of @var{alternative-types}.
791For example, @code{(choice integer string)} allows either an
792integer or a string.
793
794In the customization buffer, the user selects an alternative
795using a menu, and can then edit the value in the usual way for that
796alternative.
797
798Normally the strings in this menu are determined automatically from the
799choices; however, you can specify different strings for the menu by
800including the @code{:tag} keyword in the alternatives. For example, if
801an integer stands for a number of spaces, while a string is text to use
802verbatim, you might write the customization type this way,
803
804@example
805(choice (integer :tag "Number of spaces")
806 (string :tag "Literal text"))
807@end example
808
809@noindent
810so that the menu offers @samp{Number of spaces} and @samp{Literal text}.
811
812In any alternative for which @code{nil} is not a valid value, other than
813a @code{const}, you should specify a valid default for that alternative
814using the @code{:value} keyword. @xref{Type Keywords}.
815
816If some values are covered by more than one of the alternatives,
817customize will choose the first alternative that the value fits. This
818means you should always list the most specific types first, and the
819most general last. Here's an example of proper usage:
820
821@example
822(choice (const :tag "Off" nil)
823 symbol (sexp :tag "Other"))
824@end example
825
826@noindent
827This way, the special value @code{nil} is not treated like other
828symbols, and symbols are not treated like other Lisp expressions.
829
830@item (radio @var{element-types}@dots{})
831This is similar to @code{choice}, except that the choices are displayed
832using `radio buttons' rather than a menu. This has the advantage of
833displaying documentation for the choices when applicable and so is often
834a good choice for a choice between constant functions
835(@code{function-item} customization types).
836
837@item (const @var{value})
838The value must be @var{value}---nothing else is allowed.
839
840The main use of @code{const} is inside of @code{choice}. For example,
841@code{(choice integer (const nil))} allows either an integer or
842@code{nil}.
843
844@code{:tag} is often used with @code{const}, inside of @code{choice}.
845For example,
846
847@example
848(choice (const :tag "Yes" t)
849 (const :tag "No" nil)
850 (const :tag "Ask" foo))
851@end example
852
853@noindent
854describes a variable for which @code{t} means yes, @code{nil} means no,
855and @code{foo} means ``ask.''
856
857@item (other @var{value})
858This alternative can match any Lisp value, but if the user chooses this
859alternative, that selects the value @var{value}.
860
861The main use of @code{other} is as the last element of @code{choice}.
862For example,
863
864@example
865(choice (const :tag "Yes" t)
866 (const :tag "No" nil)
867 (other :tag "Ask" foo))
868@end example
869
870@noindent
871describes a variable for which @code{t} means yes, @code{nil} means no,
872and anything else means ``ask.'' If the user chooses @samp{Ask} from
873the menu of alternatives, that specifies the value @code{foo}; but any
874other value (not @code{t}, @code{nil} or @code{foo}) displays as
875@samp{Ask}, just like @code{foo}.
876
877@item (function-item @var{function})
878Like @code{const}, but used for values which are functions. This
879displays the documentation string as well as the function name.
880The documentation string is either the one you specify with
881@code{:doc}, or @var{function}'s own documentation string.
882
883@item (variable-item @var{variable})
884Like @code{const}, but used for values which are variable names. This
885displays the documentation string as well as the variable name. The
886documentation string is either the one you specify with @code{:doc}, or
887@var{variable}'s own documentation string.
888
889@item (set @var{types}@dots{})
890The value must be a list, and each element of the list must match one of
891the @var{types} specified.
892
893This appears in the customization buffer as a checklist, so that each of
894@var{types} may have either one corresponding element or none. It is
895not possible to specify two different elements that match the same one
896of @var{types}. For example, @code{(set integer symbol)} allows one
897integer and/or one symbol in the list; it does not allow multiple
898integers or multiple symbols. As a result, it is rare to use
899nonspecific types such as @code{integer} in a @code{set}.
900
901Most often, the @var{types} in a @code{set} are @code{const} types, as
902shown here:
903
904@example
905(set (const :bold) (const :italic))
906@end example
907
908Sometimes they describe possible elements in an alist:
909
910@example
911(set (cons :tag "Height" (const height) integer)
912 (cons :tag "Width" (const width) integer))
913@end example
914
915@noindent
916That lets the user specify a height value optionally
917and a width value optionally.
918
919@item (repeat @var{element-type})
920The value must be a list and each element of the list must fit the type
921@var{element-type}. This appears in the customization buffer as a
922list of elements, with @samp{[INS]} and @samp{[DEL]} buttons for adding
923more elements or removing elements.
924
925@item (restricted-sexp :match-alternatives @var{criteria})
926This is the most general composite type construct. The value may be
927any Lisp object that satisfies one of @var{criteria}. @var{criteria}
928should be a list, and each element should be one of these
929possibilities:
930
931@itemize @bullet
932@item
933A predicate---that is, a function of one argument that has no side
934effects, and returns either @code{nil} or non-@code{nil} according to
935the argument. Using a predicate in the list says that objects for which
936the predicate returns non-@code{nil} are acceptable.
937
938@item
939A quoted constant---that is, @code{'@var{object}}. This sort of element
940in the list says that @var{object} itself is an acceptable value.
941@end itemize
942
943For example,
944
945@example
946(restricted-sexp :match-alternatives
947 (integerp 't 'nil))
948@end example
949
950@noindent
951allows integers, @code{t} and @code{nil} as legitimate values.
952
953The customization buffer shows all legitimate values using their read
954syntax, and the user edits them textually.
955@end table
956
957 Here is a table of the keywords you can use in keyword-value pairs
958in a composite type:
959
960@table @code
961@item :tag @var{tag}
962Use @var{tag} as the name of this alternative, for user communication
963purposes. This is useful for a type that appears inside of a
964@code{choice}.
965
966@item :match-alternatives @var{criteria}
967@kindex match-alternatives@r{, customization keyword}
968Use @var{criteria} to match possible values. This is used only in
969@code{restricted-sexp}.
970
971@item :args @var{argument-list}
972@kindex args@r{, customization keyword}
973Use the elements of @var{argument-list} as the arguments of the type
974construct. For instance, @code{(const :args (foo))} is equivalent to
975@code{(const foo)}. You rarely need to write @code{:args} explicitly,
976because normally the arguments are recognized automatically as
977whatever follows the last keyword-value pair.
978@end table
979
980@node Splicing into Lists
981@subsection Splicing into Lists
982
983 The @code{:inline} feature lets you splice a variable number of
984elements into the middle of a list or vector. You use it in a
985@code{set}, @code{choice} or @code{repeat} type which appears among the
986element-types of a @code{list} or @code{vector}.
987
988 Normally, each of the element-types in a @code{list} or @code{vector}
989describes one and only one element of the list or vector. Thus, if an
990element-type is a @code{repeat}, that specifies a list of unspecified
991length which appears as one element.
992
993 But when the element-type uses @code{:inline}, the value it matches is
994merged directly into the containing sequence. For example, if it
995matches a list with three elements, those become three elements of the
996overall sequence. This is analogous to using @samp{,@@} in the backquote
997construct.
998
999 For example, to specify a list whose first element must be @code{baz}
1000and whose remaining arguments should be zero or more of @code{foo} and
1001@code{bar}, use this customization type:
1002
1003@example
1004(list (const baz) (set :inline t (const foo) (const bar)))
1005@end example
1006
1007@noindent
1008This matches values such as @code{(baz)}, @code{(baz foo)}, @code{(baz bar)}
1009and @code{(baz foo bar)}.
1010
1011 When the element-type is a @code{choice}, you use @code{:inline} not
1012in the @code{choice} itself, but in (some of) the alternatives of the
1013@code{choice}. For example, to match a list which must start with a
1014file name, followed either by the symbol @code{t} or two strings, use
1015this customization type:
1016
1017@example
1018(list file
1019 (choice (const t)
1020 (list :inline t string string)))
1021@end example
1022
1023@noindent
1024If the user chooses the first alternative in the choice, then the
1025overall list has two elements and the second element is @code{t}. If
1026the user chooses the second alternative, then the overall list has three
1027elements and the second and third must be strings.
1028
1029@node Type Keywords
1030@subsection Type Keywords
1031
1032You can specify keyword-argument pairs in a customization type after the
1033type name symbol. Here are the keywords you can use, and their
1034meanings:
1035
1036@table @code
1037@item :value @var{default}
1038This is used for a type that appears as an alternative inside of
1039@code{choice}; it specifies the default value to use, at first, if and
1040when the user selects this alternative with the menu in the
1041customization buffer.
1042
1043Of course, if the actual value of the option fits this alternative, it
1044will appear showing the actual value, not @var{default}.
1045
1046If @code{nil} is not a valid value for the alternative, then it is
1047essential to specify a valid default with @code{:value}.
1048
1049@item :format @var{format-string}
1050@kindex format@r{, customization keyword}
1051This string will be inserted in the buffer to represent the value
1052corresponding to the type. The following @samp{%} escapes are available
1053for use in @var{format-string}:
1054
1055@table @samp
1056@item %[@var{button}%]
1057Display the text @var{button} marked as a button. The @code{:action}
1058attribute specifies what the button will do if the user invokes it;
1059its value is a function which takes two arguments---the widget which
1060the button appears in, and the event.
1061
1062There is no way to specify two different buttons with different
1063actions.
1064
1065@item %@{@var{sample}%@}
1066Show @var{sample} in a special face specified by @code{:sample-face}.
1067
1068@item %v
1069Substitute the item's value. How the value is represented depends on
1070the kind of item, and (for variables) on the customization type.
1071
1072@item %d
1073Substitute the item's documentation string.
1074
1075@item %h
1076Like @samp{%d}, but if the documentation string is more than one line,
1077add an active field to control whether to show all of it or just the
1078first line.
1079
1080@item %t
1081Substitute the tag here. You specify the tag with the @code{:tag}
1082keyword.
1083
1084@item %%
1085Display a literal @samp{%}.
1086@end table
1087
1088@item :action @var{action}
1089@kindex action@r{, customization keyword}
1090Perform @var{action} if the user clicks on a button.
1091
1092@item :button-face @var{face}
1093@kindex button-face@r{, customization keyword}
1094Use the face @var{face} (a face name or a list of face names) for button
1095text displayed with @samp{%[@dots{}%]}.
1096
1097@item :button-prefix @var{prefix}
1098@itemx :button-suffix @var{suffix}
1099@kindex button-prefix@r{, customization keyword}
1100@kindex button-suffix@r{, customization keyword}
1101These specify the text to display before and after a button.
1102Each can be:
1103
1104@table @asis
1105@item @code{nil}
1106No text is inserted.
1107
1108@item a string
1109The string is inserted literally.
1110
1111@item a symbol
1112The symbol's value is used.
1113@end table
1114
1115@item :tag @var{tag}
1116Use @var{tag} (a string) as the tag for the value (or part of the value)
1117that corresponds to this type.
1118
1119@item :doc @var{doc}
1120@kindex doc@r{, customization keyword}
1121Use @var{doc} as the documentation string for this value (or part of the
1122value) that corresponds to this type. In order for this to work, you
1123must specify a value for @code{:format}, and use @samp{%d} or @samp{%h}
1124in that value.
1125
1126The usual reason to specify a documentation string for a type is to
1127provide more information about the meanings of alternatives inside a
1128@code{:choice} type or the parts of some other composite type.
1129
1130@item :help-echo @var{motion-doc}
1131@kindex help-echo@r{, customization keyword}
1132When you move to this item with @code{widget-forward} or
1133@code{widget-backward}, it will display the string @var{motion-doc} in
1134the echo area. In addition, @var{motion-doc} is used as the mouse
1135@code{help-echo} string and may actually be a function or form evaluated
1136to yield a help string. If it is a function, it is called with one
1137argument, the widget.
1138
1139@item :match @var{function}
1140@kindex match@r{, customization keyword}
1141Specify how to decide whether a value matches the type. The
1142corresponding value, @var{function}, should be a function that accepts
1143two arguments, a widget and a value; it should return non-@code{nil} if
1144the value is acceptable.
1145
72b7e664
RS
1146@item :validate @var{function}
1147Specify a validation function for input. @var{function} takes a
1148widget as an argument, and should return @code{nil} if the widget's
1149current value is valid for the widget. Otherwise, it should return
1150the widget containing the invalid data, and set that widget's
1151@code{:error} property to a string explaining the error.
1152
b8d4c8d0
GM
1153@ignore
1154@item :indent @var{columns}
1155Indent this item by @var{columns} columns. The indentation is used for
1156@samp{%n}, and automatically for group names, for checklists and radio
1157buttons, and for editable lists. It affects the whole of the
1158item except for the first line.
1159
72b7e664
RS
1160@item :offset @var{extra}
1161Indent the subitems of this item @var{extra} columns more than this
1162item itself. By default, subitems are indented the same as their
1163parent.
b8d4c8d0 1164
72b7e664
RS
1165@item :extra-offset @var{n}
1166Add @var{n} extra spaces to this item's indentation, compared to its
1167parent's indentation.
b8d4c8d0 1168
72b7e664
RS
1169@item :notify @var{function}
1170Call @var{function} each time the item or a subitem is changed. The
1171function gets two or three arguments. The first argument is the item
1172itself, the second argument is the item that was changed, and the
1173third argument is the event leading to the change, if any.
b8d4c8d0 1174
72b7e664
RS
1175@item :menu-tag @var{tag-string}
1176Use @var{tag-string} in the menu when the widget is used as an option
1177in a @code{menu-choice} widget.
b8d4c8d0
GM
1178
1179@item :menu-tag-get
1180A function used for finding the tag when the widget is used as an option
1181in a @code{menu-choice} widget. By default, the tag used will be either the
1182@code{:menu-tag} or @code{:tag} property if present, or the @code{princ}
1183representation of the @code{:value} property if not.
1184
b8d4c8d0
GM
1185@item :tab-order
1186Specify the order in which widgets are traversed with
1187@code{widget-forward} or @code{widget-backward}. This is only partially
1188implemented.
1189
1190@enumerate a
1191@item
1192Widgets with tabbing order @code{-1} are ignored.
1193
1194@item
1195(Unimplemented) When on a widget with tabbing order @var{n}, go to the
1196next widget in the buffer with tabbing order @var{n+1} or @code{nil},
1197whichever comes first.
1198
1199@item
1200When on a widget with no tabbing order specified, go to the next widget
1201in the buffer with a positive tabbing order, or @code{nil}
1202@end enumerate
1203
1204@item :parent
1205The parent of a nested widget (e.g., a @code{menu-choice} item or an
1206element of a @code{editable-list} widget).
1207
1208@item :sibling-args
1209This keyword is only used for members of a @code{radio-button-choice} or
1210@code{checklist}. The value should be a list of extra keyword
1211arguments, which will be used when creating the @code{radio-button} or
1212@code{checkbox} associated with this item.
1213@end ignore
1214@end table
1215
1216@node Defining New Types
1217@subsection Defining New Types
1218
1219In the previous sections we have described how to construct elaborate
1220type specifications for @code{defcustom}. In some cases you may want
1221to give such a type specification a name. The obvious case is when
1222you are using the same type for many user options: rather than repeat
1223the specification for each option, you can give the type specification
1224a name, and use that name each @code{defcustom}. The other case is
1225when a user option's value is a recursive data structure. To make it
1226possible for a datatype to refer to itself, it needs to have a name.
1227
1228Since custom types are implemented as widgets, the way to define a new
1229customize type is to define a new widget. We are not going to describe
1230the widget interface here in details, see @ref{Top, , Introduction,
1231widget, The Emacs Widget Library}, for that. Instead we are going to
1232demonstrate the minimal functionality needed for defining new customize
1233types by a simple example.
1234
1235@example
1236(define-widget 'binary-tree-of-string 'lazy
1237 "A binary tree made of cons-cells and strings."
1238 :offset 4
1239 :tag "Node"
1240 :type '(choice (string :tag "Leaf" :value "")
1241 (cons :tag "Interior"
1242 :value ("" . "")
1243 binary-tree-of-string
1244 binary-tree-of-string)))
1245
1246(defcustom foo-bar ""
1247 "Sample variable holding a binary tree of strings."
1248 :type 'binary-tree-of-string)
1249@end example
1250
1251The function to define a new widget is called @code{define-widget}. The
1252first argument is the symbol we want to make a new widget type. The
1253second argument is a symbol representing an existing widget, the new
1254widget is going to be defined in terms of difference from the existing
1255widget. For the purpose of defining new customization types, the
1256@code{lazy} widget is perfect, because it accepts a @code{:type} keyword
1257argument with the same syntax as the keyword argument to
1258@code{defcustom} with the same name. The third argument is a
1259documentation string for the new widget. You will be able to see that
1260string with the @kbd{M-x widget-browse @key{RET} binary-tree-of-string
1261@key{RET}} command.
1262
1263After these mandatory arguments follow the keyword arguments. The most
1264important is @code{:type}, which describes the data type we want to match
1265with this widget. Here a @code{binary-tree-of-string} is described as
1266being either a string, or a cons-cell whose car and cdr are themselves
1267both @code{binary-tree-of-string}. Note the reference to the widget
1268type we are currently in the process of defining. The @code{:tag}
1269attribute is a string to name the widget in the user interface, and the
1270@code{:offset} argument is there to ensure that child nodes are
1271indented four spaces relative to the parent node, making the tree
1272structure apparent in the customization buffer.
1273
1274The @code{defcustom} shows how the new widget can be used as an ordinary
1275customization type.
1276
1277The reason for the name @code{lazy} is that the other composite
1278widgets convert their inferior widgets to internal form when the
1279widget is instantiated in a buffer. This conversion is recursive, so
1280the inferior widgets will convert @emph{their} inferior widgets. If
1281the data structure is itself recursive, this conversion is an infinite
1282recursion. The @code{lazy} widget prevents the recursion: it convert
1283its @code{:type} argument only when needed.
1284
1285@ignore
1286 arch-tag: d1b8fad3-f48c-4ce4-a402-f73b5ef19bd2
1287@end ignore