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