(speedbar-frame-parameters) Add : to custom prompt.
[emacs.git] / lispref / customize.texi
blob4810280b2df0317bc0d37dcb95e67593bc81c86b
1 @c -*-texinfo-*-
2 @c This is part of the GNU Emacs Lisp Reference Manual.
3 @c Copyright (C) 1997, 1998 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
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}).
14 @menu
15 * Common Keywords::
16 * Group Definitions::            
17 * Variable Definitions::         
18 * Customization Types::
19 @end menu
21 @node Common Keywords
22 @section Common Keywords for All Kinds of Items
24   All kinds of customization declarations (for variables and groups, and
25 for faces) accept keyword arguments for specifying various information.
26 This section describes some keywords that apply to all kinds.
28   All of these keywords, except @code{:tag}, can be used more than once
29 in a given item.  Each use of the keyword has an independent effect.
30 The keyword @code{:tag} is an exception because any given item can only
31 display one name.
33 @table @code
34 @item :tag @var{name}
35 Use @var{name}, a string, instead of the item's name, to label the item
36 in customization menus and buffers.
38 @item :group @var{group}
39 Put this customization item in group @var{group}.  When you use
40 @code{:group} in a @code{defgroup}, it makes the new group a subgroup of
41 @var{group}.
43 If you use this keyword more than once, you can put a single item into
44 more than one group.  Displaying any of those groups will show this
45 item.  Be careful not to overdo this!
47 @item :link @var{link-data}
48 Include an external link after the documentation string for this item.
49 This is a sentence containing an active field which references some
50 other documentation.
52 There are three alternatives you can use for @var{link-data}:
54 @table @code
55 @item (custom-manual @var{info-node})
56 Link to an Info node; @var{info-node} is a string which specifies the
57 node name, as in @code{"(emacs)Top"}.  The link appears as
58 @samp{[manual]} in the customization buffer.
60 @item (info-link @var{info-node})
61 Like @code{custom-manual} except that the link appears
62 in the customization buffer with the Info node name.
64 @item (url-link @var{url})
65 Link to a web page; @var{url} is a string which specifies the @sc{url}.
66 The link appears in the customization buffer as @var{url}.
67 @end table
69 You can specify the text to use in the customization buffer by adding
70 @code{:tag @var{name}} after the first element of the @var{link-data};
71 for example, @code{(info-link :tag "foo" "(emacs)Top")} makes a link to
72 the Emacs manual which appears in the buffer as @samp{foo}.
74 An item can have more than one external link; however, most items have
75 none at all.
77 @item :load @var{file}
78 Load file @var{file} (a string) before displaying this customization
79 item.  Loading is done with @code{load-library}, and only if the file is
80 not already loaded.
82 @item :require @var{feature}
83 Require feature @var{feature} (a symbol) when installing a value for
84 this item (an option or a face) that was saved using the customization
85 feature.  This is done by calling @code{require}.
87 The most common reason to use @code{:require} is when a variable enables
88 a feature such as a minor mode, and just setting the variable won't have
89 any effect unless the code which implements the mode is loaded.
90 @end table
92 @node Group Definitions
93 @section Defining Custom Groups
95   Each Emacs Lisp package should have one main customization group which
96 contains all the options, faces and other groups in the package.  If the
97 package has a small number of options and faces, use just one group and
98 put everything in it.  When there are more than twelve or so options and
99 faces, then you should structure them into subgroups, and put the
100 subgroups under the package's main customization group.  It is OK to
101 put some of the options and faces in the package's main group alongside
102 the subgroups.
104   The package's main or only group should be a member of one or more of
105 the standard customization groups.  (To display the full list of them,
106 use @kbd{M-x customize}.)  Choose one or more of them (but not too
107 many), and add your group to each of them using the @code{:group}
108 keyword.
110   The way to declare new customization groups is with @code{defgroup}.
112 @defmac defgroup group members doc [keyword value]...
113 @tindex defgroup
114 Declare @var{group} as a customization group containing @var{members}.
115 Do not quote the symbol @var{group}.  The argument @var{doc} specifies
116 the documentation string for the group.
118 The argument @var{members} is a list specifying an initial set of
119 customization items to be members of the group.  However, most often
120 @var{members} is @code{nil}, and you specify the group's members by
121 using the @code{:group} keyword when defining those members.
123 If you want to specify group members through @var{members}, each element
124 should have the form @code{(@var{name} @var{widget})}.  Here @var{name}
125 is a symbol, and @var{widget} is a widget type for editing that symbol.
126 Useful widgets are @code{custom-variable} for a variable,
127 @code{custom-face} for a face, and @code{custom-group} for a group.
129 In addition to the common keywords (@pxref{Common Keywords}), you can
130 use this keyword in @code{defgroup}:
132 @table @code
133 @item :prefix @var{prefix}
134 If the name of an item in the group starts with @var{prefix}, then the
135 tag for that item is constructed (by default) by omitting @var{prefix}.
137 One group can have any number of prefixes.
138 @end table
139 @end defmac
141   The prefix-discarding feature is currently turned off, which means
142 that @code{:prefix} currently has no effect.  We did this because we
143 found that discarding the specified prefixes often led to confusing
144 names for options.  This happened because the people who wrote the
145 @code{defgroup} definitions for various groups added @code{:prefix}
146 keywords whenever they make logical sense---that is, whenever the
147 variables in the library have a common prefix.
149   In order to obtain good results with @code{:prefix}, it would be
150 necessary to check the specific effects of discarding a particular
151 prefix, given the specific items in a group and their names and
152 documentation.  If the resulting text is not clear, then @code{:prefix}
153 should not be used in that case.
155   It should be possible to recheck all the customization groups, delete
156 the @code{:prefix} specifications which give unclear results, and then
157 turn this feature back on, if someone would like to do the work.
159 @node Variable Definitions
160 @section Defining Customization Variables
162   Use @code{defcustom} to declare user-editable variables.
164 @defmac defcustom option default doc [keyword value]...
165 @tindex defcustom
166 Declare @var{option} as a customizable user option variable.  Do not
167 quote @var{option}.  The argument @var{doc} specifies the documentation
168 string for the variable.
170 If @var{option} is void, @code{defcustom} initializes it to
171 @var{default}.  @var{default} should be an expression to compute the
172 value; be careful in writing it, because it can be evaluated on more
173 than one occasion.
174 @end defmac
176   @code{defcustom} accepts the following additional keywords:
178 @table @code
179 @item :type @var{type}
180 Use @var{type} as the data type for this option.  It specifies which
181 values are legitimate, and how to display the value.
182 @xref{Customization Types}, for more information.
184 @item :options @var{list}
185 Specify @var{list} as the list of reasonable values for use in this
186 option.
188 Currently this is meaningful only when the type is @code{hook}.  In that
189 case, the elements of @var{list} should be functions that are useful as
190 elements of the hook value.  The user is not restricted to using only
191 these functions, but they are offered as convenient alternatives.
193 @item :version @var{version}
194 This option specifies that the variable was first introduced, or its
195 default value was changed, in Emacs version @var{version}.  The value
196 @var{version} must be a string.  For example,
198 @example
199 (defcustom foo-max 34
200   "*Maximum number of foo's allowed."
201   :type 'integer
202   :group 'foo
203   :version "20.3")
204 @end example
206 @item :set @var{setfunction}
207 Specify @var{setfunction} as the way to change the value of this option.
208 The function @var{setfunction} should take two arguments, a symbol and
209 the new value, and should do whatever is necessary to update the value
210 properly for this option (which may not mean simply setting the option
211 as a Lisp variable).  The default for @var{setfunction} is
212 @code{set-default}.
214 @item :get @var{getfunction}
215 Specify @var{getfunction} as the way to extract the value of this
216 option.  The function @var{getfunction} should take one argument, a
217 symbol, and should return the ``current value'' for that symbol (which
218 need not be the symbol's Lisp value).  The default is
219 @code{default-value}.
221 @item :initialize @var{function}
222 @var{function} should be a function used to initialize the variable when
223 the @code{defcustom} is evaluated.  It should take two arguments, the
224 symbol and value.  Here are some predefined functions meant for use in
225 this way:
227 @table @code
228 @item custom-initialize-set
229 Use the variable's @code{:set} function to initialize the variable, but
230 do not reinitialize it if it is already non-void.  This is the default
231 @code{:initialize} function.
233 @item custom-initialize-default
234 Like @code{custom-initialize-set}, but use the function
235 @code{set-default} to set the variable, instead of the variable's
236 @code{:set} function.  This is the usual choice for a variable whose
237 @code{:set} function enables or disables a minor mode; with this choice,
238 defining the variable will not call the minor mode function, but
239 customizing the variable will do so.
241 @item custom-initialize-reset
242 Always use the @code{:set} function to initialize the variable.  If the
243 variable is already non-void, reset it by calling the @code{:set}
244 function using the current value (returned by the @code{:get} method).
246 @item custom-initialize-changed
247 Use the @code{:set} function to initialize the variable, if it is
248 already set or has been customized; otherwise, just use
249 @code{set-default}.
250 @end table
251 @end table
253   The @code{:require} option is useful for an option that turns on the
254 operation of a certain feature.  Assuming that the package is coded to
255 check the value of the option, you still need to arrange for the package
256 to be loaded.  You can do that with @code{:require}.  @xref{Common
257 Keywords}.  Here is an example, from the library @file{paren.el}:
259 @example
260 (defcustom show-paren-mode nil
261   "Toggle Show Paren mode@enddots{}"
262   :set (lambda (symbol value)
263          (show-paren-mode (or value 0)))
264   :initialize 'custom-initialize-default
265   :type 'boolean
266   :group 'paren-showing
267   :require 'paren)
268 @end example
270 @ignore
271 Use @code{custom-add-option} to specify that a specific function is
272 useful as an member of a hook.
274 @defun custom-add-option symbol option
275 To the variable @var{symbol} add @var{option}.
277 If @var{symbol} is a hook variable, @var{option} should be a hook
278 member.  For other types variables, the effect is undefined."
279 @end defun
280 @end ignore
282 Internally, @code{defcustom} uses the symbol property
283 @code{standard-value} to record the expression for the default value,
284 and @code{saved-value} to record the value saved by the user with the
285 customization buffer.  The @code{saved-value} property is actually a
286 list whose car is an expression which evaluates to the value.
288 @node Customization Types
289 @section Customization Types
291   When you define a user option with @code{defcustom}, you must specify
292 its @dfn{customization type}.  That is a Lisp object which describes (1)
293 which values are legitimate and (2) how to display the value in the
294 customization buffer for editing.
296   You specify the customization type in @code{defcustom} with the
297 @code{:type} keyword.  The argument of @code{:type} is evaluated; since
298 types that vary at run time are rarely useful, normally you use a quoted
299 constant.  For example:
301 @example
302 (defcustom diff-command "diff"
303   "*The command to use to run diff."
304   :type '(string)
305   :group 'diff)
306 @end example
308   In general, a customization type is a list whose first element is a
309 symbol, one of the customization type names defined in the following
310 sections.  After this symbol come a number of arguments, depending on
311 the symbol.  Between the type symbol and its arguments, you can
312 optionally write keyword-value pairs (@pxref{Type Keywords}).
314   Some of the type symbols do not use any arguments; those are called
315 @dfn{simple types}.  For a simple type, if you do not use any
316 keyword-value pairs, you can omit the parentheses around the type
317 symbol.  For example just @code{string} as a customization type is
318 equivalent to @code{(string)}.
320 @menu
321 * Simple Types::
322 * Composite Types::
323 * Splicing into Lists::
324 * Type Keywords::
325 @end menu
327 @node Simple Types
328 @subsection Simple Types
330   This section describes all the simple customization types.
332 @table @code
333 @item sexp
334 The value may be any Lisp object that can be printed and read back.  You
335 can use @code{sexp} as a fall-back for any option, if you don't want to
336 take the time to work out a more specific type to use.
338 @item integer
339 The value must be an integer, and is represented textually
340 in the customization buffer.
342 @item number
343 The value must be a number, and is represented textually in the
344 customization buffer.
346 @item string
347 The value must be a string, and the customization buffer shows just the
348 contents, with no delimiting @samp{"} characters and no quoting with
349 @samp{\}.
351 @item regexp
352 Like @code{string} except that the string must be a valid regular
353 expression.
355 @item character
356 The value must be a character code.  A character code is actually an
357 integer, but this type shows the value by inserting the character in the
358 buffer, rather than by showing the number.
360 @item file
361 The value must be a file name, and you can do completion with
362 @kbd{M-@key{TAB}}.
364 @item (file :must-match t)
365 The value must be a file name for an existing file, and you can do
366 completion with @kbd{M-@key{TAB}}.
368 @item directory
369 The value must be a directory name, and you can do completion with
370 @kbd{M-@key{TAB}}.
372 @item hook
373 The value must be a list of functions (or a single function, but that is
374 obsolete usage).  This customization type is used for hook variables.
375 You can use the @code{:options} keyword in a hook variable's
376 @code{defcustom} to specify a list of functions recommended for use in
377 the hook; see @ref{Variable Definitions}.
379 @item symbol
380 The value must be a symbol.  It appears in the customization buffer as
381 the name of the symbol.
383 @item function
384 The value must be either a lambda expression or a function name.  When
385 it is a function name, you can do completion with @kbd{M-@key{TAB}}.
387 @item variable
388 The value must be a variable name, and you can do completion with
389 @kbd{M-@key{TAB}}.
391 @item face
392 The value must be a symbol which is a face name, and you can do
393 completion with @kbd{M-@key{TAB}}.
395 @item boolean
396 The value is boolean---either @code{nil} or @code{t}.  Note that by
397 using @code{choice} and @code{const} together (see the next section),
398 you can specify that the value must be @code{nil} or @code{t}, but also
399 specify the text to describe each value in a way that fits the specific
400 meaning of the alternative.
401 @end table
403 @node Composite Types
404 @subsection Composite Types
406   When none of the simple types is appropriate, you can use composite
407 types, which build new types from other types.  Here are several ways of
408 doing that:
410 @table @code
411 @item (restricted-sexp :match-alternatives @var{criteria})
412 The value may be any Lisp object that satisfies one of @var{criteria}.
413 @var{criteria} should be a list, and each element should be
414 one of these possibilities:
416 @itemize @bullet
417 @item
418 A predicate---that is, a function of one argument that has no side
419 effects, and returns either @code{nil} or non-@code{nil} according to
420 the argument.  Using a predicate in the list says that objects for which
421 the predicate returns non-@code{nil} are acceptable.
423 @item
424 A quoted constant---that is, @code{'@var{object}}.  This sort of element
425 in the list says that @var{object} itself is an acceptable value.
426 @end itemize
428 For example,
430 @example
431 (restricted-sexp :match-alternatives
432                  (integerp 't 'nil))
433 @end example
435 @noindent
436 allows integers, @code{t} and @code{nil} as legitimate values.
438 The customization buffer shows all legitimate values using their read
439 syntax, and the user edits them textually.
441 @item (cons @var{car-type} @var{cdr-type})
442 The value must be a cons cell, its @sc{car} must fit @var{car-type}, and
443 its @sc{cdr} must fit @var{cdr-type}.  For example, @code{(cons string
444 symbol)} is a customization type which matches values such as
445 @code{("foo" . foo)}.
447 In the customization buffer, the @sc{car} and the @sc{cdr} are
448 displayed and edited separately, each according to the type
449 that you specify for it.
451 @item (list @var{element-types}@dots{})
452 The value must be a list with exactly as many elements as the
453 @var{element-types} you have specified; and each element must fit the
454 corresponding @var{element-type}.
456 For example, @code{(list integer string function)} describes a list of
457 three elements; the first element must be an integer, the second a
458 string, and the third a function.
460 In the customization buffer, each element is displayed and edited
461 separately, according to the type specified for it.
463 @item (vector @var{element-types}@dots{})
464 Like @code{list} except that the value must be a vector instead of a
465 list.  The elements work the same as in @code{list}.
467 @item (choice @var{alternative-types}...)
468 The value must fit at least one of @var{alternative-types}.
469 For example, @code{(choice integer string)} allows either an
470 integer or a string.
472 In the customization buffer, the user selects one of the alternatives
473 using a menu, and can then edit the value in the usual way for that
474 alternative.
476 Normally the strings in this menu are determined automatically from the
477 choices; however, you can specify different strings for the menu by
478 including the @code{:tag} keyword in the alternatives.  For example, if
479 an integer stands for a number of spaces, while a string is text to use
480 verbatim, you might write the customization type this way,
482 @example
483 (choice (integer :tag "Number of spaces")
484         (string :tag "Literal text"))
485 @end example
487 @noindent
488 so that the menu offers @samp{Number of spaces} and @samp{Literal Text}.
490 In any alternative for which @code{nil} is not a valid value, other than
491 a @code{const}, you should specify a valid default for that alternative
492 using the @code{:value} keyword.  @xref{Type Keywords}.
494 @item (const @var{value})
495 The value must be @var{value}---nothing else is allowed.
497 The main use of @code{const} is inside of @code{choice}.  For example,
498 @code{(choice integer (const nil))} allows either an integer or
499 @code{nil}.
501 @code{:tag} is often used with @code{const}, inside of @code{choice}.
502 For example,
504 @example
505 (choice (const :tag "Yes" t)
506         (const :tag "No" nil)
507         (const :tag "Ask" foo))
508 @end example
510 @noindent
511 describes a variable for which @code{t} means yes, @code{nil} means no,
512 and @code{foo} means ``ask.''
514 @item (other @var{value})
515 This alternative can match any Lisp value, but if the user chooses this
516 alternative, that selects the value @var{value}.
518 The main use of @code{other} is as the last element of @code{choice}.
519 For example,
521 @example
522 (choice (const :tag "Yes" t)
523         (const :tag "No" nil)
524         (other :tag "Ask" foo))
525 @end example
527 @noindent
528 describes a variable for which @code{t} means yes, @code{nil} means no,
529 and anything else means ``ask.''  If the user chooses @samp{Ask} from
530 the menu of alternatives, that specifies the value @code{foo}; but any
531 other value (not @code{t}, @code{nil} or @code{foo}) displays as
532 @samp{Ask}, just like @code{foo}.
534 @item (function-item @var{function})
535 Like @code{const}, but used for values which are functions.  This
536 displays the documentation string as well as the function name.
537 The documentation string is either the one you specify with
538 @code{:doc}, or @var{function}'s own documentation string.
540 @item (variable-item @var{variable})
541 Like @code{const}, but used for values which are variable names.  This
542 displays the documentation string as well as the variable name.  The
543 documentation string is either the one you specify with @code{:doc}, or
544 @var{variable}'s own documentation string.
546 @item (set @var{types}@dots{})
547 The value must be a list, and each element of the list must match one of
548 the @var{types} specified.
550 This appears in the customization buffer as a checklist, so that each of
551 @var{types} may have either one corresponding element or none.  It is
552 not possible to specify two different elements that match the same one
553 of @var{types}.  For example, @code{(set integer symbol)} allows one
554 integer and/or one symbol in the list; it does not allow multiple
555 integers or multiple symbols.  As a result, it is rare to use
556 nonspecific types such as @code{integer} in a @code{set}.
558 Most often, the @var{types} in a @code{set} are @code{const} types, as
559 shown here:
561 @example
562 (set (const :bold) (const :italic))
563 @end example
565 Sometimes they describe possible elements in an alist:
567 @example
568 (set (cons :tag "Height" (const height) integer)
569      (cons :tag "Width" (const width) integer))
570 @end example
572 @noindent
573 That lets the user specify a height value optionally
574 and a width value optionally.
576 @item (repeat @var{element-type})
577 The value must be a list and each element of the list must fit the type
578 @var{element-type}.  This appears in the customization buffer as a
579 list of elements, with @samp{[INS]} and @samp{[DEL]} buttons for adding
580 more elements or removing elements.
581 @end table
583 @node Splicing into Lists
584 @subsection Splicing into Lists
586   The @code{:inline} feature lets you splice a variable number of
587 elements into the middle of a list or vector.  You use it in a
588 @code{set}, @code{choice} or @code{repeat} type which appears among the
589 element-types of a @code{list} or @code{vector}.
591   Normally, each of the element-types in a @code{list} or @code{vector}
592 describes one and only one element of the list or vector.  Thus, if an
593 element-type is a @code{repeat}, that specifies a list of unspecified
594 length which appears as one element.
596   But when the element-type uses @code{:inline}, the value it matches is
597 merged directly into the containing sequence.  For example, if it
598 matches a list with three elements, those become three elements of the
599 overall sequence.  This is analogous to using @samp{,@@} in the backquote
600 construct.
602   For example, to specify a list whose first element must be @code{t}
603 and whose remaining arguments should be zero or more of @code{foo} and
604 @code{bar}, use this customization type:
606 @example
607 (list (const t) (set :inline t foo bar))
608 @end example
610 @noindent
611 This matches values such as @code{(t)}, @code{(t foo)}, @code{(t bar)}
612 and @code{(t foo bar)}.
614   When the element-type is a @code{choice}, you use @code{:inline} not
615 in the @code{choice} itself, but in (some of) the alternatives of the
616 @code{choice}.  For example, to match a list which must start with a
617 file name, followed either by the symbol @code{t} or two strings, use
618 this customization type:
620 @example
621 (list file
622       (choice (const t)
623               (list :inline t string string)))
624 @end example
626 @noindent
627 If the user chooses the first alternative in the choice, then the
628 overall list has two elements and the second element is @code{t}.  If
629 the user chooses the second alternative, then the overall list has three
630 elements and the second and third must be strings.
632 @node Type Keywords
633 @subsection Type Keywords
635 You can specify keyword-argument pairs in a customization type after the
636 type name symbol.  Here are the keywords you can use, and their
637 meanings:
639 @table @code
640 @item :value @var{default}
641 This is used for a type that appears as an alternative inside of
642 @code{choice}; it specifies the default value to use, at first, if and
643 when the user selects this alternative with the menu in the
644 customization buffer.
646 Of course, if the actual value of the option fits this alternative, it
647 will appear showing the actual value, not @var{default}.
649 If @code{nil} is not a valid value for the alternative, then it is
650 essential to specify a valid default with @code{:value}.
652 @item :format @var{format-string}
653 This string will be inserted in the buffer to represent the value
654 corresponding to the type.  The following @samp{%} escapes are available
655 for use in @var{format-string}:
657 @table @samp
658 @item %[@var{button}%]
659 Display the text @var{button} marked as a button.  The @code{:action}
660 attribute specifies what the button will do if the user invokes it;
661 its value is a function which takes two arguments---the widget which
662 the button appears in, and the event.
664 There is no way to specify two different buttons with different
665 actions.
667 @item %@{@var{sample}%@}
668 Show @var{sample} in a special face specified by @code{:sample-face}.
670 @item %v
671 Substitute the item's value.  How the value is represented depends on
672 the kind of item, and (for variables) on the customization type.
674 @item %d
675 Substitute the item's documentation string.
677 @item %h
678 Like @samp{%d}, but if the documentation string is more than one line,
679 add an active field to control whether to show all of it or just the
680 first line.
682 @item %t
683 Substitute the tag here.  You specify the tag with the @code{:tag}
684 keyword.
686 @item %%
687 Display a literal @samp{%}. 
688 @end table
690 @item :action @var{action}
691 Perform @var{action} if the user clicks on a button.
693 @item :button-face @var{face}
694 Use the face @var{face} (a face name or a list of face names) for button
695 text displayed with @samp{%[@dots{}%]}.
697 @item :button-prefix @var{prefix}
698 @itemx :button-suffix @var{suffix}
699 These specify the text to display before and after a button.
700 Each can be:
702 @table @asis
703 @item @code{nil}
704 No text is inserted.
706 @item a string
707 The string is inserted literally.
709 @item a symbol
710 The symbol's value is used.
711 @end table
713 @item :tag @var{tag}
714 Use @var{tag} (a string) as the tag for the value (or part of the value)
715 that corresponds to this type.
717 @item :doc @var{doc}
718 Use @var{doc} as the documentation string for this value (or part of the
719 value) that corresponds to this type.  In order for this to work, you
720 must specify a value for @code{:format}, and use @samp{%d} or @samp{%h}
721 in that value.
723 The usual reason to specify a documentation string for a type is to
724 provide more information about the meanings of alternatives inside a
725 @code{:choice} type or the parts of some other composite type.
727 @item :help-echo @var{motion-doc}
728 When you move to this item with @code{widget-forward} or
729 @code{widget-backward}, it will display the string @var{motion-doc}
730 in the echo area.
732 @item :match @var{function}
733 Specify how to decide whether a value matches the type.  The
734 corresponding value, @var{function}, should be a function that accepts
735 two arguments, a widget and a value; it should return non-@code{nil} if
736 the value is acceptable.
738 @ignore
739 @item :indent @var{columns}
740 Indent this item by @var{columns} columns.  The indentation is used for
741 @samp{%n}, and automatically for group names, for checklists and radio
742 buttons, and for editable lists.  It affects the whole of the
743 item except for the first line.
745 @item :offset @var{columns}
746 An integer indicating how many extra spaces to indent the subitems of
747 this item.  By default, subitems are indented the same as their parent.
749 @item :extra-offset
750 An integer indicating how many extra spaces to add to this item's
751 indentation, compared to its parent.
753 @item :notify
754 A function called each time the item or a subitem is changed.  The
755 function is called with two or three arguments.  The first argument is
756 the item itself, the second argument is the item that was changed, and
757 the third argument is the event leading to the change, if any.
759 @item :menu-tag
760 Tag used in the menu when the widget is used as an option in a
761 @code{menu-choice} widget.
763 @item :menu-tag-get
764 Function used for finding the tag when the widget is used as an option
765 in a @code{menu-choice} widget.  By default, the tag used will be either the
766 @code{:menu-tag} or @code{:tag} property if present, or the @code{princ}
767 representation of the @code{:value} property if not.
769 @item :validate
770 A function which takes a widget as an argument, and return nil if the
771 widgets current value is valid for the widget.  Otherwise, it should
772 return the widget containing the invalid data, and set that widgets
773 @code{:error} property to a string explaining the error.
775 You can use the function @code{widget-children-validate} for this job;
776 it tests that all children of @var{widget} are valid.
778 @item :tab-order
779 Specify the order in which widgets are traversed with
780 @code{widget-forward} or @code{widget-backward}.  This is only partially
781 implemented.
783 @enumerate a
784 @item
785 Widgets with tabbing order @code{-1} are ignored.
787 @item 
788 (Unimplemented) When on a widget with tabbing order @var{n}, go to the
789 next widget in the buffer with tabbing order @var{n+1} or @code{nil},
790 whichever comes first.
792 @item
793 When on a widget with no tabbing order specified, go to the next widget
794 in the buffer with a positive tabbing order, or @code{nil}
795 @end enumerate
797 @item :parent
798 The parent of a nested widget (e.g., a @code{menu-choice} item or an
799 element of a @code{editable-list} widget).
801 @item :sibling-args
802 This keyword is only used for members of a @code{radio-button-choice} or
803 @code{checklist}.  The value should be a list of extra keyword
804 arguments, which will be used when creating the @code{radio-button} or
805 @code{checkbox} associated with this item.
806 @end ignore
807 @end table