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