* bitmaps/README:
[bpt/emacs.git] / doc / lispref / customize.texi
CommitLineData
b8d4c8d0
GM
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
3@c Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
57ebf0be 4@c 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
b8d4c8d0 5@c See the file elisp.texi for copying conditions.
6336d8c3 6@setfilename ../../info/customize
b8d4c8d0
GM
7@node Customization, Loading, Macros, Top
8@chapter Writing Customization Definitions
9
10@cindex customization definitions
11 This chapter describes how to declare user options for customization,
12and also customization groups for classifying them. We use the term
13@dfn{customization item} to include both kinds of customization
14definitions---as well as face definitions (@pxref{Defining Faces}).
15
16@menu
17* Common Keywords:: Common keyword arguments for all kinds of
18 customization declarations.
19* Group Definitions:: Writing customization group definitions.
20* Variable Definitions:: Declaring user options.
21* Customization Types:: Specifying the type of a user option.
22@end menu
23
24@node Common Keywords
25@section Common Item Keywords
26
27@cindex customization keywords
28 All kinds of customization declarations (for variables and groups, and
29for faces) accept keyword arguments for specifying various information.
30This section describes some keywords that apply to all kinds.
31
32 All of these keywords, except @code{:tag}, can be used more than once
33in a given item. Each use of the keyword has an independent effect.
34The keyword @code{:tag} is an exception because any given item can only
35display one name.
36
37@table @code
38@item :tag @var{label}
39@kindex tag@r{, customization keyword}
40Use @var{label}, a string, instead of the item's name, to label the
41item in customization menus and buffers. @strong{Don't use a tag
42which is substantially different from the item's real name; that would
43cause confusion.} One legitimate case for use of @code{:tag} is to
44specify a dash where normally a hyphen would be converted to a space:
45
46@example
47(defcustom cursor-in-non-selected-windows @dots{}
48 :tag "Cursor In Non-selected Windows"
49@end example
50
51@kindex group@r{, customization keyword}
52@item :group @var{group}
53Put this customization item in group @var{group}. When you use
54@code{:group} in a @code{defgroup}, it makes the new group a subgroup of
55@var{group}.
56
57If you use this keyword more than once, you can put a single item into
58more than one group. Displaying any of those groups will show this
59item. Please don't overdo this, since the result would be annoying.
60
61@item :link @var{link-data}
62@kindex link@r{, customization keyword}
63Include an external link after the documentation string for this item.
64This is a sentence containing an active field which references some
65other documentation.
66
67There are several alternatives you can use for @var{link-data}:
68
69@table @code
70@item (custom-manual @var{info-node})
71Link to an Info node; @var{info-node} is a string which specifies the
72node name, as in @code{"(emacs)Top"}. The link appears as
73@samp{[Manual]} in the customization buffer and enters the built-in
74Info reader on @var{info-node}.
75
76@item (info-link @var{info-node})
77Like @code{custom-manual} except that the link appears
78in the customization buffer with the Info node name.
79
80@item (url-link @var{url})
81Link to a web page; @var{url} is a string which specifies the
82@acronym{URL}. The link appears in the customization buffer as
83@var{url} and invokes the WWW browser specified by
84@code{browse-url-browser-function}.
85
86@item (emacs-commentary-link @var{library})
87Link to the commentary section of a library; @var{library} is a string
88which specifies the library name.
89
90@item (emacs-library-link @var{library})
91Link to an Emacs Lisp library file; @var{library} is a string which
92specifies the library name.
93
94@item (file-link @var{file})
95Link to a file; @var{file} is a string which specifies the name of the
96file to visit with @code{find-file} when the user invokes this link.
97
98@item (function-link @var{function})
99Link to the documentation of a function; @var{function} is a string
100which specifies the name of the function to describe with
101@code{describe-function} when the user invokes this link.
102
103@item (variable-link @var{variable})
104Link to the documentation of a variable; @var{variable} is a string
105which specifies the name of the variable to describe with
106@code{describe-variable} when the user invokes this link.
107
108@item (custom-group-link @var{group})
109Link to another customization group. Invoking it creates a new
110customization buffer for @var{group}.
111@end table
112
113You can specify the text to use in the customization buffer by adding
114@code{:tag @var{name}} after the first element of the @var{link-data};
115for example, @code{(info-link :tag "foo" "(emacs)Top")} makes a link to
116the Emacs manual which appears in the buffer as @samp{foo}.
117
118An item can have more than one external link; however, most items have
119none at all.
120
121@item :load @var{file}
122@kindex load@r{, customization keyword}
123Load file @var{file} (a string) before displaying this customization
124item. Loading is done with @code{load-library}, and only if the file is
125not already loaded.
126
127@item :require @var{feature}
128@kindex require@r{, customization keyword}
129Execute @code{(require '@var{feature})} when your saved customizations
130set the value of this item. @var{feature} should be a symbol.
131
132The most common reason to use @code{:require} is when a variable enables
133a feature such as a minor mode, and just setting the variable won't have
134any effect unless the code which implements the mode is loaded.
135
136@item :version @var{version}
137@kindex version@r{, customization keyword}
138This keyword specifies that the item was first introduced in Emacs
139version @var{version}, or that its default value was changed in that
140version. The value @var{version} must be a string.
141
142@item :package-version '(@var{package} . @var{version})
143@kindex package-version@r{, customization keyword}
144This keyword specifies that the item was first introduced in
145@var{package} version @var{version}, or that its meaning or default
146value was changed in that version. The value of @var{package} is a
147symbol and @var{version} is a string.
148
149This keyword takes priority over @code{:version}.
150
151@var{package} should be the official name of the package, such as MH-E
152or Gnus. If the package @var{package} is released as part of Emacs,
153@var{package} and @var{version} should appear in the value of
154@code{customize-package-emacs-version-alist}.
155@end table
156
157Packages distributed as part of Emacs that use the
158@code{:package-version} keyword must also update the
159@code{customize-package-emacs-version-alist} variable.
160
161@defvar customize-package-emacs-version-alist
162This alist provides a mapping for the versions of Emacs that are
163associated with versions of a package listed in the
164@code{:package-version} keyword. Its elements look like this:
165
166@example
167(@var{package} (@var{pversion} . @var{eversion})@dots{})
168@end example
169
170For each @var{package}, which is a symbol, there are one or more
171elements that contain a package version @var{pversion} with an
172associated Emacs version @var{eversion}. These versions are strings.
173For example, the MH-E package updates this alist with the following:
174
175@smallexample
176(add-to-list 'customize-package-emacs-version-alist
177 '(MH-E ("6.0" . "22.1") ("6.1" . "22.1") ("7.0" . "22.1")
178 ("7.1" . "22.1") ("7.2" . "22.1") ("7.3" . "22.1")
179 ("7.4" . "22.1") ("8.0" . "22.1")))
180@end smallexample
181
182The value of @var{package} needs to be unique and it needs to match
183the @var{package} value appearing in the @code{:package-version}
184keyword. Since the user might see the value in a error message, a good
185choice is the official name of the package, such as MH-E or Gnus.
186@end defvar
187
188@node Group Definitions
189@section Defining Customization Groups
190@cindex define customization group
191@cindex customization groups, defining
192
193 Each Emacs Lisp package should have one main customization group which
194contains all the options, faces and other groups in the package. If the
195package has a small number of options and faces, use just one group and
196put everything in it. When there are more than twelve or so options and
197faces, then you should structure them into subgroups, and put the
198subgroups under the package's main customization group. It is OK to
199put some of the options and faces in the package's main group alongside
200the subgroups.
201
202 The package's main or only group should be a member of one or more of
203the standard customization groups. (To display the full list of them,
204use @kbd{M-x customize}.) Choose one or more of them (but not too
205many), and add your group to each of them using the @code{:group}
206keyword.
207
208 The way to declare new customization groups is with @code{defgroup}.
209
210@defmac defgroup group members doc [keyword value]@dots{}
211Declare @var{group} as a customization group containing @var{members}.
212Do not quote the symbol @var{group}. The argument @var{doc} specifies
213the documentation string for the group.
214
215The argument @var{members} is a list specifying an initial set of
216customization items to be members of the group. However, most often
217@var{members} is @code{nil}, and you specify the group's members by
218using the @code{:group} keyword when defining those members.
219
220If you want to specify group members through @var{members}, each element
221should have the form @code{(@var{name} @var{widget})}. Here @var{name}
222is a symbol, and @var{widget} is a widget type for editing that symbol.
223Useful widgets are @code{custom-variable} for a variable,
224@code{custom-face} for a face, and @code{custom-group} for a group.
225
226When you introduce a new group into Emacs, use the @code{:version}
227keyword in the @code{defgroup}; then you need not use it for
228the individual members of the group.
229
230In addition to the common keywords (@pxref{Common Keywords}), you can
231also use this keyword in @code{defgroup}:
232
233@table @code
234@item :prefix @var{prefix}
235@kindex prefix@r{, @code{defgroup} keyword}
236If the name of an item in the group starts with @var{prefix}, then the
237tag for that item is constructed (by default) by omitting @var{prefix}.
238
239One group can have any number of prefixes.
240@end table
241@end defmac
242
243 The prefix-discarding feature is currently turned off, which means
244that @code{:prefix} currently has no effect. We did this because we
245found that discarding the specified prefixes often led to confusing
246names for options. This happened because the people who wrote the
247@code{defgroup} definitions for various groups added @code{:prefix}
248keywords whenever they make logical sense---that is, whenever the
249variables in the library have a common prefix.
250
251 In order to obtain good results with @code{:prefix}, it would be
252necessary to check the specific effects of discarding a particular
253prefix, given the specific items in a group and their names and
254documentation. If the resulting text is not clear, then @code{:prefix}
255should not be used in that case.
256
257 It should be possible to recheck all the customization groups, delete
258the @code{:prefix} specifications which give unclear results, and then
259turn this feature back on, if someone would like to do the work.
260
261@node Variable Definitions
262@section Defining Customization Variables
263@cindex define customization options
264@cindex customization variables, how to define
265
266 Use @code{defcustom} to declare user-customizable variables.
267
268@defmac defcustom option standard doc [keyword value]@dots{}
269This construct declares @var{option} as a customizable user option
270variable. You should not quote @var{option}. The argument @var{doc}
271specifies the documentation string for the variable. There is no need
272to start it with a @samp{*}, because @code{defcustom} automatically
273marks @var{option} as a @dfn{user option} (@pxref{Defining
274Variables}).
275
276The argument @var{standard} is an expression that specifies the
277standard value for @var{option}. Evaluating the @code{defcustom} form
278evaluates @var{standard}, but does not necessarily install the
279standard value. If @var{option} already has a default value,
280@code{defcustom} does not change it. If the user has saved a
281customization for @var{option}, @code{defcustom} installs the user's
282customized value as @var{option}'s default value. If neither of those
283cases applies, @code{defcustom} installs the result of evaluating
284@var{standard} as the default value.
285
286The expression @var{standard} can be evaluated at various other times,
287too---whenever the customization facility needs to know @var{option}'s
288standard value. So be sure to use an expression which is harmless to
289evaluate at any time. We recommend avoiding backquotes in
290@var{standard}, because they are not expanded when editing the value,
291so list values will appear to have the wrong structure.
292
293Every @code{defcustom} should specify @code{:group} at least once.
294
295If you specify the @code{:set} keyword, to make the variable take other
296special actions when set through the customization buffer, the
297variable's documentation string should tell the user specifically how
298to do the same job in hand-written Lisp code.
299
300When you evaluate a @code{defcustom} form with @kbd{C-M-x} in Emacs Lisp
301mode (@code{eval-defun}), a special feature of @code{eval-defun}
302arranges to set the variable unconditionally, without testing whether
303its value is void. (The same feature applies to @code{defvar}.)
304@xref{Defining Variables}.
305@end defmac
306
307 @code{defcustom} accepts the following additional keywords:
308
309@table @code
310@item :type @var{type}
311Use @var{type} as the data type for this option. It specifies which
312values are legitimate, and how to display the value.
313@xref{Customization Types}, for more information.
314
315@item :options @var{value-list}
316@kindex options@r{, @code{defcustom} keyword}
317Specify the list of reasonable values for use in this
318option. The user is not restricted to using only these values, but they
319are offered as convenient alternatives.
320
321This is meaningful only for certain types, currently including
322@code{hook}, @code{plist} and @code{alist}. See the definition of the
323individual types for a description of how to use @code{:options}.
324
325@item :set @var{setfunction}
326@kindex set@r{, @code{defcustom} keyword}
327Specify @var{setfunction} as the way to change the value of this
328option. The function @var{setfunction} should take two arguments, a
329symbol (the option name) and the new value, and should do whatever is
330necessary to update the value properly for this option (which may not
331mean simply setting the option as a Lisp variable). The default for
332@var{setfunction} is @code{set-default}.
333
334@item :get @var{getfunction}
335@kindex get@r{, @code{defcustom} keyword}
336Specify @var{getfunction} as the way to extract the value of this
337option. The function @var{getfunction} should take one argument, a
338symbol, and should return whatever customize should use as the
339``current value'' for that symbol (which need not be the symbol's Lisp
340value). The default is @code{default-value}.
341
342You have to really understand the workings of Custom to use
343@code{:get} correctly. It is meant for values that are treated in
344Custom as variables but are not actually stored in Lisp variables. It
345is almost surely a mistake to specify @code{getfunction} for a value
346that really is stored in a Lisp variable.
347
348@item :initialize @var{function}
349@kindex initialize@r{, @code{defcustom} keyword}
350@var{function} should be a function used to initialize the variable
351when the @code{defcustom} is evaluated. It should take two arguments,
352the option name (a symbol) and the value. Here are some predefined
353functions meant for use in this way:
354
355@table @code
356@item custom-initialize-set
357Use the variable's @code{:set} function to initialize the variable, but
358do not reinitialize it if it is already non-void.
359
360@item custom-initialize-default
361Like @code{custom-initialize-set}, but use the function
362@code{set-default} to set the variable, instead of the variable's
363@code{:set} function. This is the usual choice for a variable whose
364@code{:set} function enables or disables a minor mode; with this choice,
365defining the variable will not call the minor mode function, but
366customizing the variable will do so.
367
368@item custom-initialize-reset
369Always use the @code{:set} function to initialize the variable. If
370the variable is already non-void, reset it by calling the @code{:set}
371function using the current value (returned by the @code{:get} method).
372This is the default @code{:initialize} function.
373
374@item custom-initialize-changed
375Use the @code{:set} function to initialize the variable, if it is
376already set or has been customized; otherwise, just use
377@code{set-default}.
378
379@item custom-initialize-safe-set
380@itemx custom-initialize-safe-default
381These functions behave like @code{custom-initialize-set}
382(@code{custom-initialize-default}, respectively), but catch errors.
383If an error occurs during initialization, they set the variable to
384@code{nil} using @code{set-default}, and throw no error.
385
386These two functions are only meant for options defined in pre-loaded
387files, where some variables or functions used to compute the option's
388value may not yet be defined. The option normally gets updated in
389@file{startup.el}, ignoring the previously computed value. Because of
390this typical usage, the value which these two functions compute
391normally only matters when, after startup, one unsets the option's
392value and then reevaluates the defcustom. By that time, the necessary
393variables and functions will be defined, so there will not be an error.
394@end table
395
db21122c
GM
396@item :risky @var{value}
397@kindex risky@r{, @code{defcustom} keyword}
398Set this variable's @code{risky-local-variable} property to @var{value}.
399
400@item :safe @var{function}
401@kindex safe@r{, @code{defcustom} keyword}
402Set this variable's @code{safe-local-variable} property to @var{function}.
403
b8d4c8d0
GM
404@item :set-after @var{variables}
405@kindex set-after@r{, @code{defcustom} keyword}
406When setting variables according to saved customizations, make sure to
407set the variables @var{variables} before this one; in other words, delay
408setting this variable until after those others have been handled. Use
409@code{:set-after} if setting this variable won't work properly unless
410those other variables already have their intended values.
411@end table
412
413 The @code{:require} keyword is useful for an option that turns on the
414operation of a certain feature. Assuming that the package is coded to
415check the value of the option, you still need to arrange for the package
416to be loaded. You can do that with @code{:require}. @xref{Common
417Keywords}. Here is an example, from the library @file{saveplace.el}:
418
419@example
420(defcustom save-place nil
421 "Non-nil means automatically save place in each file..."
422 :type 'boolean
423 :require 'saveplace
424 :group 'save-place)
425@end example
426
427If a customization item has a type such as @code{hook} or
428@code{alist}, which supports @code{:options}, you can add additional
429values to the list from outside the @code{defcustom} declaration by
430calling @code{custom-add-frequent-value}. For example, if you define a
431function @code{my-lisp-mode-initialization} intended to be called from
432@code{emacs-lisp-mode-hook}, you might want to add that to the list of
433reasonable values for @code{emacs-lisp-mode-hook}, but not by editing
434its definition. You can do it thus:
435
436@example
437(custom-add-frequent-value 'emacs-lisp-mode-hook
438 'my-lisp-mode-initialization)
439@end example
440
441@defun custom-add-frequent-value symbol value
442For the customization option @var{symbol}, add @var{value} to the
443list of reasonable values.
444
445The precise effect of adding a value depends on the customization type
446of @var{symbol}.
447@end defun
448
449Internally, @code{defcustom} uses the symbol property
450@code{standard-value} to record the expression for the standard value,
451and @code{saved-value} to record the value saved by the user with the
452customization buffer. Both properties are actually lists whose car is
453an expression which evaluates to the value.
454
455@node Customization Types
456@section Customization Types
457
458@cindex customization types
459 When you define a user option with @code{defcustom}, you must specify
460its @dfn{customization type}. That is a Lisp object which describes (1)
461which values are legitimate and (2) how to display the value in the
462customization buffer for editing.
463
464@kindex type@r{, @code{defcustom} keyword}
465 You specify the customization type in @code{defcustom} with the
466@code{:type} keyword. The argument of @code{:type} is evaluated, but
467only once when the @code{defcustom} is executed, so it isn't useful
468for the value to vary. Normally we use a quoted constant. For
469example:
470
471@example
472(defcustom diff-command "diff"
473 "The command to use to run diff."
474 :type '(string)
475 :group 'diff)
476@end example
477
478 In general, a customization type is a list whose first element is a
479symbol, one of the customization type names defined in the following
480sections. After this symbol come a number of arguments, depending on
481the symbol. Between the type symbol and its arguments, you can
482optionally write keyword-value pairs (@pxref{Type Keywords}).
483
484 Some of the type symbols do not use any arguments; those are called
485@dfn{simple types}. For a simple type, if you do not use any
486keyword-value pairs, you can omit the parentheses around the type
487symbol. For example just @code{string} as a customization type is
488equivalent to @code{(string)}.
489
490@menu
491* Simple Types::
492* Composite Types::
493* Splicing into Lists::
494* Type Keywords::
495* Defining New Types::
496@end menu
497
498All customization types are implemented as widgets; see @ref{Top, ,
499Introduction, widget, The Emacs Widget Library}, for details.
500
501@node Simple Types
502@subsection Simple Types
503
504 This section describes all the simple customization types.
505
506@table @code
507@item sexp
508The value may be any Lisp object that can be printed and read back. You
509can use @code{sexp} as a fall-back for any option, if you don't want to
510take the time to work out a more specific type to use.
511
512@item integer
513The value must be an integer, and is represented textually
514in the customization buffer.
515
516@item number
517The value must be a number (floating point or integer), and is
518represented textually in the customization buffer.
519
520@item float
521The value must be a floating point number, and is represented
522textually in the customization buffer.
523
524@item string
525The value must be a string, and the customization buffer shows just the
526contents, with no delimiting @samp{"} characters and no quoting with
527@samp{\}.
528
529@item regexp
530Like @code{string} except that the string must be a valid regular
531expression.
532
533@item character
534The value must be a character code. A character code is actually an
535integer, but this type shows the value by inserting the character in the
536buffer, rather than by showing the number.
537
538@item file
539The value must be a file name, and you can do completion with
540@kbd{M-@key{TAB}}.
541
542@item (file :must-match t)
543The value must be a file name for an existing file, and you can do
544completion with @kbd{M-@key{TAB}}.
545
546@item directory
547The value must be a directory name, and you can do completion with
548@kbd{M-@key{TAB}}.
549
550@item hook
551The value must be a list of functions (or a single function, but that is
552obsolete usage). This customization type is used for hook variables.
553You can use the @code{:options} keyword in a hook variable's
554@code{defcustom} to specify a list of functions recommended for use in
555the hook; see @ref{Variable Definitions}.
556
557@item alist
558The value must be a list of cons-cells, the @sc{car} of each cell
559representing a key, and the @sc{cdr} of the same cell representing an
560associated value. The user can add and delete key/value pairs, and
561edit both the key and the value of each pair.
562
563You can specify the key and value types like this:
564
565@smallexample
566(alist :key-type @var{key-type} :value-type @var{value-type})
567@end smallexample
568
569@noindent
570where @var{key-type} and @var{value-type} are customization type
571specifications. The default key type is @code{sexp}, and the default
572value type is @code{sexp}.
573
574The user can add any key matching the specified key type, but you can
575give some keys a preferential treatment by specifying them with the
576@code{:options} (see @ref{Variable Definitions}). The specified keys
577will always be shown in the customize buffer (together with a suitable
578value), with a checkbox to include or exclude or disable the key/value
579pair from the alist. The user will not be able to edit the keys
580specified by the @code{:options} keyword argument.
581
582The argument to the @code{:options} keywords should be a list of
583specifications for reasonable keys in the alist. Ordinarily, they are
584simply atoms, which stand for themselves as. For example:
585
586@smallexample
587:options '("foo" "bar" "baz")
588@end smallexample
589
590@noindent
591specifies that there are three ``known'' keys, namely @code{"foo"},
592@code{"bar"} and @code{"baz"}, which will always be shown first.
593
594You may want to restrict the value type for specific keys, for
595example, the value associated with the @code{"bar"} key can only be an
596integer. You can specify this by using a list instead of an atom in
597the list. The first element will specify the key, like before, while
598the second element will specify the value type. For example:
599
600@smallexample
601:options '("foo" ("bar" integer) "baz")
602@end smallexample
603
604Finally, you may want to change how the key is presented. By default,
605the key is simply shown as a @code{const}, since the user cannot change
606the special keys specified with the @code{:options} keyword. However,
607you may want to use a more specialized type for presenting the key, like
608@code{function-item} if you know it is a symbol with a function binding.
609This is done by using a customization type specification instead of a
610symbol for the key.
611
612@smallexample
613:options '("foo" ((function-item some-function) integer)
614 "baz")
615@end smallexample
616
617Many alists use lists with two elements, instead of cons cells. For
618example,
619
620@smallexample
621(defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
622 "Each element is a list of the form (KEY VALUE).")
623@end smallexample
624
625@noindent
626instead of
627
628@smallexample
629(defcustom cons-alist '(("foo" . 1) ("bar" . 2) ("baz" . 3))
630 "Each element is a cons-cell (KEY . VALUE).")
631@end smallexample
632
633Because of the way lists are implemented on top of cons cells, you can
634treat @code{list-alist} in the example above as a cons cell alist, where
635the value type is a list with a single element containing the real
636value.
637
638@smallexample
639(defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
640 "Each element is a list of the form (KEY VALUE)."
641 :type '(alist :value-type (group integer)))
642@end smallexample
643
644The @code{group} widget is used here instead of @code{list} only because
645the formatting is better suited for the purpose.
646
647Similarly, you can have alists with more values associated with each
648key, using variations of this trick:
649
650@smallexample
651(defcustom person-data '(("brian" 50 t)
652 ("dorith" 55 nil)
653 ("ken" 52 t))
654 "Alist of basic info about people.
655Each element has the form (NAME AGE MALE-FLAG)."
656 :type '(alist :value-type (group integer boolean)))
657
658(defcustom pets '(("brian")
659 ("dorith" "dog" "guppy")
660 ("ken" "cat"))
661 "Alist of people's pets.
662In an element (KEY . VALUE), KEY is the person's name,
663and the VALUE is a list of that person's pets."
664 :type '(alist :value-type (repeat string)))
665@end smallexample
666
667@item plist
668The @code{plist} custom type is similar to the @code{alist} (see above),
669except that the information is stored as a property list, i.e. a list of
670this form:
671
672@smallexample
673(@var{key} @var{value} @var{key} @var{value} @var{key} @var{value} @dots{})
674@end smallexample
675
676The default @code{:key-type} for @code{plist} is @code{symbol},
677rather than @code{sexp}.
678
679@item symbol
680The value must be a symbol. It appears in the customization buffer as
681the name of the symbol.
682
683@item function
684The value must be either a lambda expression or a function name. When
685it is a function name, you can do completion with @kbd{M-@key{TAB}}.
686
687@item variable
688The value must be a variable name, and you can do completion with
689@kbd{M-@key{TAB}}.
690
691@item face
692The value must be a symbol which is a face name, and you can do
693completion with @kbd{M-@key{TAB}}.
694
695@item boolean
696The value is boolean---either @code{nil} or @code{t}. Note that by
697using @code{choice} and @code{const} together (see the next section),
698you can specify that the value must be @code{nil} or @code{t}, but also
699specify the text to describe each value in a way that fits the specific
700meaning of the alternative.
701
702@item coding-system
703The value must be a coding-system name, and you can do completion with
704@kbd{M-@key{TAB}}.
705
706@item color
707The value must be a valid color name, and you can do completion with
708@kbd{M-@key{TAB}}. A sample is provided.
709@end table
710
711@node Composite Types
712@subsection Composite Types
713@cindex Composite Types (customization)
714
715 When none of the simple types is appropriate, you can use composite
716types, which build new types from other types or from specified data.
717The specified types or data are called the @dfn{arguments} of the
718composite type. The composite type normally looks like this:
719
720@example
721(@var{constructor} @var{arguments}@dots{})
722@end example
723
724@noindent
725but you can also add keyword-value pairs before the arguments, like
726this:
727
728@example
729(@var{constructor} @r{@{}@var{keyword} @var{value}@r{@}}@dots{} @var{arguments}@dots{})
730@end example
731
732 Here is a table of constructors and how to use them to write
733composite types:
734
735@table @code
736@item (cons @var{car-type} @var{cdr-type})
737The value must be a cons cell, its @sc{car} must fit @var{car-type}, and
738its @sc{cdr} must fit @var{cdr-type}. For example, @code{(cons string
739symbol)} is a customization type which matches values such as
740@code{("foo" . foo)}.
741
742In the customization buffer, the @sc{car} and the @sc{cdr} are
743displayed and edited separately, each according to the type
744that you specify for it.
745
746@item (list @var{element-types}@dots{})
747The value must be a list with exactly as many elements as the
748@var{element-types} given; and each element must fit the
749corresponding @var{element-type}.
750
751For example, @code{(list integer string function)} describes a list of
752three elements; the first element must be an integer, the second a
753string, and the third a function.
754
755In the customization buffer, each element is displayed and edited
756separately, according to the type specified for it.
757
61a2fe01
RS
758@item (group @var{element-types}@dots{})
759This works like @code{list} except for the formatting
760of text in the Custom buffer. @code{list} labels each
761element value with its tag; @code{group} does not.
762
b8d4c8d0
GM
763@item (vector @var{element-types}@dots{})
764Like @code{list} except that the value must be a vector instead of a
765list. The elements work the same as in @code{list}.
766
767@item (choice @var{alternative-types}@dots{})
768The value must fit at least one of @var{alternative-types}.
769For example, @code{(choice integer string)} allows either an
770integer or a string.
771
772In the customization buffer, the user selects an alternative
773using a menu, and can then edit the value in the usual way for that
774alternative.
775
776Normally the strings in this menu are determined automatically from the
777choices; however, you can specify different strings for the menu by
778including the @code{:tag} keyword in the alternatives. For example, if
779an integer stands for a number of spaces, while a string is text to use
780verbatim, you might write the customization type this way,
781
782@example
783(choice (integer :tag "Number of spaces")
784 (string :tag "Literal text"))
785@end example
786
787@noindent
788so that the menu offers @samp{Number of spaces} and @samp{Literal text}.
789
790In any alternative for which @code{nil} is not a valid value, other than
791a @code{const}, you should specify a valid default for that alternative
792using the @code{:value} keyword. @xref{Type Keywords}.
793
794If some values are covered by more than one of the alternatives,
795customize will choose the first alternative that the value fits. This
796means you should always list the most specific types first, and the
797most general last. Here's an example of proper usage:
798
799@example
800(choice (const :tag "Off" nil)
801 symbol (sexp :tag "Other"))
802@end example
803
804@noindent
805This way, the special value @code{nil} is not treated like other
806symbols, and symbols are not treated like other Lisp expressions.
807
808@item (radio @var{element-types}@dots{})
809This is similar to @code{choice}, except that the choices are displayed
810using `radio buttons' rather than a menu. This has the advantage of
811displaying documentation for the choices when applicable and so is often
812a good choice for a choice between constant functions
813(@code{function-item} customization types).
814
815@item (const @var{value})
816The value must be @var{value}---nothing else is allowed.
817
818The main use of @code{const} is inside of @code{choice}. For example,
819@code{(choice integer (const nil))} allows either an integer or
820@code{nil}.
821
822@code{:tag} is often used with @code{const}, inside of @code{choice}.
823For example,
824
825@example
826(choice (const :tag "Yes" t)
827 (const :tag "No" nil)
828 (const :tag "Ask" foo))
829@end example
830
831@noindent
832describes a variable for which @code{t} means yes, @code{nil} means no,
833and @code{foo} means ``ask.''
834
835@item (other @var{value})
836This alternative can match any Lisp value, but if the user chooses this
837alternative, that selects the value @var{value}.
838
839The main use of @code{other} is as the last element of @code{choice}.
840For example,
841
842@example
843(choice (const :tag "Yes" t)
844 (const :tag "No" nil)
845 (other :tag "Ask" foo))
846@end example
847
848@noindent
849describes a variable for which @code{t} means yes, @code{nil} means no,
850and anything else means ``ask.'' If the user chooses @samp{Ask} from
851the menu of alternatives, that specifies the value @code{foo}; but any
852other value (not @code{t}, @code{nil} or @code{foo}) displays as
853@samp{Ask}, just like @code{foo}.
854
855@item (function-item @var{function})
856Like @code{const}, but used for values which are functions. This
857displays the documentation string as well as the function name.
858The documentation string is either the one you specify with
859@code{:doc}, or @var{function}'s own documentation string.
860
861@item (variable-item @var{variable})
862Like @code{const}, but used for values which are variable names. This
863displays the documentation string as well as the variable name. The
864documentation string is either the one you specify with @code{:doc}, or
865@var{variable}'s own documentation string.
866
867@item (set @var{types}@dots{})
868The value must be a list, and each element of the list must match one of
869the @var{types} specified.
870
871This appears in the customization buffer as a checklist, so that each of
872@var{types} may have either one corresponding element or none. It is
873not possible to specify two different elements that match the same one
874of @var{types}. For example, @code{(set integer symbol)} allows one
875integer and/or one symbol in the list; it does not allow multiple
876integers or multiple symbols. As a result, it is rare to use
877nonspecific types such as @code{integer} in a @code{set}.
878
879Most often, the @var{types} in a @code{set} are @code{const} types, as
880shown here:
881
882@example
883(set (const :bold) (const :italic))
884@end example
885
886Sometimes they describe possible elements in an alist:
887
888@example
889(set (cons :tag "Height" (const height) integer)
890 (cons :tag "Width" (const width) integer))
891@end example
892
893@noindent
894That lets the user specify a height value optionally
895and a width value optionally.
896
897@item (repeat @var{element-type})
898The value must be a list and each element of the list must fit the type
899@var{element-type}. This appears in the customization buffer as a
900list of elements, with @samp{[INS]} and @samp{[DEL]} buttons for adding
901more elements or removing elements.
902
903@item (restricted-sexp :match-alternatives @var{criteria})
904This is the most general composite type construct. The value may be
905any Lisp object that satisfies one of @var{criteria}. @var{criteria}
906should be a list, and each element should be one of these
907possibilities:
908
909@itemize @bullet
910@item
911A predicate---that is, a function of one argument that has no side
912effects, and returns either @code{nil} or non-@code{nil} according to
913the argument. Using a predicate in the list says that objects for which
914the predicate returns non-@code{nil} are acceptable.
915
916@item
917A quoted constant---that is, @code{'@var{object}}. This sort of element
918in the list says that @var{object} itself is an acceptable value.
919@end itemize
920
921For example,
922
923@example
924(restricted-sexp :match-alternatives
925 (integerp 't 'nil))
926@end example
927
928@noindent
929allows integers, @code{t} and @code{nil} as legitimate values.
930
931The customization buffer shows all legitimate values using their read
932syntax, and the user edits them textually.
933@end table
934
935 Here is a table of the keywords you can use in keyword-value pairs
936in a composite type:
937
938@table @code
939@item :tag @var{tag}
940Use @var{tag} as the name of this alternative, for user communication
941purposes. This is useful for a type that appears inside of a
942@code{choice}.
943
944@item :match-alternatives @var{criteria}
945@kindex match-alternatives@r{, customization keyword}
946Use @var{criteria} to match possible values. This is used only in
947@code{restricted-sexp}.
948
949@item :args @var{argument-list}
950@kindex args@r{, customization keyword}
951Use the elements of @var{argument-list} as the arguments of the type
952construct. For instance, @code{(const :args (foo))} is equivalent to
953@code{(const foo)}. You rarely need to write @code{:args} explicitly,
954because normally the arguments are recognized automatically as
955whatever follows the last keyword-value pair.
956@end table
957
958@node Splicing into Lists
959@subsection Splicing into Lists
960
961 The @code{:inline} feature lets you splice a variable number of
962elements into the middle of a list or vector. You use it in a
963@code{set}, @code{choice} or @code{repeat} type which appears among the
964element-types of a @code{list} or @code{vector}.
965
966 Normally, each of the element-types in a @code{list} or @code{vector}
967describes one and only one element of the list or vector. Thus, if an
968element-type is a @code{repeat}, that specifies a list of unspecified
969length which appears as one element.
970
971 But when the element-type uses @code{:inline}, the value it matches is
972merged directly into the containing sequence. For example, if it
973matches a list with three elements, those become three elements of the
974overall sequence. This is analogous to using @samp{,@@} in the backquote
975construct.
976
977 For example, to specify a list whose first element must be @code{baz}
978and whose remaining arguments should be zero or more of @code{foo} and
979@code{bar}, use this customization type:
980
981@example
982(list (const baz) (set :inline t (const foo) (const bar)))
983@end example
984
985@noindent
986This matches values such as @code{(baz)}, @code{(baz foo)}, @code{(baz bar)}
987and @code{(baz foo bar)}.
988
989 When the element-type is a @code{choice}, you use @code{:inline} not
990in the @code{choice} itself, but in (some of) the alternatives of the
991@code{choice}. For example, to match a list which must start with a
992file name, followed either by the symbol @code{t} or two strings, use
993this customization type:
994
995@example
996(list file
997 (choice (const t)
998 (list :inline t string string)))
999@end example
1000
1001@noindent
1002If the user chooses the first alternative in the choice, then the
1003overall list has two elements and the second element is @code{t}. If
1004the user chooses the second alternative, then the overall list has three
1005elements and the second and third must be strings.
1006
1007@node Type Keywords
1008@subsection Type Keywords
1009
1010You can specify keyword-argument pairs in a customization type after the
1011type name symbol. Here are the keywords you can use, and their
1012meanings:
1013
1014@table @code
1015@item :value @var{default}
1016This is used for a type that appears as an alternative inside of
1017@code{choice}; it specifies the default value to use, at first, if and
1018when the user selects this alternative with the menu in the
1019customization buffer.
1020
1021Of course, if the actual value of the option fits this alternative, it
1022will appear showing the actual value, not @var{default}.
1023
1024If @code{nil} is not a valid value for the alternative, then it is
1025essential to specify a valid default with @code{:value}.
1026
1027@item :format @var{format-string}
1028@kindex format@r{, customization keyword}
1029This string will be inserted in the buffer to represent the value
1030corresponding to the type. The following @samp{%} escapes are available
1031for use in @var{format-string}:
1032
1033@table @samp
1034@item %[@var{button}%]
1035Display the text @var{button} marked as a button. The @code{:action}
1036attribute specifies what the button will do if the user invokes it;
1037its value is a function which takes two arguments---the widget which
1038the button appears in, and the event.
1039
1040There is no way to specify two different buttons with different
1041actions.
1042
1043@item %@{@var{sample}%@}
1044Show @var{sample} in a special face specified by @code{:sample-face}.
1045
1046@item %v
1047Substitute the item's value. How the value is represented depends on
1048the kind of item, and (for variables) on the customization type.
1049
1050@item %d
1051Substitute the item's documentation string.
1052
1053@item %h
1054Like @samp{%d}, but if the documentation string is more than one line,
1055add an active field to control whether to show all of it or just the
1056first line.
1057
1058@item %t
1059Substitute the tag here. You specify the tag with the @code{:tag}
1060keyword.
1061
1062@item %%
1063Display a literal @samp{%}.
1064@end table
1065
1066@item :action @var{action}
1067@kindex action@r{, customization keyword}
1068Perform @var{action} if the user clicks on a button.
1069
1070@item :button-face @var{face}
1071@kindex button-face@r{, customization keyword}
1072Use the face @var{face} (a face name or a list of face names) for button
1073text displayed with @samp{%[@dots{}%]}.
1074
1075@item :button-prefix @var{prefix}
1076@itemx :button-suffix @var{suffix}
1077@kindex button-prefix@r{, customization keyword}
1078@kindex button-suffix@r{, customization keyword}
1079These specify the text to display before and after a button.
1080Each can be:
1081
1082@table @asis
1083@item @code{nil}
1084No text is inserted.
1085
1086@item a string
1087The string is inserted literally.
1088
1089@item a symbol
1090The symbol's value is used.
1091@end table
1092
1093@item :tag @var{tag}
1094Use @var{tag} (a string) as the tag for the value (or part of the value)
1095that corresponds to this type.
1096
1097@item :doc @var{doc}
1098@kindex doc@r{, customization keyword}
1099Use @var{doc} as the documentation string for this value (or part of the
1100value) that corresponds to this type. In order for this to work, you
1101must specify a value for @code{:format}, and use @samp{%d} or @samp{%h}
1102in that value.
1103
1104The usual reason to specify a documentation string for a type is to
1105provide more information about the meanings of alternatives inside a
1106@code{:choice} type or the parts of some other composite type.
1107
1108@item :help-echo @var{motion-doc}
1109@kindex help-echo@r{, customization keyword}
1110When you move to this item with @code{widget-forward} or
1111@code{widget-backward}, it will display the string @var{motion-doc} in
1112the echo area. In addition, @var{motion-doc} is used as the mouse
1113@code{help-echo} string and may actually be a function or form evaluated
1114to yield a help string. If it is a function, it is called with one
1115argument, the widget.
1116
1117@item :match @var{function}
1118@kindex match@r{, customization keyword}
1119Specify how to decide whether a value matches the type. The
1120corresponding value, @var{function}, should be a function that accepts
1121two arguments, a widget and a value; it should return non-@code{nil} if
1122the value is acceptable.
1123
72b7e664
RS
1124@item :validate @var{function}
1125Specify a validation function for input. @var{function} takes a
1126widget as an argument, and should return @code{nil} if the widget's
1127current value is valid for the widget. Otherwise, it should return
1128the widget containing the invalid data, and set that widget's
1129@code{:error} property to a string explaining the error.
1130
b8d4c8d0
GM
1131@ignore
1132@item :indent @var{columns}
1133Indent this item by @var{columns} columns. The indentation is used for
1134@samp{%n}, and automatically for group names, for checklists and radio
1135buttons, and for editable lists. It affects the whole of the
1136item except for the first line.
1137
72b7e664
RS
1138@item :offset @var{extra}
1139Indent the subitems of this item @var{extra} columns more than this
1140item itself. By default, subitems are indented the same as their
1141parent.
b8d4c8d0 1142
72b7e664
RS
1143@item :extra-offset @var{n}
1144Add @var{n} extra spaces to this item's indentation, compared to its
1145parent's indentation.
b8d4c8d0 1146
72b7e664
RS
1147@item :notify @var{function}
1148Call @var{function} each time the item or a subitem is changed. The
1149function gets two or three arguments. The first argument is the item
1150itself, the second argument is the item that was changed, and the
1151third argument is the event leading to the change, if any.
b8d4c8d0 1152
72b7e664
RS
1153@item :menu-tag @var{tag-string}
1154Use @var{tag-string} in the menu when the widget is used as an option
1155in a @code{menu-choice} widget.
b8d4c8d0
GM
1156
1157@item :menu-tag-get
1158A function used for finding the tag when the widget is used as an option
1159in a @code{menu-choice} widget. By default, the tag used will be either the
1160@code{:menu-tag} or @code{:tag} property if present, or the @code{princ}
1161representation of the @code{:value} property if not.
1162
b8d4c8d0
GM
1163@item :tab-order
1164Specify the order in which widgets are traversed with
1165@code{widget-forward} or @code{widget-backward}. This is only partially
1166implemented.
1167
1168@enumerate a
1169@item
1170Widgets with tabbing order @code{-1} are ignored.
1171
1172@item
1173(Unimplemented) When on a widget with tabbing order @var{n}, go to the
1174next widget in the buffer with tabbing order @var{n+1} or @code{nil},
1175whichever comes first.
1176
1177@item
1178When on a widget with no tabbing order specified, go to the next widget
1179in the buffer with a positive tabbing order, or @code{nil}
1180@end enumerate
1181
1182@item :parent
1183The parent of a nested widget (e.g., a @code{menu-choice} item or an
1184element of a @code{editable-list} widget).
1185
1186@item :sibling-args
1187This keyword is only used for members of a @code{radio-button-choice} or
1188@code{checklist}. The value should be a list of extra keyword
1189arguments, which will be used when creating the @code{radio-button} or
1190@code{checkbox} associated with this item.
1191@end ignore
1192@end table
1193
1194@node Defining New Types
1195@subsection Defining New Types
1196
1197In the previous sections we have described how to construct elaborate
1198type specifications for @code{defcustom}. In some cases you may want
1199to give such a type specification a name. The obvious case is when
1200you are using the same type for many user options: rather than repeat
1201the specification for each option, you can give the type specification
1202a name, and use that name each @code{defcustom}. The other case is
1203when a user option's value is a recursive data structure. To make it
1204possible for a datatype to refer to itself, it needs to have a name.
1205
1206Since custom types are implemented as widgets, the way to define a new
1207customize type is to define a new widget. We are not going to describe
1208the widget interface here in details, see @ref{Top, , Introduction,
1209widget, The Emacs Widget Library}, for that. Instead we are going to
1210demonstrate the minimal functionality needed for defining new customize
1211types by a simple example.
1212
1213@example
1214(define-widget 'binary-tree-of-string 'lazy
1215 "A binary tree made of cons-cells and strings."
1216 :offset 4
1217 :tag "Node"
1218 :type '(choice (string :tag "Leaf" :value "")
1219 (cons :tag "Interior"
1220 :value ("" . "")
1221 binary-tree-of-string
1222 binary-tree-of-string)))
1223
1224(defcustom foo-bar ""
1225 "Sample variable holding a binary tree of strings."
1226 :type 'binary-tree-of-string)
1227@end example
1228
1229The function to define a new widget is called @code{define-widget}. The
1230first argument is the symbol we want to make a new widget type. The
1231second argument is a symbol representing an existing widget, the new
1232widget is going to be defined in terms of difference from the existing
1233widget. For the purpose of defining new customization types, the
1234@code{lazy} widget is perfect, because it accepts a @code{:type} keyword
1235argument with the same syntax as the keyword argument to
1236@code{defcustom} with the same name. The third argument is a
1237documentation string for the new widget. You will be able to see that
1238string with the @kbd{M-x widget-browse @key{RET} binary-tree-of-string
1239@key{RET}} command.
1240
1241After these mandatory arguments follow the keyword arguments. The most
1242important is @code{:type}, which describes the data type we want to match
1243with this widget. Here a @code{binary-tree-of-string} is described as
1244being either a string, or a cons-cell whose car and cdr are themselves
1245both @code{binary-tree-of-string}. Note the reference to the widget
1246type we are currently in the process of defining. The @code{:tag}
1247attribute is a string to name the widget in the user interface, and the
1248@code{:offset} argument is there to ensure that child nodes are
1249indented four spaces relative to the parent node, making the tree
1250structure apparent in the customization buffer.
1251
1252The @code{defcustom} shows how the new widget can be used as an ordinary
1253customization type.
1254
1255The reason for the name @code{lazy} is that the other composite
1256widgets convert their inferior widgets to internal form when the
1257widget is instantiated in a buffer. This conversion is recursive, so
1258the inferior widgets will convert @emph{their} inferior widgets. If
1259the data structure is itself recursive, this conversion is an infinite
1260recursion. The @code{lazy} widget prevents the recursion: it convert
1261its @code{:type} argument only when needed.
1262
1263@ignore
1264 arch-tag: d1b8fad3-f48c-4ce4-a402-f73b5ef19bd2
1265@end ignore