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