annotate lispref/customize.texi @ 69215:ef5cd9601f14

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