Correct the explanation of glyphs and glyph table.
[bpt/emacs.git] / lispref / customize.texi
CommitLineData
cc6d0d2c
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
241f79af 3@c Copyright (C) 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
cc6d0d2c
RS
4@c See the file elisp.texi for copying conditions.
5@setfilename ../info/customize
6@node Customization, Loading, Macros, Top
7@chapter Writing Customization Definitions
8
969fe9b5
RS
9 This chapter describes how to declare user options for customization,
10and also customization groups for classifying them. We use the term
11@dfn{customization item} to include both kinds of customization
12definitions---as well as face definitions (@pxref{Defining Faces}).
cc6d0d2c
RS
13
14@menu
15* Common Keywords::
16* Group Definitions::
17* Variable Definitions::
cc6d0d2c
RS
18* Customization Types::
19@end menu
20
21@node Common Keywords
8241495d 22@section Common Item Keywords
cc6d0d2c 23
969fe9b5
RS
24 All kinds of customization declarations (for variables and groups, and
25for faces) accept keyword arguments for specifying various information.
26This section describes some keywords that apply to all kinds.
cc6d0d2c 27
969fe9b5
RS
28 All of these keywords, except @code{:tag}, can be used more than once
29in a given item. Each use of the keyword has an independent effect.
30The keyword @code{:tag} is an exception because any given item can only
31display one name.
cc6d0d2c
RS
32
33@table @code
8241495d
RS
34@item :tag @var{label}
35Use @var{label}, a string, instead of the item's name, to label the item
a9f0a989
RS
36in customization menus and buffers.
37
cc6d0d2c
RS
38@item :group @var{group}
39Put this customization item in group @var{group}. When you use
40@code{:group} in a @code{defgroup}, it makes the new group a subgroup of
41@var{group}.
42
43If you use this keyword more than once, you can put a single item into
44more than one group. Displaying any of those groups will show this
8241495d 45item. Please don't overdo this, since the result would be annoying.
cc6d0d2c
RS
46
47@item :link @var{link-data}
48Include an external link after the documentation string for this item.
49This is a sentence containing an active field which references some
50other documentation.
51
8f626a4c 52There are four alternatives you can use for @var{link-data}:
cc6d0d2c
RS
53
54@table @code
55@item (custom-manual @var{info-node})
56Link to an Info node; @var{info-node} is a string which specifies the
57node name, as in @code{"(emacs)Top"}. The link appears as
58@samp{[manual]} in the customization buffer.
59
60@item (info-link @var{info-node})
61Like @code{custom-manual} except that the link appears
62in the customization buffer with the Info node name.
63
64@item (url-link @var{url})
969fe9b5
RS
65Link to a web page; @var{url} is a string which specifies the @sc{url}.
66The link appears in the customization buffer as @var{url}.
5e0c8a23
DL
67
68@item (emacs-commentary-link @var{library})
69Link to the commentary section of a library; @var{library} is a string
70which specifies the library name.
cc6d0d2c
RS
71@end table
72
73You can specify the text to use in the customization buffer by adding
74@code{:tag @var{name}} after the first element of the @var{link-data};
75for example, @code{(info-link :tag "foo" "(emacs)Top")} makes a link to
76the Emacs manual which appears in the buffer as @samp{foo}.
77
78An item can have more than one external link; however, most items have
79none at all.
80
81@item :load @var{file}
82Load file @var{file} (a string) before displaying this customization
83item. Loading is done with @code{load-library}, and only if the file is
84not already loaded.
85
86@item :require @var{feature}
87Require feature @var{feature} (a symbol) when installing a value for
88this item (an option or a face) that was saved using the customization
89feature. This is done by calling @code{require}.
90
91The most common reason to use @code{:require} is when a variable enables
92a feature such as a minor mode, and just setting the variable won't have
93any effect unless the code which implements the mode is loaded.
cc6d0d2c
RS
94@end table
95
96@node Group Definitions
97@section Defining Custom Groups
98
969fe9b5 99 Each Emacs Lisp package should have one main customization group which
cc6d0d2c
RS
100contains all the options, faces and other groups in the package. If the
101package has a small number of options and faces, use just one group and
102put everything in it. When there are more than twelve or so options and
103faces, then you should structure them into subgroups, and put the
969fe9b5
RS
104subgroups under the package's main customization group. It is OK to
105put some of the options and faces in the package's main group alongside
cc6d0d2c
RS
106the subgroups.
107
969fe9b5
RS
108 The package's main or only group should be a member of one or more of
109the standard customization groups. (To display the full list of them,
110use @kbd{M-x customize}.) Choose one or more of them (but not too
111many), and add your group to each of them using the @code{:group}
112keyword.
cc6d0d2c 113
969fe9b5 114 The way to declare new customization groups is with @code{defgroup}.
cc6d0d2c 115
cc6d0d2c
RS
116@defmac defgroup group members doc [keyword value]...
117Declare @var{group} as a customization group containing @var{members}.
118Do not quote the symbol @var{group}. The argument @var{doc} specifies
8241495d
RS
119the documentation string for the group. It should not start with a
120@samp{*} as in @code{defcustom}; that convention is for variables only.
cc6d0d2c 121
a9f0a989
RS
122The argument @var{members} is a list specifying an initial set of
123customization items to be members of the group. However, most often
969fe9b5
RS
124@var{members} is @code{nil}, and you specify the group's members by
125using the @code{:group} keyword when defining those members.
cc6d0d2c 126
a9f0a989
RS
127If you want to specify group members through @var{members}, each element
128should have the form @code{(@var{name} @var{widget})}. Here @var{name}
129is a symbol, and @var{widget} is a widget type for editing that symbol.
130Useful widgets are @code{custom-variable} for a variable,
131@code{custom-face} for a face, and @code{custom-group} for a group.
cc6d0d2c 132
3d66f910
DL
133When a new group is introduced into Emacs, use this keyword in
134@code{defgroup}:
135
136@table @code
137@item :version @var{version}
138This option specifies that the group was first introduced in Emacs
139version @var{version}. The value @var{version} must be a string.
140@end table
141
142Tag the group with a version like this when it is introduced, rather
143than the individual members (@pxref{Variable Definitions}).
144
cc6d0d2c 145In addition to the common keywords (@pxref{Common Keywords}), you can
3d66f910 146also use this keyword in @code{defgroup}:
cc6d0d2c
RS
147
148@table @code
149@item :prefix @var{prefix}
150If the name of an item in the group starts with @var{prefix}, then the
151tag for that item is constructed (by default) by omitting @var{prefix}.
152
153One group can have any number of prefixes.
154@end table
155@end defmac
156
969fe9b5
RS
157 The prefix-discarding feature is currently turned off, which means
158that @code{:prefix} currently has no effect. We did this because we
159found that discarding the specified prefixes often led to confusing
160names for options. This happened because the people who wrote the
161@code{defgroup} definitions for various groups added @code{:prefix}
162keywords whenever they make logical sense---that is, whenever the
163variables in the library have a common prefix.
164
165 In order to obtain good results with @code{:prefix}, it would be
166necessary to check the specific effects of discarding a particular
167prefix, given the specific items in a group and their names and
168documentation. If the resulting text is not clear, then @code{:prefix}
169should not be used in that case.
170
171 It should be possible to recheck all the customization groups, delete
cc6d0d2c
RS
172the @code{:prefix} specifications which give unclear results, and then
173turn this feature back on, if someone would like to do the work.
174
175@node Variable Definitions
176@section Defining Customization Variables
177
969fe9b5 178 Use @code{defcustom} to declare user-editable variables.
cc6d0d2c 179
4577e8cc 180@defmac defcustom option default doc [keyword value]@dots{}
969fe9b5
RS
181Declare @var{option} as a customizable user option variable. Do not
182quote @var{option}. The argument @var{doc} specifies the documentation
4577e8cc
DL
183string for the variable. It should often start with a @samp{*} to mark
184it as a @dfn{user option} (@pxref{Defining Variables}). Do not start
185the documentation string with @samp{*} for options which cannot or
186normally should not be set with @code{set-variable}; examples of the
187former are global minor mode options such as
188@code{global-font-lock-mode} and examples of the latter are hooks.
969fe9b5
RS
189
190If @var{option} is void, @code{defcustom} initializes it to
191@var{default}. @var{default} should be an expression to compute the
a9f0a989 192value; be careful in writing it, because it can be evaluated on more
4577e8cc
DL
193than one occasion. You should normally avoid using backquotes in
194@var{default} because they are not expanded when editing the value,
195causing list values to appear to have the wrong structure.
8241495d
RS
196
197When you evaluate a @code{defcustom} form with @kbd{C-M-x} in Emacs Lisp
198mode (@code{eval-defun}), a special feature of @code{eval-defun}
199arranges to set the variable unconditionally, without testing whether
200its value is void. (The same feature applies to @code{defvar}.)
201@xref{Defining Variables}.
7dd3d99f 202@end defmac
cc6d0d2c 203
7dd3d99f 204 @code{defcustom} accepts the following additional keywords:
cc6d0d2c
RS
205
206@table @code
207@item :type @var{type}
208Use @var{type} as the data type for this option. It specifies which
209values are legitimate, and how to display the value.
210@xref{Customization Types}, for more information.
211
212@item :options @var{list}
213Specify @var{list} as the list of reasonable values for use in this
b6954afd
RS
214option. The user is not restricted to using only these values, but they
215are offered as convenient alternatives.
cc6d0d2c 216
b6954afd
RS
217This is meaningful only for certain types, currently including
218@code{hook}, @code{plist} and @code{alist}. See the definition of the
219individual types for a description of how to use @code{:options}.
cc6d0d2c
RS
220
221@item :version @var{version}
a9f0a989
RS
222This option specifies that the variable was first introduced, or its
223default value was changed, in Emacs version @var{version}. The value
224@var{version} must be a string. For example,
cc6d0d2c
RS
225
226@example
227(defcustom foo-max 34
228 "*Maximum number of foo's allowed."
229 :type 'integer
230 :group 'foo
231 :version "20.3")
232@end example
233
234@item :set @var{setfunction}
235Specify @var{setfunction} as the way to change the value of this option.
236The function @var{setfunction} should take two arguments, a symbol and
237the new value, and should do whatever is necessary to update the value
238properly for this option (which may not mean simply setting the option
239as a Lisp variable). The default for @var{setfunction} is
240@code{set-default}.
241
242@item :get @var{getfunction}
243Specify @var{getfunction} as the way to extract the value of this
244option. The function @var{getfunction} should take one argument, a
245symbol, and should return the ``current value'' for that symbol (which
246need not be the symbol's Lisp value). The default is
247@code{default-value}.
248
249@item :initialize @var{function}
250@var{function} should be a function used to initialize the variable when
251the @code{defcustom} is evaluated. It should take two arguments, the
252symbol and value. Here are some predefined functions meant for use in
253this way:
254
255@table @code
256@item custom-initialize-set
969fe9b5
RS
257Use the variable's @code{:set} function to initialize the variable, but
258do not reinitialize it if it is already non-void. This is the default
cc6d0d2c
RS
259@code{:initialize} function.
260
261@item custom-initialize-default
969fe9b5
RS
262Like @code{custom-initialize-set}, but use the function
263@code{set-default} to set the variable, instead of the variable's
264@code{:set} function. This is the usual choice for a variable whose
265@code{:set} function enables or disables a minor mode; with this choice,
266defining the variable will not call the minor mode function, but
267customizing the variable will do so.
cc6d0d2c
RS
268
269@item custom-initialize-reset
969fe9b5
RS
270Always use the @code{:set} function to initialize the variable. If the
271variable is already non-void, reset it by calling the @code{:set}
272function using the current value (returned by the @code{:get} method).
cc6d0d2c
RS
273
274@item custom-initialize-changed
969fe9b5
RS
275Use the @code{:set} function to initialize the variable, if it is
276already set or has been customized; otherwise, just use
277@code{set-default}.
cc6d0d2c 278@end table
390538c3
RS
279
280@item :set-after @var{variables}
281When setting variables according to saved customizations, make sure to
282set the variables @var{variables} before this one; in other words, delay
283setting this variable until after those others have been handled. Use
284@code{:set-after} if setting this variable won't work properly unless
285those other variables already have their intended values.
969fe9b5 286@end table
cc6d0d2c 287
969fe9b5 288 The @code{:require} option is useful for an option that turns on the
cc6d0d2c
RS
289operation of a certain feature. Assuming that the package is coded to
290check the value of the option, you still need to arrange for the package
969fe9b5
RS
291to be loaded. You can do that with @code{:require}. @xref{Common
292Keywords}. Here is an example, from the library @file{paren.el}:
293
294@example
295(defcustom show-paren-mode nil
29b677db 296 "Toggle Show Paren mode..."
969fe9b5 297 :set (lambda (symbol value)
a9f0a989 298 (show-paren-mode (or value 0)))
969fe9b5
RS
299 :initialize 'custom-initialize-default
300 :type 'boolean
301 :group 'paren-showing
302 :require 'paren)
303@end example
cc6d0d2c 304
b6954afd
RS
305If a customization item has a type such as @code{hook} or @code{alist},
306which supports @code{:options}, you can add additional options to the
307item, outside the @code{defcustom} declaration, by calling
308@code{custom-add-option}. For example, if you define a function
309@code{my-lisp-mode-initialization} intended to be called from
310@code{emacs-lisp-mode-hook}, you might want to add that to the list of
311options for @code{emacs-lisp-mode-hook}, but not by editing its
312definition. You can do it thus:
313
314@example
8241495d
RS
315(custom-add-option 'emacs-lisp-mode-hook
316 'my-lisp-mode-initialization)
b6954afd 317@end example
cc6d0d2c
RS
318
319@defun custom-add-option symbol option
b6954afd 320To the customization @var{symbol}, add @var{option}.
cc6d0d2c 321
b6954afd
RS
322The precise effect of adding @var{option} depends on the customization
323type of @var{symbol}.
cc6d0d2c 324@end defun
cc6d0d2c
RS
325
326Internally, @code{defcustom} uses the symbol property
327@code{standard-value} to record the expression for the default value,
328and @code{saved-value} to record the value saved by the user with the
329customization buffer. The @code{saved-value} property is actually a
330list whose car is an expression which evaluates to the value.
331
cc6d0d2c
RS
332@node Customization Types
333@section Customization Types
334
335 When you define a user option with @code{defcustom}, you must specify
969fe9b5 336its @dfn{customization type}. That is a Lisp object which describes (1)
cc6d0d2c
RS
337which values are legitimate and (2) how to display the value in the
338customization buffer for editing.
339
340 You specify the customization type in @code{defcustom} with the
341@code{:type} keyword. The argument of @code{:type} is evaluated; since
969fe9b5 342types that vary at run time are rarely useful, normally you use a quoted
cc6d0d2c
RS
343constant. For example:
344
345@example
346(defcustom diff-command "diff"
347 "*The command to use to run diff."
969fe9b5 348 :type '(string)
cc6d0d2c
RS
349 :group 'diff)
350@end example
351
969fe9b5
RS
352 In general, a customization type is a list whose first element is a
353symbol, one of the customization type names defined in the following
354sections. After this symbol come a number of arguments, depending on
355the symbol. Between the type symbol and its arguments, you can
356optionally write keyword-value pairs (@pxref{Type Keywords}).
cc6d0d2c 357
969fe9b5
RS
358 Some of the type symbols do not use any arguments; those are called
359@dfn{simple types}. For a simple type, if you do not use any
360keyword-value pairs, you can omit the parentheses around the type
361symbol. For example just @code{string} as a customization type is
362equivalent to @code{(string)}.
cc6d0d2c
RS
363
364@menu
365* Simple Types::
366* Composite Types::
367* Splicing into Lists::
368* Type Keywords::
369@end menu
370
c5c36e02
EZ
371All customization types are implemented as widgets; see @ref{Top, ,
372Introduction, widget, The Emacs Widget Library} for details.
373
cc6d0d2c
RS
374@node Simple Types
375@subsection Simple Types
376
377 This section describes all the simple customization types.
378
379@table @code
380@item sexp
381The value may be any Lisp object that can be printed and read back. You
382can use @code{sexp} as a fall-back for any option, if you don't want to
383take the time to work out a more specific type to use.
384
385@item integer
386The value must be an integer, and is represented textually
387in the customization buffer.
388
389@item number
390The value must be a number, and is represented textually in the
391customization buffer.
392
393@item string
394The value must be a string, and the customization buffer shows just the
969fe9b5
RS
395contents, with no delimiting @samp{"} characters and no quoting with
396@samp{\}.
cc6d0d2c
RS
397
398@item regexp
969fe9b5
RS
399Like @code{string} except that the string must be a valid regular
400expression.
cc6d0d2c
RS
401
402@item character
403The value must be a character code. A character code is actually an
404integer, but this type shows the value by inserting the character in the
405buffer, rather than by showing the number.
406
407@item file
408The value must be a file name, and you can do completion with
409@kbd{M-@key{TAB}}.
410
411@item (file :must-match t)
412The value must be a file name for an existing file, and you can do
413completion with @kbd{M-@key{TAB}}.
414
415@item directory
416The value must be a directory name, and you can do completion with
417@kbd{M-@key{TAB}}.
418
a9f0a989
RS
419@item hook
420The value must be a list of functions (or a single function, but that is
421obsolete usage). This customization type is used for hook variables.
1911e6e5
RS
422You can use the @code{:options} keyword in a hook variable's
423@code{defcustom} to specify a list of functions recommended for use in
424the hook; see @ref{Variable Definitions}.
a9f0a989 425
b6954afd 426@item alist
08f0f5e9
KH
427The value must be a list of cons-cells, the @sc{car} of each cell
428representing a key, and the @sc{cdr} of the same cell representing an
429associated value. The user can add and delete key/value pairs, and
b6954afd
RS
430edit both the key and the value of each pair.
431
432You can specify the key and value types like this:
433
8241495d
RS
434@smallexample
435(alist :key-type @var{key-type} :value-type @var{value-type})
436@end smallexample
b6954afd
RS
437
438@noindent
439where @var{key-type} and @var{value-type} are customization type
440specifications. The default key type is @code{sexp}, and the default
441value type is @code{sexp}.
442
443The user can add any key matching the specified key type, but you can
444give some keys a preferential treatment by specifying them with the
445@code{:options} (see @ref{Variable Definitions}). The specified keys
446will always be shown in the customize buffer (together with a suitable
447value), with a checkbox to include or exclude or disable the key/value
448pair from the alist. The user will not be able to edit the keys
449specified by the @code{:options} keyword argument.
450
451The argument to the @code{:options} keywords should be a list of option
452specifications. Ordinarily, the options are simply atoms, which are the
453specified keys. For example:
454
8241495d 455@smallexample
b6954afd 456:options '("foo" "bar" "baz")
8241495d 457@end smallexample
b6954afd
RS
458
459@noindent
460specifies that there are three ``known'' keys, namely @code{"foo"},
461@code{"bar"} and @code{"baz"}, which will always be shown first.
462
463You may want to restrict the value type for specific keys, for example,
464the value associated with the @code{"bar"} key can only be an integer.
465You can specify this by using a list instead of an atom in the option
466specification. The first element will specify the key, like before,
467while the second element will specify the value type.
468
8241495d 469@smallexample
b6954afd 470:options '("foo" ("bar" integer) "baz")
8241495d 471@end smallexample
b6954afd
RS
472
473Finally, you may want to change how the key is presented. By default,
474the key is simply shown as a @code{const}, since the user cannot change
475the special keys specified with the @code{:options} keyword. However,
476you may want to use a more specialized type for presenting the key, like
477@code{function-item} if you know it is a symbol with a function binding.
478This is done by using a customization type specification instead of a
479symbol for the key.
480
8241495d 481@smallexample
b6954afd 482:options '("foo" ((function-item some-function) integer) "baz")
8241495d 483@end smallexample
b6954afd 484
08f0f5e9 485Many alists use lists with two elements, instead of cons cells. For
b6954afd
RS
486example,
487
8241495d 488@smallexample
b6954afd
RS
489(defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
490 "Each element is a list of the form (KEY VALUE).")
8241495d 491@end smallexample
b6954afd
RS
492
493@noindent
494instead of
495
8241495d 496@smallexample
b6954afd
RS
497(defcustom cons-alist '(("foo" . 1) ("bar" . 2) ("baz" . 3))
498 "Each element is a cons-cell (KEY . VALUE).")
8241495d 499@end smallexample
b6954afd
RS
500
501Because of the way lists are implemented on top of cons cells, you can
502treat @code{list-alist} in the example above as a cons cell alist, where
503the value type is a list with a single element containing the real
504value.
505
8241495d 506@smallexample
b6954afd
RS
507(defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
508 "Each element is a list of the form (KEY VALUE)."
509 :type '(alist :value-type (group integer)))
8241495d 510@end smallexample
b6954afd
RS
511
512The @code{group} widget is used here instead of @code{list} only because
513the formatting is better suited for the purpose.
514
515Similarily, you can have alists with more values associated with each
516key, using variations of this trick:
517
8241495d 518@smallexample
b6954afd
RS
519(defcustom person-data '(("brian" 50 t)
520 ("dorith" 55 nil)
521 ("ken" 52 t))
3d3df9e1
RS
522 "Alist of basic info about people.
523Each element has the form (NAME AGE MALE-FLAG)."
b6954afd
RS
524 :type '(alist :value-type (group age boolean)))
525
526(defcustom pets '(("brian")
527 ("dorith" "dog" "guppy")
528 ("ken" "cat"))
3d3df9e1
RS
529 "Alist of people's pets.
530In an element (KEY . VALUE), KEY is the person's name,
531and the VALUE is a list of that person's pets."
b6954afd 532 :type '(alist :value-type (repeat string)))
8241495d 533@end smallexample
b6954afd
RS
534
535@item plist
536The @code{plist} custom type is similar to the @code{alist} (see above),
537except that the information is stored as a property list, i.e. a list of
538this form:
539
8241495d 540@smallexample
b6954afd 541(@var{key} @var{value} @var{key} @var{value} @var{key} @var{value} @dots{})
8241495d 542@end smallexample
b6954afd
RS
543
544The default @code{:key-type} for @code{plist} is @code{symbol},
545rather than @code{sexp}.
546
cc6d0d2c
RS
547@item symbol
548The value must be a symbol. It appears in the customization buffer as
549the name of the symbol.
550
551@item function
552The value must be either a lambda expression or a function name. When
553it is a function name, you can do completion with @kbd{M-@key{TAB}}.
554
555@item variable
556The value must be a variable name, and you can do completion with
557@kbd{M-@key{TAB}}.
558
a9f0a989
RS
559@item face
560The value must be a symbol which is a face name, and you can do
561completion with @kbd{M-@key{TAB}}.
562
cc6d0d2c 563@item boolean
969fe9b5
RS
564The value is boolean---either @code{nil} or @code{t}. Note that by
565using @code{choice} and @code{const} together (see the next section),
566you can specify that the value must be @code{nil} or @code{t}, but also
567specify the text to describe each value in a way that fits the specific
568meaning of the alternative.
5e0c8a23
DL
569
570@item coding-system
571The value must be a coding-system name, and you can do completion with
572@kbd{M-@key{TAB}}.
573
574@item color
575The value must be a valid color name, and you can do completion with
576@kbd{M-@key{TAB}}. A sample is provided,
cc6d0d2c
RS
577@end table
578
579@node Composite Types
580@subsection Composite Types
608dc417 581@cindex arguments (of composite type)
cc6d0d2c
RS
582
583 When none of the simple types is appropriate, you can use composite
608dc417
RS
584types, which build new types from other types or from specified data.
585The specified types or data are called the @dfn{arguments} of the
586composite type. The composite type normally looks like this:
cc6d0d2c
RS
587
588@example
608dc417 589(@var{constructor} @var{arguments}@dots{})
cc6d0d2c
RS
590@end example
591
592@noindent
608dc417
RS
593but you can also add keyword-value pairs before the arguments, like
594this:
cc6d0d2c 595
608dc417
RS
596@example
597(@var{constructor} @r{@{}@var{keyword} @var{value}@r{@}}@dots{} @var{arguments}@dots{})
598@end example
cc6d0d2c 599
608dc417
RS
600 Here is a table of constructors and how to use them to write
601composite types:
602
603@table @code
cc6d0d2c
RS
604@item (cons @var{car-type} @var{cdr-type})
605The value must be a cons cell, its @sc{car} must fit @var{car-type}, and
a9f0a989 606its @sc{cdr} must fit @var{cdr-type}. For example, @code{(cons string
cc6d0d2c
RS
607symbol)} is a customization type which matches values such as
608@code{("foo" . foo)}.
609
969fe9b5 610In the customization buffer, the @sc{car} and the @sc{cdr} are
cc6d0d2c
RS
611displayed and edited separately, each according to the type
612that you specify for it.
613
614@item (list @var{element-types}@dots{})
615The value must be a list with exactly as many elements as the
616@var{element-types} you have specified; and each element must fit the
617corresponding @var{element-type}.
618
619For example, @code{(list integer string function)} describes a list of
620three elements; the first element must be an integer, the second a
621string, and the third a function.
622
a9f0a989 623In the customization buffer, each element is displayed and edited
cc6d0d2c
RS
624separately, according to the type specified for it.
625
626@item (vector @var{element-types}@dots{})
627Like @code{list} except that the value must be a vector instead of a
628list. The elements work the same as in @code{list}.
629
4577e8cc 630@item (choice @var{alternative-types}@dots{})
cc6d0d2c
RS
631The value must fit at least one of @var{alternative-types}.
632For example, @code{(choice integer string)} allows either an
633integer or a string.
634
635In the customization buffer, the user selects one of the alternatives
636using a menu, and can then edit the value in the usual way for that
637alternative.
638
639Normally the strings in this menu are determined automatically from the
640choices; however, you can specify different strings for the menu by
641including the @code{:tag} keyword in the alternatives. For example, if
642an integer stands for a number of spaces, while a string is text to use
643verbatim, you might write the customization type this way,
644
a9f0a989 645@example
cc6d0d2c
RS
646(choice (integer :tag "Number of spaces")
647 (string :tag "Literal text"))
a9f0a989 648@end example
cc6d0d2c
RS
649
650@noindent
651so that the menu offers @samp{Number of spaces} and @samp{Literal Text}.
652
969fe9b5
RS
653In any alternative for which @code{nil} is not a valid value, other than
654a @code{const}, you should specify a valid default for that alternative
655using the @code{:value} keyword. @xref{Type Keywords}.
656
4577e8cc
DL
657@item (radio @var{element-types}@dots{})
658This is similar to @code{choice}, except that the choices are displayed
659using `radio buttons' rather than a menu. This has the advantage of
660displaying documentation for the choices when applicable and so is often
661a good choice for a choice between constant functions
662(@code{function-item} customization types).
663
cc6d0d2c
RS
664@item (const @var{value})
665The value must be @var{value}---nothing else is allowed.
666
667The main use of @code{const} is inside of @code{choice}. For example,
668@code{(choice integer (const nil))} allows either an integer or
969fe9b5
RS
669@code{nil}.
670
671@code{:tag} is often used with @code{const}, inside of @code{choice}.
672For example,
673
a9f0a989 674@example
969fe9b5
RS
675(choice (const :tag "Yes" t)
676 (const :tag "No" nil)
677 (const :tag "Ask" foo))
a9f0a989 678@end example
cc6d0d2c 679
da03dc1d
RS
680@noindent
681describes a variable for which @code{t} means yes, @code{nil} means no,
682and @code{foo} means ``ask.''
683
684@item (other @var{value})
685This alternative can match any Lisp value, but if the user chooses this
686alternative, that selects the value @var{value}.
687
688The main use of @code{other} is as the last element of @code{choice}.
689For example,
690
691@example
692(choice (const :tag "Yes" t)
693 (const :tag "No" nil)
694 (other :tag "Ask" foo))
695@end example
696
697@noindent
698describes a variable for which @code{t} means yes, @code{nil} means no,
699and anything else means ``ask.'' If the user chooses @samp{Ask} from
700the menu of alternatives, that specifies the value @code{foo}; but any
701other value (not @code{t}, @code{nil} or @code{foo}) displays as
702@samp{Ask}, just like @code{foo}.
703
cc6d0d2c
RS
704@item (function-item @var{function})
705Like @code{const}, but used for values which are functions. This
969fe9b5
RS
706displays the documentation string as well as the function name.
707The documentation string is either the one you specify with
708@code{:doc}, or @var{function}'s own documentation string.
cc6d0d2c
RS
709
710@item (variable-item @var{variable})
711Like @code{const}, but used for values which are variable names. This
969fe9b5
RS
712displays the documentation string as well as the variable name. The
713documentation string is either the one you specify with @code{:doc}, or
714@var{variable}'s own documentation string.
cc6d0d2c 715
1f447a50
KH
716@item (set @var{types}@dots{})
717The value must be a list, and each element of the list must match one of
718the @var{types} specified.
719
720This appears in the customization buffer as a checklist, so that each of
721@var{types} may have either one corresponding element or none. It is
722not possible to specify two different elements that match the same one
723of @var{types}. For example, @code{(set integer symbol)} allows one
724integer and/or one symbol in the list; it does not allow multiple
725integers or multiple symbols. As a result, it is rare to use
726nonspecific types such as @code{integer} in a @code{set}.
727
728Most often, the @var{types} in a @code{set} are @code{const} types, as
729shown here:
730
731@example
732(set (const :bold) (const :italic))
733@end example
734
735Sometimes they describe possible elements in an alist:
736
737@example
738(set (cons :tag "Height" (const height) integer)
739 (cons :tag "Width" (const width) integer))
740@end example
741
742@noindent
743That lets the user specify a height value optionally
744and a width value optionally.
cc6d0d2c
RS
745
746@item (repeat @var{element-type})
747The value must be a list and each element of the list must fit the type
748@var{element-type}. This appears in the customization buffer as a
749list of elements, with @samp{[INS]} and @samp{[DEL]} buttons for adding
750more elements or removing elements.
608dc417
RS
751
752@item (restricted-sexp :match-alternatives @var{criteria})
753This is the most general composite type construct. The value may be
754any Lisp object that satisfies one of @var{criteria}. @var{criteria}
755should be a list, and each element should be one of these
756possibilities:
757
758@itemize @bullet
759@item
760A predicate---that is, a function of one argument that has no side
761effects, and returns either @code{nil} or non-@code{nil} according to
762the argument. Using a predicate in the list says that objects for which
763the predicate returns non-@code{nil} are acceptable.
764
765@item
766A quoted constant---that is, @code{'@var{object}}. This sort of element
767in the list says that @var{object} itself is an acceptable value.
768@end itemize
769
770For example,
771
772@example
773(restricted-sexp :match-alternatives
774 (integerp 't 'nil))
775@end example
776
777@noindent
778allows integers, @code{t} and @code{nil} as legitimate values.
779
780The customization buffer shows all legitimate values using their read
781syntax, and the user edits them textually.
782@end table
783
784 Here is a table of the keywords you can use in keyword-value pairs
785in a composite type:
786
787@table @code
788@item :tag @var{tag}
789Use @var{tag} as the name of this alternative, for user communication
790purposes. This is useful for a type that appears inside of a
791@code{choice}.
792
793@item :match-alternatives @var{criteria}
794Use @var{criteria} to match possible values. This is used only in
795@code{restricted-sexp}.
796
797@item :args @var{argumentlist}
798Use the elements of @var{argumentlist} as the arguments of the type
799construct. For instance, @code{(const :args (foo))} is equivalent to
800@code{(const foo)}. You rarely need to write @code{:args} explicitly,
801because normally the arguments are recognized automatically as
802whatever follows the last keyword-value pair.
cc6d0d2c
RS
803@end table
804
805@node Splicing into Lists
806@subsection Splicing into Lists
807
808 The @code{:inline} feature lets you splice a variable number of
809elements into the middle of a list or vector. You use it in a
810@code{set}, @code{choice} or @code{repeat} type which appears among the
811element-types of a @code{list} or @code{vector}.
812
813 Normally, each of the element-types in a @code{list} or @code{vector}
814describes one and only one element of the list or vector. Thus, if an
815element-type is a @code{repeat}, that specifies a list of unspecified
816length which appears as one element.
817
818 But when the element-type uses @code{:inline}, the value it matches is
819merged directly into the containing sequence. For example, if it
820matches a list with three elements, those become three elements of the
821overall sequence. This is analogous to using @samp{,@@} in the backquote
822construct.
823
241f79af 824 For example, to specify a list whose first element must be @code{baz}
cc6d0d2c
RS
825and whose remaining arguments should be zero or more of @code{foo} and
826@code{bar}, use this customization type:
827
828@example
241f79af 829(list (const baz) (set :inline t (const foo) (const bar)))
cc6d0d2c
RS
830@end example
831
832@noindent
241f79af
PA
833This matches values such as @code{(baz)}, @code{(baz foo)}, @code{(baz bar)}
834and @code{(baz foo bar)}.
cc6d0d2c
RS
835
836 When the element-type is a @code{choice}, you use @code{:inline} not
837in the @code{choice} itself, but in (some of) the alternatives of the
838@code{choice}. For example, to match a list which must start with a
839file name, followed either by the symbol @code{t} or two strings, use
840this customization type:
841
842@example
843(list file
844 (choice (const t)
845 (list :inline t string string)))
846@end example
847
848@noindent
849If the user chooses the first alternative in the choice, then the
850overall list has two elements and the second element is @code{t}. If
851the user chooses the second alternative, then the overall list has three
852elements and the second and third must be strings.
853
854@node Type Keywords
855@subsection Type Keywords
856
857You can specify keyword-argument pairs in a customization type after the
858type name symbol. Here are the keywords you can use, and their
859meanings:
860
861@table @code
862@item :value @var{default}
863This is used for a type that appears as an alternative inside of
969fe9b5 864@code{choice}; it specifies the default value to use, at first, if and
cc6d0d2c
RS
865when the user selects this alternative with the menu in the
866customization buffer.
867
868Of course, if the actual value of the option fits this alternative, it
869will appear showing the actual value, not @var{default}.
870
969fe9b5
RS
871If @code{nil} is not a valid value for the alternative, then it is
872essential to specify a valid default with @code{:value}.
873
cc6d0d2c
RS
874@item :format @var{format-string}
875This string will be inserted in the buffer to represent the value
876corresponding to the type. The following @samp{%} escapes are available
877for use in @var{format-string}:
878
879@table @samp
cc6d0d2c
RS
880@item %[@var{button}%]
881Display the text @var{button} marked as a button. The @code{:action}
882attribute specifies what the button will do if the user invokes it;
883its value is a function which takes two arguments---the widget which
884the button appears in, and the event.
885
886There is no way to specify two different buttons with different
969fe9b5 887actions.
cc6d0d2c
RS
888
889@item %@{@var{sample}%@}
890Show @var{sample} in a special face specified by @code{:sample-face}.
891
892@item %v
893Substitute the item's value. How the value is represented depends on
894the kind of item, and (for variables) on the customization type.
895
896@item %d
897Substitute the item's documentation string.
898
899@item %h
900Like @samp{%d}, but if the documentation string is more than one line,
901add an active field to control whether to show all of it or just the
902first line.
903
904@item %t
905Substitute the tag here. You specify the tag with the @code{:tag}
906keyword.
907
908@item %%
909Display a literal @samp{%}.
910@end table
911
969fe9b5
RS
912@item :action @var{action}
913Perform @var{action} if the user clicks on a button.
914
cc6d0d2c 915@item :button-face @var{face}
969fe9b5
RS
916Use the face @var{face} (a face name or a list of face names) for button
917text displayed with @samp{%[@dots{}%]}.
cc6d0d2c 918
969fe9b5
RS
919@item :button-prefix @var{prefix}
920@itemx :button-suffix @var{suffix}
cc6d0d2c
RS
921These specify the text to display before and after a button.
922Each can be:
923
924@table @asis
925@item @code{nil}
926No text is inserted.
927
928@item a string
929The string is inserted literally.
930
931@item a symbol
932The symbol's value is used.
933@end table
934
969fe9b5
RS
935@item :tag @var{tag}
936Use @var{tag} (a string) as the tag for the value (or part of the value)
937that corresponds to this type.
938
cc6d0d2c 939@item :doc @var{doc}
969fe9b5
RS
940Use @var{doc} as the documentation string for this value (or part of the
941value) that corresponds to this type. In order for this to work, you
942must specify a value for @code{:format}, and use @samp{%d} or @samp{%h}
943in that value.
cc6d0d2c 944
969fe9b5
RS
945The usual reason to specify a documentation string for a type is to
946provide more information about the meanings of alternatives inside a
947@code{:choice} type or the parts of some other composite type.
cc6d0d2c
RS
948
949@item :help-echo @var{motion-doc}
950When you move to this item with @code{widget-forward} or
19182f77
DL
951@code{widget-backward}, it will display the string @var{motion-doc} in
952the echo area. In addition, @var{motion-doc} is used as the mouse
953@code{help-echo} string and may actually be a function or form evaluated
954to yield a help string as for @code{help-echo} text properties.
e23a63a5 955@c @xref{Text help-echo}.
cc6d0d2c
RS
956
957@item :match @var{function}
969fe9b5
RS
958Specify how to decide whether a value matches the type. The
959corresponding value, @var{function}, should be a function that accepts
960two arguments, a widget and a value; it should return non-@code{nil} if
961the value is acceptable.
cc6d0d2c
RS
962
963@ignore
964@item :indent @var{columns}
965Indent this item by @var{columns} columns. The indentation is used for
966@samp{%n}, and automatically for group names, for checklists and radio
967buttons, and for editable lists. It affects the whole of the
968item except for the first line.
969
970@item :offset @var{columns}
971An integer indicating how many extra spaces to indent the subitems of
972this item. By default, subitems are indented the same as their parent.
973
974@item :extra-offset
975An integer indicating how many extra spaces to add to this item's
976indentation, compared to its parent.
977
978@item :notify
979A function called each time the item or a subitem is changed. The
980function is called with two or three arguments. The first argument is
981the item itself, the second argument is the item that was changed, and
982the third argument is the event leading to the change, if any.
983
984@item :menu-tag
35208b42 985A tag used in the menu when the widget is used as an option in a
cc6d0d2c
RS
986@code{menu-choice} widget.
987
988@item :menu-tag-get
35208b42 989A function used for finding the tag when the widget is used as an option
cc6d0d2c
RS
990in a @code{menu-choice} widget. By default, the tag used will be either the
991@code{:menu-tag} or @code{:tag} property if present, or the @code{princ}
992representation of the @code{:value} property if not.
993
994@item :validate
35208b42
RS
995A function which takes a widget as an argument, and return @code{nil}
996if the widget's current value is valid for the widget. Otherwise, it
997should return the widget containing the invalid data, and set that
998widget's @code{:error} property to a string explaining the error.
cc6d0d2c
RS
999
1000You can use the function @code{widget-children-validate} for this job;
1001it tests that all children of @var{widget} are valid.
1002
1003@item :tab-order
1004Specify the order in which widgets are traversed with
1005@code{widget-forward} or @code{widget-backward}. This is only partially
1006implemented.
1007
1008@enumerate a
1009@item
1010Widgets with tabbing order @code{-1} are ignored.
1011
1012@item
1013(Unimplemented) When on a widget with tabbing order @var{n}, go to the
1014next widget in the buffer with tabbing order @var{n+1} or @code{nil},
1015whichever comes first.
1016
1017@item
1018When on a widget with no tabbing order specified, go to the next widget
1019in the buffer with a positive tabbing order, or @code{nil}
1020@end enumerate
1021
1022@item :parent
a9f0a989 1023The parent of a nested widget (e.g., a @code{menu-choice} item or an
cc6d0d2c
RS
1024element of a @code{editable-list} widget).
1025
1026@item :sibling-args
1027This keyword is only used for members of a @code{radio-button-choice} or
1028@code{checklist}. The value should be a list of extra keyword
1029arguments, which will be used when creating the @code{radio-button} or
1030@code{checkbox} associated with this item.
1031@end ignore
1032@end table