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