(DATAGRAM_CONN_P, list_processes_1)
[bpt/emacs.git] / lispref / customize.texi
CommitLineData
cc6d0d2c
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
5e0c8a23 3@c Copyright (C) 1997, 1998, 1999, 2000 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
581
582 When none of the simple types is appropriate, you can use composite
969fe9b5
RS
583types, which build new types from other types. Here are several ways of
584doing that:
cc6d0d2c
RS
585
586@table @code
587@item (restricted-sexp :match-alternatives @var{criteria})
588The value may be any Lisp object that satisfies one of @var{criteria}.
a9f0a989 589@var{criteria} should be a list, and each element should be
cc6d0d2c
RS
590one of these possibilities:
591
592@itemize @bullet
593@item
a9f0a989
RS
594A predicate---that is, a function of one argument that has no side
595effects, and returns either @code{nil} or non-@code{nil} according to
596the argument. Using a predicate in the list says that objects for which
597the predicate returns non-@code{nil} are acceptable.
cc6d0d2c
RS
598
599@item
a9f0a989
RS
600A quoted constant---that is, @code{'@var{object}}. This sort of element
601in the list says that @var{object} itself is an acceptable value.
cc6d0d2c
RS
602@end itemize
603
604For example,
605
606@example
a9f0a989
RS
607(restricted-sexp :match-alternatives
608 (integerp 't 'nil))
cc6d0d2c
RS
609@end example
610
611@noindent
612allows integers, @code{t} and @code{nil} as legitimate values.
613
614The customization buffer shows all legitimate values using their read
615syntax, and the user edits them textually.
616
617@item (cons @var{car-type} @var{cdr-type})
618The value must be a cons cell, its @sc{car} must fit @var{car-type}, and
a9f0a989 619its @sc{cdr} must fit @var{cdr-type}. For example, @code{(cons string
cc6d0d2c
RS
620symbol)} is a customization type which matches values such as
621@code{("foo" . foo)}.
622
969fe9b5 623In the customization buffer, the @sc{car} and the @sc{cdr} are
cc6d0d2c
RS
624displayed and edited separately, each according to the type
625that you specify for it.
626
627@item (list @var{element-types}@dots{})
628The value must be a list with exactly as many elements as the
629@var{element-types} you have specified; and each element must fit the
630corresponding @var{element-type}.
631
632For example, @code{(list integer string function)} describes a list of
633three elements; the first element must be an integer, the second a
634string, and the third a function.
635
a9f0a989 636In the customization buffer, each element is displayed and edited
cc6d0d2c
RS
637separately, according to the type specified for it.
638
639@item (vector @var{element-types}@dots{})
640Like @code{list} except that the value must be a vector instead of a
641list. The elements work the same as in @code{list}.
642
4577e8cc 643@item (choice @var{alternative-types}@dots{})
cc6d0d2c
RS
644The value must fit at least one of @var{alternative-types}.
645For example, @code{(choice integer string)} allows either an
646integer or a string.
647
648In the customization buffer, the user selects one of the alternatives
649using a menu, and can then edit the value in the usual way for that
650alternative.
651
652Normally the strings in this menu are determined automatically from the
653choices; however, you can specify different strings for the menu by
654including the @code{:tag} keyword in the alternatives. For example, if
655an integer stands for a number of spaces, while a string is text to use
656verbatim, you might write the customization type this way,
657
a9f0a989 658@example
cc6d0d2c
RS
659(choice (integer :tag "Number of spaces")
660 (string :tag "Literal text"))
a9f0a989 661@end example
cc6d0d2c
RS
662
663@noindent
664so that the menu offers @samp{Number of spaces} and @samp{Literal Text}.
665
969fe9b5
RS
666In any alternative for which @code{nil} is not a valid value, other than
667a @code{const}, you should specify a valid default for that alternative
668using the @code{:value} keyword. @xref{Type Keywords}.
669
4577e8cc
DL
670@item (radio @var{element-types}@dots{})
671This is similar to @code{choice}, except that the choices are displayed
672using `radio buttons' rather than a menu. This has the advantage of
673displaying documentation for the choices when applicable and so is often
674a good choice for a choice between constant functions
675(@code{function-item} customization types).
676
cc6d0d2c
RS
677@item (const @var{value})
678The value must be @var{value}---nothing else is allowed.
679
680The main use of @code{const} is inside of @code{choice}. For example,
681@code{(choice integer (const nil))} allows either an integer or
969fe9b5
RS
682@code{nil}.
683
684@code{:tag} is often used with @code{const}, inside of @code{choice}.
685For example,
686
a9f0a989 687@example
969fe9b5
RS
688(choice (const :tag "Yes" t)
689 (const :tag "No" nil)
690 (const :tag "Ask" foo))
a9f0a989 691@end example
cc6d0d2c 692
da03dc1d
RS
693@noindent
694describes a variable for which @code{t} means yes, @code{nil} means no,
695and @code{foo} means ``ask.''
696
697@item (other @var{value})
698This alternative can match any Lisp value, but if the user chooses this
699alternative, that selects the value @var{value}.
700
701The main use of @code{other} is as the last element of @code{choice}.
702For example,
703
704@example
705(choice (const :tag "Yes" t)
706 (const :tag "No" nil)
707 (other :tag "Ask" foo))
708@end example
709
710@noindent
711describes a variable for which @code{t} means yes, @code{nil} means no,
712and anything else means ``ask.'' If the user chooses @samp{Ask} from
713the menu of alternatives, that specifies the value @code{foo}; but any
714other value (not @code{t}, @code{nil} or @code{foo}) displays as
715@samp{Ask}, just like @code{foo}.
716
cc6d0d2c
RS
717@item (function-item @var{function})
718Like @code{const}, but used for values which are functions. This
969fe9b5
RS
719displays the documentation string as well as the function name.
720The documentation string is either the one you specify with
721@code{:doc}, or @var{function}'s own documentation string.
cc6d0d2c
RS
722
723@item (variable-item @var{variable})
724Like @code{const}, but used for values which are variable names. This
969fe9b5
RS
725displays the documentation string as well as the variable name. The
726documentation string is either the one you specify with @code{:doc}, or
727@var{variable}'s own documentation string.
cc6d0d2c 728
1f447a50
KH
729@item (set @var{types}@dots{})
730The value must be a list, and each element of the list must match one of
731the @var{types} specified.
732
733This appears in the customization buffer as a checklist, so that each of
734@var{types} may have either one corresponding element or none. It is
735not possible to specify two different elements that match the same one
736of @var{types}. For example, @code{(set integer symbol)} allows one
737integer and/or one symbol in the list; it does not allow multiple
738integers or multiple symbols. As a result, it is rare to use
739nonspecific types such as @code{integer} in a @code{set}.
740
741Most often, the @var{types} in a @code{set} are @code{const} types, as
742shown here:
743
744@example
745(set (const :bold) (const :italic))
746@end example
747
748Sometimes they describe possible elements in an alist:
749
750@example
751(set (cons :tag "Height" (const height) integer)
752 (cons :tag "Width" (const width) integer))
753@end example
754
755@noindent
756That lets the user specify a height value optionally
757and a width value optionally.
cc6d0d2c
RS
758
759@item (repeat @var{element-type})
760The value must be a list and each element of the list must fit the type
761@var{element-type}. This appears in the customization buffer as a
762list of elements, with @samp{[INS]} and @samp{[DEL]} buttons for adding
763more elements or removing elements.
764@end table
765
766@node Splicing into Lists
767@subsection Splicing into Lists
768
769 The @code{:inline} feature lets you splice a variable number of
770elements into the middle of a list or vector. You use it in a
771@code{set}, @code{choice} or @code{repeat} type which appears among the
772element-types of a @code{list} or @code{vector}.
773
774 Normally, each of the element-types in a @code{list} or @code{vector}
775describes one and only one element of the list or vector. Thus, if an
776element-type is a @code{repeat}, that specifies a list of unspecified
777length which appears as one element.
778
779 But when the element-type uses @code{:inline}, the value it matches is
780merged directly into the containing sequence. For example, if it
781matches a list with three elements, those become three elements of the
782overall sequence. This is analogous to using @samp{,@@} in the backquote
783construct.
784
785 For example, to specify a list whose first element must be @code{t}
786and whose remaining arguments should be zero or more of @code{foo} and
787@code{bar}, use this customization type:
788
789@example
790(list (const t) (set :inline t foo bar))
791@end example
792
793@noindent
794This matches values such as @code{(t)}, @code{(t foo)}, @code{(t bar)}
795and @code{(t foo bar)}.
796
797 When the element-type is a @code{choice}, you use @code{:inline} not
798in the @code{choice} itself, but in (some of) the alternatives of the
799@code{choice}. For example, to match a list which must start with a
800file name, followed either by the symbol @code{t} or two strings, use
801this customization type:
802
803@example
804(list file
805 (choice (const t)
806 (list :inline t string string)))
807@end example
808
809@noindent
810If the user chooses the first alternative in the choice, then the
811overall list has two elements and the second element is @code{t}. If
812the user chooses the second alternative, then the overall list has three
813elements and the second and third must be strings.
814
815@node Type Keywords
816@subsection Type Keywords
817
818You can specify keyword-argument pairs in a customization type after the
819type name symbol. Here are the keywords you can use, and their
820meanings:
821
822@table @code
823@item :value @var{default}
824This is used for a type that appears as an alternative inside of
969fe9b5 825@code{choice}; it specifies the default value to use, at first, if and
cc6d0d2c
RS
826when the user selects this alternative with the menu in the
827customization buffer.
828
829Of course, if the actual value of the option fits this alternative, it
830will appear showing the actual value, not @var{default}.
831
969fe9b5
RS
832If @code{nil} is not a valid value for the alternative, then it is
833essential to specify a valid default with @code{:value}.
834
cc6d0d2c
RS
835@item :format @var{format-string}
836This string will be inserted in the buffer to represent the value
837corresponding to the type. The following @samp{%} escapes are available
838for use in @var{format-string}:
839
840@table @samp
cc6d0d2c
RS
841@item %[@var{button}%]
842Display the text @var{button} marked as a button. The @code{:action}
843attribute specifies what the button will do if the user invokes it;
844its value is a function which takes two arguments---the widget which
845the button appears in, and the event.
846
847There is no way to specify two different buttons with different
969fe9b5 848actions.
cc6d0d2c
RS
849
850@item %@{@var{sample}%@}
851Show @var{sample} in a special face specified by @code{:sample-face}.
852
853@item %v
854Substitute the item's value. How the value is represented depends on
855the kind of item, and (for variables) on the customization type.
856
857@item %d
858Substitute the item's documentation string.
859
860@item %h
861Like @samp{%d}, but if the documentation string is more than one line,
862add an active field to control whether to show all of it or just the
863first line.
864
865@item %t
866Substitute the tag here. You specify the tag with the @code{:tag}
867keyword.
868
869@item %%
870Display a literal @samp{%}.
871@end table
872
969fe9b5
RS
873@item :action @var{action}
874Perform @var{action} if the user clicks on a button.
875
cc6d0d2c 876@item :button-face @var{face}
969fe9b5
RS
877Use the face @var{face} (a face name or a list of face names) for button
878text displayed with @samp{%[@dots{}%]}.
cc6d0d2c 879
969fe9b5
RS
880@item :button-prefix @var{prefix}
881@itemx :button-suffix @var{suffix}
cc6d0d2c
RS
882These specify the text to display before and after a button.
883Each can be:
884
885@table @asis
886@item @code{nil}
887No text is inserted.
888
889@item a string
890The string is inserted literally.
891
892@item a symbol
893The symbol's value is used.
894@end table
895
969fe9b5
RS
896@item :tag @var{tag}
897Use @var{tag} (a string) as the tag for the value (or part of the value)
898that corresponds to this type.
899
cc6d0d2c 900@item :doc @var{doc}
969fe9b5
RS
901Use @var{doc} as the documentation string for this value (or part of the
902value) that corresponds to this type. In order for this to work, you
903must specify a value for @code{:format}, and use @samp{%d} or @samp{%h}
904in that value.
cc6d0d2c 905
969fe9b5
RS
906The usual reason to specify a documentation string for a type is to
907provide more information about the meanings of alternatives inside a
908@code{:choice} type or the parts of some other composite type.
cc6d0d2c
RS
909
910@item :help-echo @var{motion-doc}
911When you move to this item with @code{widget-forward} or
19182f77
DL
912@code{widget-backward}, it will display the string @var{motion-doc} in
913the echo area. In addition, @var{motion-doc} is used as the mouse
914@code{help-echo} string and may actually be a function or form evaluated
915to yield a help string as for @code{help-echo} text properties.
e23a63a5 916@c @xref{Text help-echo}.
cc6d0d2c
RS
917
918@item :match @var{function}
969fe9b5
RS
919Specify how to decide whether a value matches the type. The
920corresponding value, @var{function}, should be a function that accepts
921two arguments, a widget and a value; it should return non-@code{nil} if
922the value is acceptable.
cc6d0d2c
RS
923
924@ignore
925@item :indent @var{columns}
926Indent this item by @var{columns} columns. The indentation is used for
927@samp{%n}, and automatically for group names, for checklists and radio
928buttons, and for editable lists. It affects the whole of the
929item except for the first line.
930
931@item :offset @var{columns}
932An integer indicating how many extra spaces to indent the subitems of
933this item. By default, subitems are indented the same as their parent.
934
935@item :extra-offset
936An integer indicating how many extra spaces to add to this item's
937indentation, compared to its parent.
938
939@item :notify
940A function called each time the item or a subitem is changed. The
941function is called with two or three arguments. The first argument is
942the item itself, the second argument is the item that was changed, and
943the third argument is the event leading to the change, if any.
944
945@item :menu-tag
35208b42 946A tag used in the menu when the widget is used as an option in a
cc6d0d2c
RS
947@code{menu-choice} widget.
948
949@item :menu-tag-get
35208b42 950A function used for finding the tag when the widget is used as an option
cc6d0d2c
RS
951in a @code{menu-choice} widget. By default, the tag used will be either the
952@code{:menu-tag} or @code{:tag} property if present, or the @code{princ}
953representation of the @code{:value} property if not.
954
955@item :validate
35208b42
RS
956A function which takes a widget as an argument, and return @code{nil}
957if the widget's current value is valid for the widget. Otherwise, it
958should return the widget containing the invalid data, and set that
959widget's @code{:error} property to a string explaining the error.
cc6d0d2c
RS
960
961You can use the function @code{widget-children-validate} for this job;
962it tests that all children of @var{widget} are valid.
963
964@item :tab-order
965Specify the order in which widgets are traversed with
966@code{widget-forward} or @code{widget-backward}. This is only partially
967implemented.
968
969@enumerate a
970@item
971Widgets with tabbing order @code{-1} are ignored.
972
973@item
974(Unimplemented) When on a widget with tabbing order @var{n}, go to the
975next widget in the buffer with tabbing order @var{n+1} or @code{nil},
976whichever comes first.
977
978@item
979When on a widget with no tabbing order specified, go to the next widget
980in the buffer with a positive tabbing order, or @code{nil}
981@end enumerate
982
983@item :parent
a9f0a989 984The parent of a nested widget (e.g., a @code{menu-choice} item or an
cc6d0d2c
RS
985element of a @code{editable-list} widget).
986
987@item :sibling-args
988This keyword is only used for members of a @code{radio-button-choice} or
989@code{checklist}. The value should be a list of extra keyword
990arguments, which will be used when creating the @code{radio-button} or
991@code{checkbox} associated with this item.
992@end ignore
993@end table