Add arch taglines
[bpt/emacs.git] / lispref / customize.texi
CommitLineData
cc6d0d2c
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
177c0ea7 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::
177c0ea7
JB
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
7db0894f
RS
245symbol, and should return whatever customize should use as the
246``current value'' for that symbol (which need not be the symbol's Lisp
247value). The default is @code{default-value}.
248
249You have to really understand the workings of Custom to use
250@code{:get} correctly. It is meant for values that are treated in
251Custom as variables but are not actually stored in Lisp variables. It
252is almost surely a mistake to specify @code{getfunction} for a value
253that really is stored in a Lisp variable.
cc6d0d2c
RS
254
255@item :initialize @var{function}
256@var{function} should be a function used to initialize the variable when
257the @code{defcustom} is evaluated. It should take two arguments, the
258symbol and value. Here are some predefined functions meant for use in
259this way:
260
261@table @code
262@item custom-initialize-set
969fe9b5 263Use the variable's @code{:set} function to initialize the variable, but
7db0894f 264do not reinitialize it if it is already non-void.
cc6d0d2c
RS
265
266@item custom-initialize-default
969fe9b5
RS
267Like @code{custom-initialize-set}, but use the function
268@code{set-default} to set the variable, instead of the variable's
269@code{:set} function. This is the usual choice for a variable whose
270@code{:set} function enables or disables a minor mode; with this choice,
271defining the variable will not call the minor mode function, but
272customizing the variable will do so.
cc6d0d2c
RS
273
274@item custom-initialize-reset
7db0894f
RS
275Always use the @code{:set} function to initialize the variable. If
276the variable is already non-void, reset it by calling the @code{:set}
969fe9b5 277function using the current value (returned by the @code{:get} method).
7db0894f 278This is the default @code{:initialize} function.
cc6d0d2c
RS
279
280@item custom-initialize-changed
969fe9b5
RS
281Use the @code{:set} function to initialize the variable, if it is
282already set or has been customized; otherwise, just use
283@code{set-default}.
cc6d0d2c 284@end table
390538c3
RS
285
286@item :set-after @var{variables}
287When setting variables according to saved customizations, make sure to
288set the variables @var{variables} before this one; in other words, delay
289setting this variable until after those others have been handled. Use
290@code{:set-after} if setting this variable won't work properly unless
291those other variables already have their intended values.
969fe9b5 292@end table
cc6d0d2c 293
969fe9b5 294 The @code{:require} option is useful for an option that turns on the
cc6d0d2c
RS
295operation of a certain feature. Assuming that the package is coded to
296check the value of the option, you still need to arrange for the package
969fe9b5
RS
297to be loaded. You can do that with @code{:require}. @xref{Common
298Keywords}. Here is an example, from the library @file{paren.el}:
299
300@example
301(defcustom show-paren-mode nil
29b677db 302 "Toggle Show Paren mode..."
969fe9b5 303 :set (lambda (symbol value)
a9f0a989 304 (show-paren-mode (or value 0)))
969fe9b5
RS
305 :initialize 'custom-initialize-default
306 :type 'boolean
307 :group 'paren-showing
308 :require 'paren)
309@end example
cc6d0d2c 310
b6954afd
RS
311If a customization item has a type such as @code{hook} or @code{alist},
312which supports @code{:options}, you can add additional options to the
313item, outside the @code{defcustom} declaration, by calling
314@code{custom-add-option}. For example, if you define a function
315@code{my-lisp-mode-initialization} intended to be called from
316@code{emacs-lisp-mode-hook}, you might want to add that to the list of
317options for @code{emacs-lisp-mode-hook}, but not by editing its
318definition. You can do it thus:
319
320@example
8241495d
RS
321(custom-add-option 'emacs-lisp-mode-hook
322 'my-lisp-mode-initialization)
b6954afd 323@end example
cc6d0d2c
RS
324
325@defun custom-add-option symbol option
b6954afd 326To the customization @var{symbol}, add @var{option}.
cc6d0d2c 327
b6954afd
RS
328The precise effect of adding @var{option} depends on the customization
329type of @var{symbol}.
cc6d0d2c 330@end defun
cc6d0d2c
RS
331
332Internally, @code{defcustom} uses the symbol property
333@code{standard-value} to record the expression for the default value,
334and @code{saved-value} to record the value saved by the user with the
335customization buffer. The @code{saved-value} property is actually a
336list whose car is an expression which evaluates to the value.
337
cc6d0d2c
RS
338@node Customization Types
339@section Customization Types
340
341 When you define a user option with @code{defcustom}, you must specify
969fe9b5 342its @dfn{customization type}. That is a Lisp object which describes (1)
cc6d0d2c
RS
343which values are legitimate and (2) how to display the value in the
344customization buffer for editing.
345
346 You specify the customization type in @code{defcustom} with the
5a65439e
RS
347@code{:type} keyword. The argument of @code{:type} is evaluated, but
348only once when the @code{defcustom} is executed, so it isn't useful
349for the value to vary. Normally we use a quoted constant. For
350example:
cc6d0d2c
RS
351
352@example
353(defcustom diff-command "diff"
354 "*The command to use to run diff."
969fe9b5 355 :type '(string)
cc6d0d2c
RS
356 :group 'diff)
357@end example
358
969fe9b5
RS
359 In general, a customization type is a list whose first element is a
360symbol, one of the customization type names defined in the following
361sections. After this symbol come a number of arguments, depending on
362the symbol. Between the type symbol and its arguments, you can
363optionally write keyword-value pairs (@pxref{Type Keywords}).
cc6d0d2c 364
969fe9b5
RS
365 Some of the type symbols do not use any arguments; those are called
366@dfn{simple types}. For a simple type, if you do not use any
367keyword-value pairs, you can omit the parentheses around the type
368symbol. For example just @code{string} as a customization type is
369equivalent to @code{(string)}.
cc6d0d2c
RS
370
371@menu
372* Simple Types::
373* Composite Types::
374* Splicing into Lists::
375* Type Keywords::
376@end menu
377
c5c36e02 378All customization types are implemented as widgets; see @ref{Top, ,
333c5fc5 379Introduction, widget, The Emacs Widget Library}, for details.
c5c36e02 380
cc6d0d2c
RS
381@node Simple Types
382@subsection Simple Types
383
384 This section describes all the simple customization types.
385
386@table @code
387@item sexp
388The value may be any Lisp object that can be printed and read back. You
389can use @code{sexp} as a fall-back for any option, if you don't want to
390take the time to work out a more specific type to use.
391
392@item integer
393The value must be an integer, and is represented textually
394in the customization buffer.
395
396@item number
177f790c
MR
397The value must be a number (floating point or integer), and is
398represented textually in the customization buffer.
399
400@item float
401The value must be a floating point number, and is represented
402textually in the customization buffer.
cc6d0d2c
RS
403
404@item string
405The value must be a string, and the customization buffer shows just the
969fe9b5
RS
406contents, with no delimiting @samp{"} characters and no quoting with
407@samp{\}.
cc6d0d2c
RS
408
409@item regexp
969fe9b5
RS
410Like @code{string} except that the string must be a valid regular
411expression.
cc6d0d2c
RS
412
413@item character
414The value must be a character code. A character code is actually an
415integer, but this type shows the value by inserting the character in the
416buffer, rather than by showing the number.
417
418@item file
419The value must be a file name, and you can do completion with
420@kbd{M-@key{TAB}}.
421
422@item (file :must-match t)
423The value must be a file name for an existing file, and you can do
424completion with @kbd{M-@key{TAB}}.
425
426@item directory
427The value must be a directory name, and you can do completion with
428@kbd{M-@key{TAB}}.
429
a9f0a989
RS
430@item hook
431The value must be a list of functions (or a single function, but that is
432obsolete usage). This customization type is used for hook variables.
1911e6e5
RS
433You can use the @code{:options} keyword in a hook variable's
434@code{defcustom} to specify a list of functions recommended for use in
435the hook; see @ref{Variable Definitions}.
a9f0a989 436
b6954afd 437@item alist
08f0f5e9
KH
438The value must be a list of cons-cells, the @sc{car} of each cell
439representing a key, and the @sc{cdr} of the same cell representing an
440associated value. The user can add and delete key/value pairs, and
b6954afd
RS
441edit both the key and the value of each pair.
442
443You can specify the key and value types like this:
444
8241495d
RS
445@smallexample
446(alist :key-type @var{key-type} :value-type @var{value-type})
447@end smallexample
b6954afd
RS
448
449@noindent
450where @var{key-type} and @var{value-type} are customization type
451specifications. The default key type is @code{sexp}, and the default
452value type is @code{sexp}.
453
454The user can add any key matching the specified key type, but you can
455give some keys a preferential treatment by specifying them with the
456@code{:options} (see @ref{Variable Definitions}). The specified keys
457will always be shown in the customize buffer (together with a suitable
458value), with a checkbox to include or exclude or disable the key/value
459pair from the alist. The user will not be able to edit the keys
460specified by the @code{:options} keyword argument.
461
462The argument to the @code{:options} keywords should be a list of option
463specifications. Ordinarily, the options are simply atoms, which are the
464specified keys. For example:
465
8241495d 466@smallexample
b6954afd 467:options '("foo" "bar" "baz")
8241495d 468@end smallexample
b6954afd
RS
469
470@noindent
471specifies that there are three ``known'' keys, namely @code{"foo"},
472@code{"bar"} and @code{"baz"}, which will always be shown first.
473
474You may want to restrict the value type for specific keys, for example,
475the value associated with the @code{"bar"} key can only be an integer.
476You can specify this by using a list instead of an atom in the option
477specification. The first element will specify the key, like before,
478while the second element will specify the value type.
479
8241495d 480@smallexample
b6954afd 481:options '("foo" ("bar" integer) "baz")
8241495d 482@end smallexample
b6954afd
RS
483
484Finally, you may want to change how the key is presented. By default,
485the key is simply shown as a @code{const}, since the user cannot change
486the special keys specified with the @code{:options} keyword. However,
487you may want to use a more specialized type for presenting the key, like
488@code{function-item} if you know it is a symbol with a function binding.
489This is done by using a customization type specification instead of a
490symbol for the key.
491
8241495d 492@smallexample
b6954afd 493:options '("foo" ((function-item some-function) integer) "baz")
8241495d 494@end smallexample
b6954afd 495
08f0f5e9 496Many alists use lists with two elements, instead of cons cells. For
b6954afd
RS
497example,
498
8241495d 499@smallexample
b6954afd
RS
500(defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
501 "Each element is a list of the form (KEY VALUE).")
8241495d 502@end smallexample
b6954afd
RS
503
504@noindent
177c0ea7 505instead of
b6954afd 506
8241495d 507@smallexample
b6954afd
RS
508(defcustom cons-alist '(("foo" . 1) ("bar" . 2) ("baz" . 3))
509 "Each element is a cons-cell (KEY . VALUE).")
8241495d 510@end smallexample
b6954afd
RS
511
512Because of the way lists are implemented on top of cons cells, you can
513treat @code{list-alist} in the example above as a cons cell alist, where
514the value type is a list with a single element containing the real
515value.
516
8241495d 517@smallexample
b6954afd
RS
518(defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
519 "Each element is a list of the form (KEY VALUE)."
520 :type '(alist :value-type (group integer)))
8241495d 521@end smallexample
b6954afd
RS
522
523The @code{group} widget is used here instead of @code{list} only because
524the formatting is better suited for the purpose.
525
526Similarily, you can have alists with more values associated with each
527key, using variations of this trick:
528
8241495d 529@smallexample
177c0ea7 530(defcustom person-data '(("brian" 50 t)
b6954afd
RS
531 ("dorith" 55 nil)
532 ("ken" 52 t))
3d3df9e1
RS
533 "Alist of basic info about people.
534Each element has the form (NAME AGE MALE-FLAG)."
b6954afd
RS
535 :type '(alist :value-type (group age boolean)))
536
177c0ea7 537(defcustom pets '(("brian")
b6954afd
RS
538 ("dorith" "dog" "guppy")
539 ("ken" "cat"))
3d3df9e1
RS
540 "Alist of people's pets.
541In an element (KEY . VALUE), KEY is the person's name,
542and the VALUE is a list of that person's pets."
b6954afd 543 :type '(alist :value-type (repeat string)))
8241495d 544@end smallexample
b6954afd
RS
545
546@item plist
547The @code{plist} custom type is similar to the @code{alist} (see above),
548except that the information is stored as a property list, i.e. a list of
549this form:
550
8241495d 551@smallexample
b6954afd 552(@var{key} @var{value} @var{key} @var{value} @var{key} @var{value} @dots{})
8241495d 553@end smallexample
b6954afd
RS
554
555The default @code{:key-type} for @code{plist} is @code{symbol},
556rather than @code{sexp}.
557
cc6d0d2c
RS
558@item symbol
559The value must be a symbol. It appears in the customization buffer as
560the name of the symbol.
561
562@item function
563The value must be either a lambda expression or a function name. When
564it is a function name, you can do completion with @kbd{M-@key{TAB}}.
565
566@item variable
567The value must be a variable name, and you can do completion with
568@kbd{M-@key{TAB}}.
569
a9f0a989
RS
570@item face
571The value must be a symbol which is a face name, and you can do
572completion with @kbd{M-@key{TAB}}.
573
cc6d0d2c 574@item boolean
969fe9b5
RS
575The value is boolean---either @code{nil} or @code{t}. Note that by
576using @code{choice} and @code{const} together (see the next section),
577you can specify that the value must be @code{nil} or @code{t}, but also
578specify the text to describe each value in a way that fits the specific
579meaning of the alternative.
5e0c8a23
DL
580
581@item coding-system
582The value must be a coding-system name, and you can do completion with
583@kbd{M-@key{TAB}}.
584
585@item color
586The value must be a valid color name, and you can do completion with
587@kbd{M-@key{TAB}}. A sample is provided,
cc6d0d2c
RS
588@end table
589
590@node Composite Types
591@subsection Composite Types
608dc417 592@cindex arguments (of composite type)
cc6d0d2c
RS
593
594 When none of the simple types is appropriate, you can use composite
608dc417
RS
595types, which build new types from other types or from specified data.
596The specified types or data are called the @dfn{arguments} of the
597composite type. The composite type normally looks like this:
cc6d0d2c
RS
598
599@example
608dc417 600(@var{constructor} @var{arguments}@dots{})
cc6d0d2c
RS
601@end example
602
603@noindent
608dc417
RS
604but you can also add keyword-value pairs before the arguments, like
605this:
cc6d0d2c 606
608dc417
RS
607@example
608(@var{constructor} @r{@{}@var{keyword} @var{value}@r{@}}@dots{} @var{arguments}@dots{})
609@end example
cc6d0d2c 610
608dc417
RS
611 Here is a table of constructors and how to use them to write
612composite types:
613
614@table @code
cc6d0d2c
RS
615@item (cons @var{car-type} @var{cdr-type})
616The value must be a cons cell, its @sc{car} must fit @var{car-type}, and
a9f0a989 617its @sc{cdr} must fit @var{cdr-type}. For example, @code{(cons string
cc6d0d2c
RS
618symbol)} is a customization type which matches values such as
619@code{("foo" . foo)}.
620
969fe9b5 621In the customization buffer, the @sc{car} and the @sc{cdr} are
cc6d0d2c
RS
622displayed and edited separately, each according to the type
623that you specify for it.
624
625@item (list @var{element-types}@dots{})
626The value must be a list with exactly as many elements as the
627@var{element-types} you have specified; and each element must fit the
628corresponding @var{element-type}.
629
630For example, @code{(list integer string function)} describes a list of
631three elements; the first element must be an integer, the second a
632string, and the third a function.
633
a9f0a989 634In the customization buffer, each element is displayed and edited
cc6d0d2c
RS
635separately, according to the type specified for it.
636
637@item (vector @var{element-types}@dots{})
638Like @code{list} except that the value must be a vector instead of a
639list. The elements work the same as in @code{list}.
640
4577e8cc 641@item (choice @var{alternative-types}@dots{})
cc6d0d2c
RS
642The value must fit at least one of @var{alternative-types}.
643For example, @code{(choice integer string)} allows either an
644integer or a string.
645
646In the customization buffer, the user selects one of the alternatives
647using a menu, and can then edit the value in the usual way for that
648alternative.
649
650Normally the strings in this menu are determined automatically from the
651choices; however, you can specify different strings for the menu by
652including the @code{:tag} keyword in the alternatives. For example, if
653an integer stands for a number of spaces, while a string is text to use
654verbatim, you might write the customization type this way,
655
a9f0a989 656@example
cc6d0d2c
RS
657(choice (integer :tag "Number of spaces")
658 (string :tag "Literal text"))
a9f0a989 659@end example
cc6d0d2c
RS
660
661@noindent
662so that the menu offers @samp{Number of spaces} and @samp{Literal Text}.
663
969fe9b5
RS
664In any alternative for which @code{nil} is not a valid value, other than
665a @code{const}, you should specify a valid default for that alternative
666using the @code{:value} keyword. @xref{Type Keywords}.
667
b56f98ab
RS
668If some values are covered by more than one of the alternatives,
669customize will choose the first alternative that the value fits. This
670means you should always list the most specific types first, and the
671most general last. Here's an example of proper usage:
672
673@example
674(choice (const :tag "Off" nil) symbol (sexp :tag "Other"))
675@end example
676
677@noindent
678This way, the special value @code{nil} is not treated like other
679symbols, and symbols are not treated like other Lisp expressions.
680
4577e8cc
DL
681@item (radio @var{element-types}@dots{})
682This is similar to @code{choice}, except that the choices are displayed
683using `radio buttons' rather than a menu. This has the advantage of
684displaying documentation for the choices when applicable and so is often
685a good choice for a choice between constant functions
686(@code{function-item} customization types).
687
cc6d0d2c
RS
688@item (const @var{value})
689The value must be @var{value}---nothing else is allowed.
690
691The main use of @code{const} is inside of @code{choice}. For example,
692@code{(choice integer (const nil))} allows either an integer or
969fe9b5
RS
693@code{nil}.
694
695@code{:tag} is often used with @code{const}, inside of @code{choice}.
696For example,
697
a9f0a989 698@example
969fe9b5
RS
699(choice (const :tag "Yes" t)
700 (const :tag "No" nil)
701 (const :tag "Ask" foo))
a9f0a989 702@end example
cc6d0d2c 703
da03dc1d
RS
704@noindent
705describes a variable for which @code{t} means yes, @code{nil} means no,
706and @code{foo} means ``ask.''
707
708@item (other @var{value})
709This alternative can match any Lisp value, but if the user chooses this
710alternative, that selects the value @var{value}.
711
712The main use of @code{other} is as the last element of @code{choice}.
713For example,
714
715@example
716(choice (const :tag "Yes" t)
717 (const :tag "No" nil)
718 (other :tag "Ask" foo))
719@end example
720
721@noindent
722describes a variable for which @code{t} means yes, @code{nil} means no,
723and anything else means ``ask.'' If the user chooses @samp{Ask} from
724the menu of alternatives, that specifies the value @code{foo}; but any
725other value (not @code{t}, @code{nil} or @code{foo}) displays as
726@samp{Ask}, just like @code{foo}.
727
cc6d0d2c
RS
728@item (function-item @var{function})
729Like @code{const}, but used for values which are functions. This
969fe9b5
RS
730displays the documentation string as well as the function name.
731The documentation string is either the one you specify with
732@code{:doc}, or @var{function}'s own documentation string.
cc6d0d2c
RS
733
734@item (variable-item @var{variable})
735Like @code{const}, but used for values which are variable names. This
969fe9b5
RS
736displays the documentation string as well as the variable name. The
737documentation string is either the one you specify with @code{:doc}, or
738@var{variable}'s own documentation string.
cc6d0d2c 739
1f447a50
KH
740@item (set @var{types}@dots{})
741The value must be a list, and each element of the list must match one of
742the @var{types} specified.
743
744This appears in the customization buffer as a checklist, so that each of
745@var{types} may have either one corresponding element or none. It is
746not possible to specify two different elements that match the same one
747of @var{types}. For example, @code{(set integer symbol)} allows one
748integer and/or one symbol in the list; it does not allow multiple
749integers or multiple symbols. As a result, it is rare to use
750nonspecific types such as @code{integer} in a @code{set}.
751
752Most often, the @var{types} in a @code{set} are @code{const} types, as
753shown here:
754
755@example
756(set (const :bold) (const :italic))
757@end example
758
759Sometimes they describe possible elements in an alist:
760
761@example
762(set (cons :tag "Height" (const height) integer)
763 (cons :tag "Width" (const width) integer))
764@end example
765
766@noindent
767That lets the user specify a height value optionally
768and a width value optionally.
cc6d0d2c
RS
769
770@item (repeat @var{element-type})
771The value must be a list and each element of the list must fit the type
772@var{element-type}. This appears in the customization buffer as a
773list of elements, with @samp{[INS]} and @samp{[DEL]} buttons for adding
774more elements or removing elements.
608dc417
RS
775
776@item (restricted-sexp :match-alternatives @var{criteria})
777This is the most general composite type construct. The value may be
778any Lisp object that satisfies one of @var{criteria}. @var{criteria}
779should be a list, and each element should be one of these
780possibilities:
781
782@itemize @bullet
783@item
784A predicate---that is, a function of one argument that has no side
785effects, and returns either @code{nil} or non-@code{nil} according to
786the argument. Using a predicate in the list says that objects for which
787the predicate returns non-@code{nil} are acceptable.
788
789@item
790A quoted constant---that is, @code{'@var{object}}. This sort of element
791in the list says that @var{object} itself is an acceptable value.
792@end itemize
793
794For example,
795
796@example
797(restricted-sexp :match-alternatives
798 (integerp 't 'nil))
799@end example
800
801@noindent
802allows integers, @code{t} and @code{nil} as legitimate values.
803
804The customization buffer shows all legitimate values using their read
805syntax, and the user edits them textually.
806@end table
807
808 Here is a table of the keywords you can use in keyword-value pairs
809in a composite type:
810
811@table @code
812@item :tag @var{tag}
813Use @var{tag} as the name of this alternative, for user communication
814purposes. This is useful for a type that appears inside of a
815@code{choice}.
816
817@item :match-alternatives @var{criteria}
818Use @var{criteria} to match possible values. This is used only in
819@code{restricted-sexp}.
820
821@item :args @var{argumentlist}
822Use the elements of @var{argumentlist} as the arguments of the type
823construct. For instance, @code{(const :args (foo))} is equivalent to
824@code{(const foo)}. You rarely need to write @code{:args} explicitly,
825because normally the arguments are recognized automatically as
826whatever follows the last keyword-value pair.
cc6d0d2c
RS
827@end table
828
829@node Splicing into Lists
830@subsection Splicing into Lists
831
832 The @code{:inline} feature lets you splice a variable number of
833elements into the middle of a list or vector. You use it in a
834@code{set}, @code{choice} or @code{repeat} type which appears among the
835element-types of a @code{list} or @code{vector}.
836
837 Normally, each of the element-types in a @code{list} or @code{vector}
838describes one and only one element of the list or vector. Thus, if an
839element-type is a @code{repeat}, that specifies a list of unspecified
840length which appears as one element.
841
842 But when the element-type uses @code{:inline}, the value it matches is
843merged directly into the containing sequence. For example, if it
844matches a list with three elements, those become three elements of the
845overall sequence. This is analogous to using @samp{,@@} in the backquote
846construct.
847
241f79af 848 For example, to specify a list whose first element must be @code{baz}
cc6d0d2c
RS
849and whose remaining arguments should be zero or more of @code{foo} and
850@code{bar}, use this customization type:
851
852@example
241f79af 853(list (const baz) (set :inline t (const foo) (const bar)))
cc6d0d2c
RS
854@end example
855
856@noindent
241f79af
PA
857This matches values such as @code{(baz)}, @code{(baz foo)}, @code{(baz bar)}
858and @code{(baz foo bar)}.
cc6d0d2c
RS
859
860 When the element-type is a @code{choice}, you use @code{:inline} not
861in the @code{choice} itself, but in (some of) the alternatives of the
862@code{choice}. For example, to match a list which must start with a
863file name, followed either by the symbol @code{t} or two strings, use
864this customization type:
865
866@example
867(list file
868 (choice (const t)
869 (list :inline t string string)))
870@end example
871
872@noindent
873If the user chooses the first alternative in the choice, then the
874overall list has two elements and the second element is @code{t}. If
875the user chooses the second alternative, then the overall list has three
876elements and the second and third must be strings.
877
878@node Type Keywords
879@subsection Type Keywords
880
881You can specify keyword-argument pairs in a customization type after the
882type name symbol. Here are the keywords you can use, and their
883meanings:
884
885@table @code
886@item :value @var{default}
887This is used for a type that appears as an alternative inside of
969fe9b5 888@code{choice}; it specifies the default value to use, at first, if and
cc6d0d2c
RS
889when the user selects this alternative with the menu in the
890customization buffer.
891
892Of course, if the actual value of the option fits this alternative, it
893will appear showing the actual value, not @var{default}.
894
969fe9b5
RS
895If @code{nil} is not a valid value for the alternative, then it is
896essential to specify a valid default with @code{:value}.
897
cc6d0d2c
RS
898@item :format @var{format-string}
899This string will be inserted in the buffer to represent the value
900corresponding to the type. The following @samp{%} escapes are available
901for use in @var{format-string}:
902
903@table @samp
cc6d0d2c
RS
904@item %[@var{button}%]
905Display the text @var{button} marked as a button. The @code{:action}
906attribute specifies what the button will do if the user invokes it;
907its value is a function which takes two arguments---the widget which
908the button appears in, and the event.
909
910There is no way to specify two different buttons with different
969fe9b5 911actions.
cc6d0d2c
RS
912
913@item %@{@var{sample}%@}
914Show @var{sample} in a special face specified by @code{:sample-face}.
915
916@item %v
917Substitute the item's value. How the value is represented depends on
918the kind of item, and (for variables) on the customization type.
919
920@item %d
921Substitute the item's documentation string.
922
923@item %h
924Like @samp{%d}, but if the documentation string is more than one line,
925add an active field to control whether to show all of it or just the
926first line.
927
928@item %t
929Substitute the tag here. You specify the tag with the @code{:tag}
930keyword.
931
932@item %%
177c0ea7 933Display a literal @samp{%}.
cc6d0d2c
RS
934@end table
935
969fe9b5
RS
936@item :action @var{action}
937Perform @var{action} if the user clicks on a button.
938
cc6d0d2c 939@item :button-face @var{face}
969fe9b5
RS
940Use the face @var{face} (a face name or a list of face names) for button
941text displayed with @samp{%[@dots{}%]}.
cc6d0d2c 942
969fe9b5
RS
943@item :button-prefix @var{prefix}
944@itemx :button-suffix @var{suffix}
cc6d0d2c
RS
945These specify the text to display before and after a button.
946Each can be:
947
948@table @asis
949@item @code{nil}
950No text is inserted.
951
952@item a string
953The string is inserted literally.
954
955@item a symbol
956The symbol's value is used.
957@end table
958
969fe9b5
RS
959@item :tag @var{tag}
960Use @var{tag} (a string) as the tag for the value (or part of the value)
961that corresponds to this type.
962
cc6d0d2c 963@item :doc @var{doc}
969fe9b5
RS
964Use @var{doc} as the documentation string for this value (or part of the
965value) that corresponds to this type. In order for this to work, you
966must specify a value for @code{:format}, and use @samp{%d} or @samp{%h}
967in that value.
cc6d0d2c 968
969fe9b5
RS
969The usual reason to specify a documentation string for a type is to
970provide more information about the meanings of alternatives inside a
971@code{:choice} type or the parts of some other composite type.
cc6d0d2c
RS
972
973@item :help-echo @var{motion-doc}
974When you move to this item with @code{widget-forward} or
19182f77
DL
975@code{widget-backward}, it will display the string @var{motion-doc} in
976the echo area. In addition, @var{motion-doc} is used as the mouse
977@code{help-echo} string and may actually be a function or form evaluated
17458c91
LT
978to yield a help string. If it is a function, it is called with one
979argument, the widget.
e23a63a5 980@c @xref{Text help-echo}.
cc6d0d2c
RS
981
982@item :match @var{function}
969fe9b5
RS
983Specify how to decide whether a value matches the type. The
984corresponding value, @var{function}, should be a function that accepts
985two arguments, a widget and a value; it should return non-@code{nil} if
986the value is acceptable.
cc6d0d2c
RS
987
988@ignore
989@item :indent @var{columns}
990Indent this item by @var{columns} columns. The indentation is used for
991@samp{%n}, and automatically for group names, for checklists and radio
992buttons, and for editable lists. It affects the whole of the
993item except for the first line.
994
995@item :offset @var{columns}
996An integer indicating how many extra spaces to indent the subitems of
997this item. By default, subitems are indented the same as their parent.
998
999@item :extra-offset
1000An integer indicating how many extra spaces to add to this item's
1001indentation, compared to its parent.
1002
1003@item :notify
1004A function called each time the item or a subitem is changed. The
1005function is called with two or three arguments. The first argument is
1006the item itself, the second argument is the item that was changed, and
1007the third argument is the event leading to the change, if any.
1008
1009@item :menu-tag
35208b42 1010A tag used in the menu when the widget is used as an option in a
cc6d0d2c
RS
1011@code{menu-choice} widget.
1012
1013@item :menu-tag-get
35208b42 1014A function used for finding the tag when the widget is used as an option
cc6d0d2c
RS
1015in a @code{menu-choice} widget. By default, the tag used will be either the
1016@code{:menu-tag} or @code{:tag} property if present, or the @code{princ}
1017representation of the @code{:value} property if not.
1018
1019@item :validate
35208b42
RS
1020A function which takes a widget as an argument, and return @code{nil}
1021if the widget's current value is valid for the widget. Otherwise, it
1022should return the widget containing the invalid data, and set that
1023widget's @code{:error} property to a string explaining the error.
cc6d0d2c
RS
1024
1025You can use the function @code{widget-children-validate} for this job;
1026it tests that all children of @var{widget} are valid.
1027
1028@item :tab-order
1029Specify the order in which widgets are traversed with
1030@code{widget-forward} or @code{widget-backward}. This is only partially
1031implemented.
1032
1033@enumerate a
1034@item
1035Widgets with tabbing order @code{-1} are ignored.
1036
177c0ea7 1037@item
cc6d0d2c
RS
1038(Unimplemented) When on a widget with tabbing order @var{n}, go to the
1039next widget in the buffer with tabbing order @var{n+1} or @code{nil},
1040whichever comes first.
1041
1042@item
1043When on a widget with no tabbing order specified, go to the next widget
1044in the buffer with a positive tabbing order, or @code{nil}
1045@end enumerate
1046
1047@item :parent
a9f0a989 1048The parent of a nested widget (e.g., a @code{menu-choice} item or an
cc6d0d2c
RS
1049element of a @code{editable-list} widget).
1050
1051@item :sibling-args
1052This keyword is only used for members of a @code{radio-button-choice} or
1053@code{checklist}. The value should be a list of extra keyword
1054arguments, which will be used when creating the @code{radio-button} or
1055@code{checkbox} associated with this item.
1056@end ignore
1057@end table
ab5796a9
MB
1058
1059@ignore
1060 arch-tag: d1b8fad3-f48c-4ce4-a402-f73b5ef19bd2
1061@end ignore