annotate lispref/customize.texi @ 36150:46e59561af4c

Display Vars node renamed Display Custom. Include info there about customizing cursor appearance. Clean up aggressive scrolling. Clarify horizontal scrolling discussion. Fix index entries for line number mode.
author Richard M. Stallman <rms@gnu.org>
date Sat, 17 Feb 2001 16:45:37 +0000
parents d80f2bfd0e05
children 4d919b7986eb
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.
32521
bfbe1fcac416 custom types emacs-commentary-link, coding-system, color
Dave Love <fx@gnu.org>
parents: 30904
diff changeset
3 @c Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4 @c See the file elisp.texi for copying conditions.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 @setfilename ../info/customize
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 @node Customization, Loading, Macros, Top
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 @chapter Writing Customization Definitions
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
9 This chapter describes how to declare user options for customization,
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
10 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
11 @dfn{customization item} to include both kinds of customization
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
12 definitions---as well as face definitions (@pxref{Defining Faces}).
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 @menu
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 * Common Keywords::
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 * Group Definitions::
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 * Variable Definitions::
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 * Customization Types::
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 @end menu
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 @node Common Keywords
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
22 @section Common Item Keywords
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
24 All kinds of customization declarations (for variables and groups, and
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
25 for faces) accept keyword arguments for specifying various information.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
26 This section describes some keywords that apply to all kinds.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
28 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
29 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
30 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
31 display one name.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 @table @code
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
34 @item :tag @var{label}
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
35 Use @var{label}, a string, instead of the item's name, to label the item
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
36 in customization menus and buffers.
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
37
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 @item :group @var{group}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 Put this customization item in group @var{group}. When you use
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 @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
41 @var{group}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 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
44 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
45 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
46
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 @item :link @var{link-data}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 Include an external link after the documentation string for this item.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 This is a sentence containing an active field which references some
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 other documentation.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 There are three alternatives you can use for @var{link-data}:
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 @table @code
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 @item (custom-manual @var{info-node})
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 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
57 node name, as in @code{"(emacs)Top"}. The link appears as
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 @samp{[manual]} in the customization buffer.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 @item (info-link @var{info-node})
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 Like @code{custom-manual} except that the link appears
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 in the customization buffer with the Info node name.
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 @item (url-link @var{url})
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
65 Link to a web page; @var{url} is a string which specifies the @sc{url}.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
66 The link appears in the customization buffer as @var{url}.
32521
bfbe1fcac416 custom types emacs-commentary-link, coding-system, color
Dave Love <fx@gnu.org>
parents: 30904
diff changeset
67
bfbe1fcac416 custom types emacs-commentary-link, coding-system, color
Dave Love <fx@gnu.org>
parents: 30904
diff changeset
68 @item (emacs-commentary-link @var{library})
bfbe1fcac416 custom types emacs-commentary-link, coding-system, color
Dave Love <fx@gnu.org>
parents: 30904
diff changeset
69 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
70 which specifies the library name.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 @end table
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 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
74 @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
75 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
76 the Emacs manual which appears in the buffer as @samp{foo}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 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
79 none at all.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 @item :load @var{file}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 Load file @var{file} (a string) before displaying this customization
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 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
84 not already loaded.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 @item :require @var{feature}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 Require feature @var{feature} (a symbol) when installing a value for
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 this item (an option or a face) that was saved using the customization
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 feature. This is done by calling @code{require}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 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
92 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
93 any effect unless the code which implements the mode is loaded.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 @end table
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 @node Group Definitions
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 @section Defining Custom Groups
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
99 Each Emacs Lisp package should have one main customization group which
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 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
101 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
102 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
103 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
104 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
105 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
106 the subgroups.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
108 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
109 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
110 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
111 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
112 keyword.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
114 The way to declare new customization groups is with @code{defgroup}.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
116 @defmac defgroup group members doc [keyword value]...
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 Declare @var{group} as a customization group containing @var{members}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 Do not quote the symbol @var{group}. The argument @var{doc} specifies
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
119 the documentation string for the group. It should not start with a
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
120 @samp{*} as in @code{defcustom}; that convention is for variables only.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
122 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
123 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
124 @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
125 using the @code{:group} keyword when defining those members.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
127 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
128 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
129 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
130 Useful widgets are @code{custom-variable} for a variable,
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
131 @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
132
33150
7e53fab4d2a3 defgroup :version
Dave Love <fx@gnu.org>
parents: 32952
diff changeset
133 When a new group is introduced into Emacs, use this keyword in
7e53fab4d2a3 defgroup :version
Dave Love <fx@gnu.org>
parents: 32952
diff changeset
134 @code{defgroup}:
7e53fab4d2a3 defgroup :version
Dave Love <fx@gnu.org>
parents: 32952
diff changeset
135
7e53fab4d2a3 defgroup :version
Dave Love <fx@gnu.org>
parents: 32952
diff changeset
136 @table @code
7e53fab4d2a3 defgroup :version
Dave Love <fx@gnu.org>
parents: 32952
diff changeset
137 @item :version @var{version}
7e53fab4d2a3 defgroup :version
Dave Love <fx@gnu.org>
parents: 32952
diff changeset
138 This option specifies that the group was first introduced in Emacs
7e53fab4d2a3 defgroup :version
Dave Love <fx@gnu.org>
parents: 32952
diff changeset
139 version @var{version}. The value @var{version} must be a string.
7e53fab4d2a3 defgroup :version
Dave Love <fx@gnu.org>
parents: 32952
diff changeset
140 @end table
7e53fab4d2a3 defgroup :version
Dave Love <fx@gnu.org>
parents: 32952
diff changeset
141
7e53fab4d2a3 defgroup :version
Dave Love <fx@gnu.org>
parents: 32952
diff changeset
142 Tag the group with a version like this when it is introduced, rather
7e53fab4d2a3 defgroup :version
Dave Love <fx@gnu.org>
parents: 32952
diff changeset
143 than the individual members (@pxref{Variable Definitions}).
7e53fab4d2a3 defgroup :version
Dave Love <fx@gnu.org>
parents: 32952
diff changeset
144
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 In addition to the common keywords (@pxref{Common Keywords}), you can
33150
7e53fab4d2a3 defgroup :version
Dave Love <fx@gnu.org>
parents: 32952
diff changeset
146 also use this keyword in @code{defgroup}:
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 @table @code
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 @item :prefix @var{prefix}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 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
151 tag for that item is constructed (by default) by omitting @var{prefix}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 One group can have any number of prefixes.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 @end table
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 @end defmac
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
157 The prefix-discarding feature is currently turned off, which means
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
158 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
159 found that discarding the specified prefixes often led to confusing
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
160 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
161 @code{defgroup} definitions for various groups added @code{:prefix}
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
162 keywords whenever they make logical sense---that is, whenever the
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
163 variables in the library have a common prefix.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
165 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
166 necessary to check the specific effects of discarding a particular
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
167 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
168 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
169 should not be used in that case.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
171 It should be possible to recheck all the customization groups, delete
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 the @code{:prefix} specifications which give unclear results, and then
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 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
174
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 @node Variable Definitions
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 @section Defining Customization Variables
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
178 Use @code{defcustom} to declare user-editable variables.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179
35009
d80f2bfd0e05 Add `radio' type. User variable doc strings and backquote in
Dave Love <fx@gnu.org>
parents: 33150
diff changeset
180 @defmac defcustom option default doc [keyword value]@dots{}
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
181 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
182 quote @var{option}. The argument @var{doc} specifies the documentation
35009
d80f2bfd0e05 Add `radio' type. User variable doc strings and backquote in
Dave Love <fx@gnu.org>
parents: 33150
diff changeset
183 string for the variable. It should often start with a @samp{*} to mark
d80f2bfd0e05 Add `radio' type. User variable doc strings and backquote in
Dave Love <fx@gnu.org>
parents: 33150
diff changeset
184 it as a @dfn{user option} (@pxref{Defining Variables}). Do not start
d80f2bfd0e05 Add `radio' type. User variable doc strings and backquote in
Dave Love <fx@gnu.org>
parents: 33150
diff changeset
185 the documentation string with @samp{*} for options which cannot or
d80f2bfd0e05 Add `radio' type. User variable doc strings and backquote in
Dave Love <fx@gnu.org>
parents: 33150
diff changeset
186 normally should not be set with @code{set-variable}; examples of the
d80f2bfd0e05 Add `radio' type. User variable doc strings and backquote in
Dave Love <fx@gnu.org>
parents: 33150
diff changeset
187 former are global minor mode options such as
d80f2bfd0e05 Add `radio' type. User variable doc strings and backquote in
Dave Love <fx@gnu.org>
parents: 33150
diff changeset
188 @code{global-font-lock-mode} and examples of the latter are hooks.
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
189
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
190 If @var{option} is void, @code{defcustom} initializes it to
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
191 @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
192 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
193 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
194 @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
195 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
196
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
197 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
198 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
199 arranges to set the variable unconditionally, without testing whether
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
200 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
201 @xref{Defining Variables}.
22274
f0cd03a7dac9 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
202 @end defmac
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203
22274
f0cd03a7dac9 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 22252
diff changeset
204 @code{defcustom} accepts the following additional keywords:
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 @table @code
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 @item :type @var{type}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 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
209 values are legitimate, and how to display the value.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 @xref{Customization Types}, for more information.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 @item :options @var{list}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 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
214 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
215 are offered as convenient alternatives.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
217 This is meaningful only for certain types, currently including
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
218 @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
219 individual types for a description of how to use @code{:options}.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 @item :version @var{version}
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
222 This option specifies that the variable was first introduced, or its
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
223 default value was changed, in Emacs version @var{version}. The value
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
224 @var{version} must be a string. For example,
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 @example
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 (defcustom foo-max 34
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 "*Maximum number of foo's allowed."
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 :type 'integer
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 :group 'foo
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 :version "20.3")
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 @end example
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 @item :set @var{setfunction}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 Specify @var{setfunction} as the way to change the value of this option.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 The function @var{setfunction} should take two arguments, a symbol and
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 the new value, and should do whatever is necessary to update the value
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 properly for this option (which may not mean simply setting the option
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 as a Lisp variable). The default for @var{setfunction} is
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 @code{set-default}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 @item :get @var{getfunction}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 Specify @var{getfunction} as the way to extract the value of this
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 option. The function @var{getfunction} should take one argument, a
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 symbol, and should return the ``current value'' for that symbol (which
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 need not be the symbol's Lisp value). The default is
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 @code{default-value}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 @item :initialize @var{function}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 @var{function} should be a function used to initialize the variable when
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 the @code{defcustom} is evaluated. It should take two arguments, the
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 symbol and value. Here are some predefined functions meant for use in
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 this way:
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 @table @code
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 @item custom-initialize-set
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
257 Use the variable's @code{:set} function to initialize the variable, but
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
258 do not reinitialize it if it is already non-void. This is the default
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 @code{:initialize} function.
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 custom-initialize-default
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
262 Like @code{custom-initialize-set}, but use the function
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
263 @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
264 @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
265 @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
266 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
267 customizing the variable will do so.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 @item custom-initialize-reset
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
270 Always use the @code{:set} function to initialize the variable. If the
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
271 variable is already non-void, reset it by calling the @code{:set}
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
272 function using the current value (returned by the @code{:get} method).
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 custom-initialize-changed
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
275 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
276 already set or has been customized; otherwise, just use
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
277 @code{set-default}.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 @end table
26826
8f36e5feb992 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25950
diff changeset
279
8f36e5feb992 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25950
diff changeset
280 @item :set-after @var{variables}
8f36e5feb992 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25950
diff changeset
281 When setting variables according to saved customizations, make sure to
8f36e5feb992 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25950
diff changeset
282 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
283 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
284 @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
285 those other variables already have their intended values.
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
286 @end table
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
288 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
289 operation of a certain feature. Assuming that the package is coded to
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 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
291 to be loaded. You can do that with @code{:require}. @xref{Common
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
292 Keywords}. Here is an example, from the library @file{paren.el}:
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
293
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
294 @example
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
295 (defcustom show-paren-mode nil
25950
7996385fc601 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 25751
diff changeset
296 "Toggle Show Paren mode..."
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
297 :set (lambda (symbol value)
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
298 (show-paren-mode (or value 0)))
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
299 :initialize 'custom-initialize-default
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
300 :type 'boolean
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
301 :group 'paren-showing
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
302 :require 'paren)
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
303 @end example
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
305 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
306 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
307 item, outside the @code{defcustom} declaration, by calling
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
308 @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
309 @code{my-lisp-mode-initialization} intended to be called from
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
310 @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
311 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
312 definition. You can do it thus:
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
313
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
314 @example
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
315 (custom-add-option 'emacs-lisp-mode-hook
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
316 'my-lisp-mode-initialization)
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
317 @end example
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 @defun custom-add-option symbol option
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
320 To the customization @var{symbol}, add @var{option}.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
322 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
323 type of @var{symbol}.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 @end defun
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 Internally, @code{defcustom} uses the symbol property
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 @code{standard-value} to record the expression for the default value,
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 and @code{saved-value} to record the value saved by the user with the
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 customization buffer. The @code{saved-value} property is actually a
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 list whose car is an expression which evaluates to the value.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 @node Customization Types
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 @section Customization Types
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 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
336 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
337 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
338 customization buffer for editing.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 You specify the customization type in @code{defcustom} with the
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 @code{:type} keyword. The argument of @code{:type} is evaluated; since
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
342 types that vary at run time are rarely useful, normally you use a quoted
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 constant. For example:
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 @example
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 (defcustom diff-command "diff"
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 "*The command to use to run diff."
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
348 :type '(string)
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 :group 'diff)
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 @end example
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
352 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
353 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
354 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
355 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
356 optionally write keyword-value pairs (@pxref{Type Keywords}).
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
358 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
359 @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
360 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
361 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
362 equivalent to @code{(string)}.
21006
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 @menu
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 * Simple Types::
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 * Composite Types::
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 * Splicing into Lists::
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 * Type Keywords::
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 @end menu
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 @node Simple Types
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 @subsection Simple Types
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 This section describes all the simple customization types.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 @table @code
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 @item sexp
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 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
379 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
380 take the time to work out a more specific type to use.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 @item integer
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 The value must be an integer, and is represented textually
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 in the customization buffer.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 @item number
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 The value must be a number, and is represented textually in the
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 customization buffer.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 @item string
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 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
392 contents, with no delimiting @samp{"} characters and no quoting with
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
393 @samp{\}.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 @item regexp
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
396 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
397 expression.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 @item character
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 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
401 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
402 buffer, rather than by showing the number.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 @item file
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 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
406 @kbd{M-@key{TAB}}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 @item (file :must-match t)
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 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
410 completion with @kbd{M-@key{TAB}}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 @item directory
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 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
414 @kbd{M-@key{TAB}}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
416 @item hook
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
417 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
418 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
419 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
420 @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
421 the hook; see @ref{Variable Definitions}.
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
422
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
423 @item alist
24952
a6db4671c7a0 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 24951
diff changeset
424 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
425 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
426 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
427 edit both the key and the value of each pair.
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
428
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
429 You can specify the key and value types like this:
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
430
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
431 @smallexample
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
432 (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
433 @end smallexample
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
434
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
435 @noindent
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
436 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
437 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
438 value type is @code{sexp}.
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
439
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
440 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
441 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
442 @code{:options} (see @ref{Variable Definitions}). The specified keys
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
443 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
444 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
445 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
446 specified by the @code{:options} keyword argument.
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
447
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
448 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
449 specifications. Ordinarily, the options are simply atoms, which are the
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
450 specified keys. For example:
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
451
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
452 @smallexample
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
453 :options '("foo" "bar" "baz")
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
454 @end smallexample
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
455
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
456 @noindent
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
457 specifies that there are three ``known'' keys, namely @code{"foo"},
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
458 @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
459
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
460 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
461 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
462 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
463 specification. The first element will specify the key, like before,
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
464 while the second element will specify the value type.
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
465
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
466 @smallexample
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
467 :options '("foo" ("bar" integer) "baz")
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
468 @end smallexample
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
469
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
470 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
471 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
472 the special keys specified with the @code{:options} keyword. However,
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
473 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
474 @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
475 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
476 symbol for the key.
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
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
479 :options '("foo" ((function-item some-function) integer) "baz")
25751
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
24952
a6db4671c7a0 *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 24951
diff changeset
482 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
483 example,
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
484
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
485 @smallexample
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
486 (defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
487 "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
488 @end smallexample
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
489
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
490 @noindent
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
491 instead of
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
492
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
493 @smallexample
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
494 (defcustom cons-alist '(("foo" . 1) ("bar" . 2) ("baz" . 3))
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
495 "Each element is a cons-cell (KEY . VALUE).")
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
496 @end smallexample
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
497
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
498 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
499 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
500 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
501 value.
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
502
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
503 @smallexample
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
504 (defcustom list-alist '(("foo" 1) ("bar" 2) ("baz" 3))
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
505 "Each element is a list of the form (KEY VALUE)."
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
506 :type '(alist :value-type (group integer)))
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
507 @end smallexample
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
508
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
509 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
510 the formatting is better suited for the purpose.
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
511
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
512 Similarily, you can have alists with more values associated with each
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
513 key, using variations of this trick:
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
514
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
515 @smallexample
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
516 (defcustom person-data '(("brian" 50 t)
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
517 ("dorith" 55 nil)
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
518 ("ken" 52 t))
28398
844fb933c1aa *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27189
diff changeset
519 "Alist of basic info about people.
844fb933c1aa *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27189
diff changeset
520 Each element has the form (NAME AGE MALE-FLAG)."
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
521 :type '(alist :value-type (group age boolean)))
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
522
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
523 (defcustom pets '(("brian")
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
524 ("dorith" "dog" "guppy")
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
525 ("ken" "cat"))
28398
844fb933c1aa *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27189
diff changeset
526 "Alist of people's pets.
844fb933c1aa *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 27189
diff changeset
527 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
528 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
529 :type '(alist :value-type (repeat string)))
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
530 @end smallexample
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
531
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
532 @item plist
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
533 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
534 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
535 this form:
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
536
25751
467b88fab665 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 24952
diff changeset
537 @smallexample
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
538 (@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
539 @end smallexample
24951
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
540
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
541 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
542 rather than @code{sexp}.
7451b1458af1 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 23902
diff changeset
543
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 @item symbol
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 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
546 the name of the symbol.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 @item function
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 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
550 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
551
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 @item variable
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 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
554 @kbd{M-@key{TAB}}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
556 @item face
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
557 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
558 completion with @kbd{M-@key{TAB}}.
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
559
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 @item boolean
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
561 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
562 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
563 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
564 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
565 meaning of the alternative.
32521
bfbe1fcac416 custom types emacs-commentary-link, coding-system, color
Dave Love <fx@gnu.org>
parents: 30904
diff changeset
566
bfbe1fcac416 custom types emacs-commentary-link, coding-system, color
Dave Love <fx@gnu.org>
parents: 30904
diff changeset
567 @item coding-system
bfbe1fcac416 custom types emacs-commentary-link, coding-system, color
Dave Love <fx@gnu.org>
parents: 30904
diff changeset
568 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
569 @kbd{M-@key{TAB}}.
bfbe1fcac416 custom types emacs-commentary-link, coding-system, color
Dave Love <fx@gnu.org>
parents: 30904
diff changeset
570
bfbe1fcac416 custom types emacs-commentary-link, coding-system, color
Dave Love <fx@gnu.org>
parents: 30904
diff changeset
571 @item color
bfbe1fcac416 custom types emacs-commentary-link, coding-system, color
Dave Love <fx@gnu.org>
parents: 30904
diff changeset
572 The value must be a valid color 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
573 @kbd{M-@key{TAB}}. A sample is provided,
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 @end table
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 @node Composite Types
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 @subsection Composite Types
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 When none of the simple types is appropriate, you can use composite
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
580 types, which build new types from other types. Here are several ways of
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
581 doing that:
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 @table @code
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 @item (restricted-sexp :match-alternatives @var{criteria})
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585 The value may be any Lisp object that satisfies one of @var{criteria}.
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
586 @var{criteria} should be a list, and each element should be
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 one of these possibilities:
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589 @itemize @bullet
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 @item
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
591 A predicate---that is, a function of one argument that has no side
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
592 effects, and returns either @code{nil} or non-@code{nil} according to
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
593 the argument. Using a predicate in the list says that objects for which
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
594 the predicate returns non-@code{nil} are acceptable.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 @item
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
597 A quoted constant---that is, @code{'@var{object}}. This sort of element
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
598 in the list says that @var{object} itself is an acceptable value.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599 @end itemize
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 For example,
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 @example
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
604 (restricted-sexp :match-alternatives
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
605 (integerp 't 'nil))
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 @end example
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 @noindent
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 allows integers, @code{t} and @code{nil} as legitimate values.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 The customization buffer shows all legitimate values using their read
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612 syntax, and the user edits them textually.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 @item (cons @var{car-type} @var{cdr-type})
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 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
616 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
617 symbol)} is a customization type which matches values such as
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 @code{("foo" . foo)}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
620 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
621 displayed and edited separately, each according to the type
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 that you specify for it.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 @item (list @var{element-types}@dots{})
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625 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
626 @var{element-types} you have specified; and each element must fit the
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627 corresponding @var{element-type}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
629 For example, @code{(list integer string function)} describes a list of
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
630 three elements; the first element must be an integer, the second a
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
631 string, and the third a function.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
633 In the customization buffer, each element is displayed and edited
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634 separately, according to the type specified for it.
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 @item (vector @var{element-types}@dots{})
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637 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
638 list. The elements work the same as in @code{list}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639
35009
d80f2bfd0e05 Add `radio' type. User variable doc strings and backquote in
Dave Love <fx@gnu.org>
parents: 33150
diff changeset
640 @item (choice @var{alternative-types}@dots{})
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 The value must fit at least one of @var{alternative-types}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 For example, @code{(choice integer string)} allows either an
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643 integer or a string.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
644
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
645 In the customization buffer, the user selects one of the alternatives
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646 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
647 alternative.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 Normally the strings in this menu are determined automatically from the
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650 choices; however, you can specify different strings for the menu by
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 including the @code{:tag} keyword in the alternatives. For example, if
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 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
653 verbatim, you might write the customization type this way,
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
655 @example
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656 (choice (integer :tag "Number of spaces")
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 (string :tag "Literal text"))
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
658 @end example
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660 @noindent
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661 so that the menu offers @samp{Number of spaces} and @samp{Literal Text}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
663 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
664 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
665 using the @code{:value} keyword. @xref{Type Keywords}.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
666
35009
d80f2bfd0e05 Add `radio' type. User variable doc strings and backquote in
Dave Love <fx@gnu.org>
parents: 33150
diff changeset
667 @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
668 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
669 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
670 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
671 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
672 (@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
673
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 @item (const @var{value})
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 The value must be @var{value}---nothing else is allowed.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 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
678 @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
679 @code{nil}.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
680
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
681 @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
682 For example,
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
683
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
684 @example
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
685 (choice (const :tag "Yes" t)
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
686 (const :tag "No" nil)
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
687 (const :tag "Ask" foo))
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
688 @end example
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689
22433
a9820c4e8c9e Describe widget type `other'.
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
690 @noindent
a9820c4e8c9e Describe widget type `other'.
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
691 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
692 and @code{foo} means ``ask.''
a9820c4e8c9e Describe widget type `other'.
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
693
a9820c4e8c9e Describe widget type `other'.
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
694 @item (other @var{value})
a9820c4e8c9e Describe widget type `other'.
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
695 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
696 alternative, that selects the value @var{value}.
a9820c4e8c9e Describe widget type `other'.
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
697
a9820c4e8c9e Describe widget type `other'.
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
698 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
699 For example,
a9820c4e8c9e Describe widget type `other'.
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
700
a9820c4e8c9e Describe widget type `other'.
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
701 @example
a9820c4e8c9e Describe widget type `other'.
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
702 (choice (const :tag "Yes" t)
a9820c4e8c9e Describe widget type `other'.
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
703 (const :tag "No" nil)
a9820c4e8c9e Describe widget type `other'.
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
704 (other :tag "Ask" foo))
a9820c4e8c9e Describe widget type `other'.
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
705 @end example
a9820c4e8c9e Describe widget type `other'.
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
706
a9820c4e8c9e Describe widget type `other'.
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
707 @noindent
a9820c4e8c9e Describe widget type `other'.
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
708 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
709 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
710 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
711 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
712 @samp{Ask}, just like @code{foo}.
a9820c4e8c9e Describe widget type `other'.
Richard M. Stallman <rms@gnu.org>
parents: 22274
diff changeset
713
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 @item (function-item @var{function})
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 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
716 displays the documentation string as well as the function name.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
717 The documentation string is either the one you specify with
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
718 @code{:doc}, or @var{function}'s own documentation string.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 @item (variable-item @var{variable})
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 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
722 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
723 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
724 @var{variable}'s own documentation string.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725
23902
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
726 @item (set @var{types}@dots{})
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
727 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
728 the @var{types} specified.
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
729
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
730 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
731 @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
732 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
733 of @var{types}. For example, @code{(set integer symbol)} allows one
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
734 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
735 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
736 nonspecific types such as @code{integer} in a @code{set}.
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
737
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
738 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
739 shown here:
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
740
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
741 @example
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
742 (set (const :bold) (const :italic))
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
743 @end example
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
744
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
745 Sometimes they describe possible elements in an alist:
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
746
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
747 @example
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
748 (set (cons :tag "Height" (const height) integer)
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
749 (cons :tag "Width" (const width) integer))
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
750 @end example
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
751
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
752 @noindent
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
753 That lets the user specify a height value optionally
1c12a73f742d *** empty log message ***
Karl Heuer <kwzh@gnu.org>
parents: 22433
diff changeset
754 and a width value optionally.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
756 @item (repeat @var{element-type})
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
757 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
758 @var{element-type}. This appears in the customization buffer as a
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759 list of elements, with @samp{[INS]} and @samp{[DEL]} buttons for adding
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760 more elements or removing elements.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761 @end table
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
763 @node Splicing into Lists
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
764 @subsection Splicing into Lists
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
766 The @code{:inline} feature lets you splice a variable number of
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 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
768 @code{set}, @code{choice} or @code{repeat} type which appears among the
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
769 element-types of a @code{list} or @code{vector}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
770
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
771 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
772 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
773 element-type is a @code{repeat}, that specifies a list of unspecified
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
774 length which appears as one element.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
775
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
776 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
777 merged directly into the containing sequence. For example, if it
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
778 matches a list with three elements, those become three elements of the
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
779 overall sequence. This is analogous to using @samp{,@@} in the backquote
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
780 construct.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
781
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
782 For example, to specify a list whose first element must be @code{t}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
783 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
784 @code{bar}, use this customization type:
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
786 @example
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787 (list (const t) (set :inline t foo bar))
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788 @end example
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790 @noindent
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791 This matches values such as @code{(t)}, @code{(t foo)}, @code{(t bar)}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792 and @code{(t foo bar)}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 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
795 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
796 @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
797 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
798 this customization type:
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
799
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800 @example
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 (list file
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802 (choice (const t)
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803 (list :inline t string string)))
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
804 @end example
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
805
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
806 @noindent
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
807 If the user chooses the first alternative in the choice, then the
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
808 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
809 the user chooses the second alternative, then the overall list has three
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
810 elements and the second and third must be strings.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
811
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
812 @node Type Keywords
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
813 @subsection Type Keywords
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
814
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
815 You can specify keyword-argument pairs in a customization type after the
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816 type name symbol. Here are the keywords you can use, and their
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
817 meanings:
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
819 @table @code
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
820 @item :value @var{default}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821 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
822 @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
823 when the user selects this alternative with the menu in the
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
824 customization buffer.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
825
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
826 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
827 will appear showing the actual value, not @var{default}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
828
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
829 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
830 essential to specify a valid default with @code{:value}.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
831
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
832 @item :format @var{format-string}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
833 This string will be inserted in the buffer to represent the value
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834 corresponding to the type. The following @samp{%} escapes are available
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835 for use in @var{format-string}:
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
837 @table @samp
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838 @item %[@var{button}%]
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839 Display the text @var{button} marked as a button. The @code{:action}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840 attribute specifies what the button will do if the user invokes it;
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841 its value is a function which takes two arguments---the widget which
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 the button appears in, and the event.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 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
845 actions.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847 @item %@{@var{sample}%@}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848 Show @var{sample} in a special face specified by @code{:sample-face}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
849
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850 @item %v
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851 Substitute the item's value. How the value is represented depends on
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
852 the kind of item, and (for variables) on the customization type.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854 @item %d
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855 Substitute the item's documentation string.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
856
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857 @item %h
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 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
859 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
860 first line.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 @item %t
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863 Substitute the tag here. You specify the tag with the @code{:tag}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864 keyword.
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 @item %%
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
867 Display a literal @samp{%}.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
868 @end table
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
869
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
870 @item :action @var{action}
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
871 Perform @var{action} if the user clicks on a button.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
872
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
873 @item :button-face @var{face}
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
874 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
875 text displayed with @samp{%[@dots{}%]}.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
876
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
877 @item :button-prefix @var{prefix}
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
878 @itemx :button-suffix @var{suffix}
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
879 These specify the text to display before and after a button.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
880 Each can be:
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
881
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
882 @table @asis
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
883 @item @code{nil}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
884 No text is inserted.
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 @item a string
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887 The string is inserted literally.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889 @item a symbol
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
890 The symbol's value is used.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
891 @end table
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
892
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
893 @item :tag @var{tag}
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
894 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
895 that corresponds to this type.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
896
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
897 @item :doc @var{doc}
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
898 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
899 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
900 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
901 in that value.
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
902
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
903 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
904 provide more information about the meanings of alternatives inside a
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
905 @code{:choice} type or the parts of some other composite type.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
906
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
907 @item :help-echo @var{motion-doc}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908 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
909 @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
910 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
911 @code{help-echo} string and may actually be a function or form evaluated
1d1ab0dfb528 :help-echo needn't be a string.
Dave Love <fx@gnu.org>
parents: 28398
diff changeset
912 to yield a help string as for @code{help-echo} text properties.
30904
a0af1af4aabf * .cvsignore: New file.
Werner LEMBERG <wl@gnu.org>
parents: 30500
diff changeset
913 @c @xref{Text help-echo}.
21006
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 @item :match @var{function}
21682
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
916 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
917 corresponding value, @var{function}, should be a function that accepts
90da2489c498 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21006
diff changeset
918 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
919 the value is acceptable.
21006
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921 @ignore
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 @item :indent @var{columns}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923 Indent this item by @var{columns} columns. The indentation is used for
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
924 @samp{%n}, and automatically for group names, for checklists and radio
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
925 buttons, and for editable lists. It affects the whole of the
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
926 item except for the first line.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
927
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
928 @item :offset @var{columns}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929 An integer indicating how many extra spaces to indent the subitems of
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
930 this item. By default, subitems are indented the same as their parent.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932 @item :extra-offset
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933 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
934 indentation, compared to its parent.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
936 @item :notify
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937 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
938 function is called with two or three arguments. The first argument is
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
939 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
940 the third argument is the event leading to the change, if any.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 @item :menu-tag
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943 Tag used in the menu when the widget is used as an option in a
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 @code{menu-choice} widget.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946 @item :menu-tag-get
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
947 Function used for finding the tag when the widget is used as an option
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
948 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
949 @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
950 representation of the @code{:value} property if not.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
951
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952 @item :validate
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953 A function which takes a widget as an argument, and return nil if the
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954 widgets current value is valid for the widget. Otherwise, it should
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
955 return the widget containing the invalid data, and set that widgets
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
956 @code{:error} property to a string explaining the error.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
957
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
958 You can use the function @code{widget-children-validate} for this job;
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
959 it tests that all children of @var{widget} are valid.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
960
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
961 @item :tab-order
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
962 Specify the order in which widgets are traversed with
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
963 @code{widget-forward} or @code{widget-backward}. This is only partially
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
964 implemented.
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 @enumerate a
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
967 @item
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
968 Widgets with tabbing order @code{-1} are ignored.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
969
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
970 @item
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
971 (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
972 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
973 whichever comes first.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
974
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975 @item
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
976 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
977 in the buffer with a positive tabbing order, or @code{nil}
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
978 @end enumerate
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
979
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
980 @item :parent
22138
d4ac295a98b3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 21682
diff changeset
981 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
982 element of a @code{editable-list} widget).
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
983
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
984 @item :sibling-args
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
985 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
986 @code{checklist}. The value should be a list of extra keyword
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
987 arguments, which will be used when creating the @code{radio-button} or
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988 @code{checkbox} associated with this item.
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989 @end ignore
00022857f529 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990 @end table