98
|
1 \input texinfo.tex
|
|
2
|
|
3 @c %**start of header
|
422
|
4 @setfilename ../info/custom.info
|
98
|
5 @settitle The Customization Library
|
|
6 @iftex
|
|
7 @afourpaper
|
|
8 @headings double
|
|
9 @end iftex
|
|
10 @c %**end of header
|
|
11
|
398
|
12 @ifinfo
|
|
13 @dircategory XEmacs Editor
|
|
14 @direntry
|
|
15 * Customizations: (custom). Customization Library.
|
|
16 @end direntry
|
|
17 @end ifinfo
|
|
18
|
155
|
19 @node Top, Declaring Groups, (dir), (dir)
|
98
|
20 @comment node-name, next, previous, up
|
|
21 @top The Customization Library
|
|
22
|
155
|
23 This manual describes how to declare customization groups, variables,
|
120
|
24 and faces. It doesn't contain any examples, but please look at the file
|
|
25 @file{cus-edit.el} which contains many declarations you can learn from.
|
|
26
|
98
|
27 @menu
|
422
|
28 * Declaring Groups::
|
|
29 * Declaring Variables::
|
|
30 * Declaring Faces::
|
|
31 * Usage for Package Authors::
|
|
32 * Utilities::
|
|
33 * The Init File::
|
|
34 * Wishlist::
|
98
|
35 @end menu
|
|
36
|
|
37 All the customization declarations can be changes by keyword arguments.
|
|
38 Groups, variables, and faces all share these common keywords:
|
|
39
|
|
40 @table @code
|
|
41 @item :group
|
422
|
42 @var{value} should be a customization group.
|
|
43 Add @var{symbol} to that group.
|
98
|
44 @item :link
|
422
|
45 @var{value} should be a widget type.
|
161
|
46 Add @var{value} to the external links for this customization option.
|
98
|
47 Useful widget types include @code{custom-manual}, @code{info-link}, and
|
422
|
48 @code{url-link}.
|
98
|
49 @item :load
|
161
|
50 Add @var{value} to the files that should be loaded before displaying
|
|
51 this customization option. The value should be either a string, which
|
98
|
52 should be a string which will be loaded with @code{load-library} unless
|
|
53 present in @code{load-history}, or a symbol which will be loaded with
|
422
|
54 @code{require}.
|
98
|
55 @item :tag
|
|
56 @var{Value} should be a short string used for identifying the option in
|
|
57 customization menus and buffers. By default the tag will be
|
|
58 automatically created from the options name.
|
|
59 @end table
|
|
60
|
155
|
61 @node Declaring Groups, Declaring Variables, Top, Top
|
98
|
62 @comment node-name, next, previous, up
|
155
|
63 @section Declaring Groups
|
98
|
64
|
422
|
65 Use @code{defgroup} to declare new customization groups.
|
98
|
66
|
|
67 @defun defgroup symbol members doc [keyword value]...
|
422
|
68 Declare @var{symbol} as a customization group containing @var{members}.
|
98
|
69 @var{symbol} does not need to be quoted.
|
|
70
|
|
71 @var{doc} is the group documentation.
|
|
72
|
|
73 @var{members} should be an alist of the form ((@var{name}
|
|
74 @var{widget})...) where @var{name} is a symbol and @var{widget} is a
|
|
75 widget for editing that symbol. Useful widgets are
|
|
76 @code{custom-variable} for editing variables, @code{custom-face} for
|
|
77 editing faces, and @code{custom-group} for editing groups.@refill
|
|
78
|
|
79 Internally, custom uses the symbol property @code{custom-group} to keep
|
|
80 track of the group members, and @code{group-documentation} for the
|
422
|
81 documentation string.
|
98
|
82
|
|
83 The following additional @var{keyword}'s are defined:
|
|
84
|
|
85 @table @code
|
|
86 @item :prefix
|
|
87 @var{value} should be a string. If the string is a prefix for the name
|
|
88 of a member of the group, that prefix will be ignored when creating a
|
|
89 tag for that member.
|
|
90 @end table
|
|
91 @end defun
|
|
92
|
155
|
93 @node Declaring Variables, Declaring Faces, Declaring Groups, Top
|
98
|
94 @comment node-name, next, previous, up
|
155
|
95 @section Declaring Variables
|
98
|
96
|
|
97 Use @code{defcustom} to declare user editable variables.
|
|
98
|
|
99 @defun defcustom symbol value doc [keyword value]...
|
|
100 Declare @var{symbol} as a customizable variable that defaults to @var{value}.
|
|
101 Neither @var{symbol} nor @var{value} needs to be quoted.
|
|
102 If @var{symbol} is not already bound, initialize it to @var{value}.
|
|
103
|
|
104 @var{doc} is the variable documentation.
|
|
105
|
|
106 The following additional @var{keyword}'s are defined:
|
|
107
|
|
108 @table @code
|
422
|
109 @item :type
|
98
|
110 @var{value} should be a widget type.
|
149
|
111
|
98
|
112 @item :options
|
|
113 @var{value} should be a list of possible members of the specified type.
|
|
114 For hooks, this is a list of function names.
|
149
|
115
|
|
116 @item :initialize
|
|
117 @var{value} should be a function used to initialize the variable. It
|
|
118 takes two arguments, the symbol and value given in the @code{defcustom} call.
|
|
119 Some predefined functions are:
|
|
120
|
|
121 @table @code
|
|
122 @item custom-initialize-set
|
|
123 Use the @code{:set} method to initialize the variable. Do not
|
|
124 initialize it if already bound. This is the default @code{:initialize}
|
422
|
125 method.
|
149
|
126
|
|
127 @item custom-initialize-default
|
|
128 Always use @code{set-default} to initialize the variable, even if a
|
|
129 @code{:set} method has been specified.
|
|
130
|
|
131 @item custom-initialize-reset
|
|
132 If the variable is already bound, reset it by calling the @code{:set}
|
|
133 method with the value returned by the @code{:get} method.
|
|
134
|
|
135 @item custom-initialize-changed
|
|
136 Like @code{custom-initialize-reset}, but use @code{set-default} to
|
|
137 initialize the variable if it is not bound and has not been set
|
422
|
138 already.
|
149
|
139 @end table
|
|
140
|
422
|
141 @item :set
|
149
|
142 @var{value} should be a function to set the value of the symbol. It
|
|
143 takes two arguments, the symbol to set and the value to give it. The
|
|
144 default is @code{set-default}.
|
|
145
|
|
146 @item :get
|
|
147 @var{value} should be a function to extract the value of symbol. The
|
|
148 function takes one argument, a symbol, and should return the current
|
|
149 value for that symbol. The default is @code{default-value}.
|
|
150
|
|
151 @item :require
|
|
152 @var{value} should be a feature symbol. Each feature will be required
|
161
|
153 when the `defcustom' is evaluated, or when Emacs is started if the user
|
422
|
154 has saved this option.
|
149
|
155
|
98
|
156 @end table
|
|
157
|
|
158 @xref{Sexp Types,,,widget,The Widget Library}, for information about
|
|
159 widgets to use together with the @code{:type} keyword.
|
|
160 @end defun
|
|
161
|
|
162 Internally, custom uses the symbol property @code{custom-type} to keep
|
153
|
163 track of the variables type, @code{standard-value} for the program
|
98
|
164 specified default value, @code{saved-value} for a value saved by the
|
|
165 user, and @code{variable-documentation} for the documentation string.
|
|
166
|
|
167 Use @code{custom-add-option} to specify that a specific function is
|
161
|
168 useful as an member of a hook.
|
98
|
169
|
|
170 @defun custom-add-option symbol option
|
|
171 To the variable @var{symbol} add @var{option}.
|
|
172
|
|
173 If @var{symbol} is a hook variable, @var{option} should be a hook
|
|
174 member. For other types variables, the effect is undefined."
|
|
175 @end defun
|
|
176
|
155
|
177 @node Declaring Faces, Usage for Package Authors, Declaring Variables, Top
|
98
|
178 @comment node-name, next, previous, up
|
155
|
179 @section Declaring Faces
|
98
|
180
|
|
181 Faces are declared with @code{defface}.
|
|
182
|
422
|
183 @defun defface face spec doc [keyword value]...
|
98
|
184
|
|
185 Declare @var{face} as a customizable face that defaults to @var{spec}.
|
|
186 @var{face} does not need to be quoted.
|
|
187
|
|
188 If @var{face} has been set with `custom-set-face', set the face attributes
|
|
189 as specified by that function, otherwise set the face attributes
|
|
190 according to @var{spec}.
|
|
191
|
|
192 @var{doc} is the face documentation.
|
|
193
|
|
194 @var{spec} should be an alist of the form @samp{((@var{display} @var{atts})...)}.
|
|
195
|
|
196 @var{atts} is a list of face attributes and their values. The possible
|
|
197 attributes are defined in the variable `custom-face-attributes'.
|
|
198
|
|
199 The @var{atts} of the first entry in @var{spec} where the @var{display}
|
|
200 matches the frame should take effect in that frame. @var{display} can
|
|
201 either be the symbol `t', which will match all frames, or an alist of
|
|
202 the form @samp{((@var{req} @var{item}...)...)}@refill
|
|
203
|
|
204 For the @var{display} to match a FRAME, the @var{req} property of the
|
|
205 frame must match one of the @var{item}. The following @var{req} are
|
|
206 defined:@refill
|
|
207
|
|
208 @table @code
|
|
209 @item type
|
108
|
210 (the value of (window-system))@*
|
98
|
211 Should be one of @code{x} or @code{tty}.
|
|
212
|
|
213 @item class
|
108
|
214 (the frame's color support)@*
|
98
|
215 Should be one of @code{color}, @code{grayscale}, or @code{mono}.
|
|
216
|
|
217 @item background
|
108
|
218 (what color is used for the background text)@*
|
98
|
219 Should be one of @code{light} or @code{dark}.
|
|
220 @end table
|
422
|
221
|
149
|
222 Internally, custom uses the symbol property @code{face-defface-spec} for
|
|
223 the program specified default face properties, @code{saved-face} for
|
|
224 properties saved by the user, and @code{face-documentation} for the
|
98
|
225 documentation string.@refill
|
|
226
|
|
227 @end defun
|
|
228
|
155
|
229 @node Usage for Package Authors, Utilities, Declaring Faces, Top
|
102
|
230 @comment node-name, next, previous, up
|
155
|
231 @section Usage for Package Authors
|
102
|
232
|
|
233 The recommended usage for the author of a typical emacs lisp package is
|
|
234 to create one group identifying the package, and make all user options
|
|
235 and faces members of that group. If the package has more than around 20
|
|
236 such options, they should be divided into a number of subgroups, with
|
|
237 each subgroup being member of the top level group.
|
|
238
|
|
239 The top level group for the package should itself be member of one or
|
|
240 more of the standard customization groups. There exists a group for
|
173
|
241 each @emph{finder} keyword. Press @kbd{C-h p} to see a list of finder
|
102
|
242 keywords, and add you group to each of them, using the @code{:group}
|
422
|
243 keyword.
|
102
|
244
|
155
|
245 @node Utilities, The Init File, Usage for Package Authors, Top
|
98
|
246 @comment node-name, next, previous, up
|
|
247 @section Utilities
|
|
248
|
422
|
249 These utilities can come in handy when adding customization support.
|
98
|
250
|
|
251 @deffn Widget custom-manual
|
|
252 Widget type for specifying the info manual entry for a customization
|
|
253 option. It takes one argument, an info address.
|
|
254 @end deffn
|
|
255
|
|
256 @defun custom-add-to-group group member widget
|
|
257 To existing @var{group} add a new @var{member} of type @var{widget},
|
|
258 If there already is an entry for that member, overwrite it.
|
|
259 @end defun
|
|
260
|
|
261 @defun custom-add-link symbol widget
|
|
262 To the custom option @var{symbol} add the link @var{widget}.
|
|
263 @end defun
|
|
264
|
|
265 @defun custom-add-load symbol load
|
|
266 To the custom option @var{symbol} add the dependency @var{load}.
|
|
267 @var{load} should be either a library file name, or a feature name.
|
|
268 @end defun
|
|
269
|
124
|
270 @defun customize-menu-create symbol &optional name
|
98
|
271 Create menu for customization group @var{symbol}.
|
422
|
272 If optional @var{name} is given, use that as the name of the menu.
|
124
|
273 Otherwise the menu will be named `Customize'.
|
98
|
274 The menu is in a format applicable to @code{easy-menu-define}.
|
|
275 @end defun
|
|
276
|
155
|
277 @node The Init File, Wishlist, Utilities, Top
|
98
|
278 @comment node-name, next, previous, up
|
|
279 @section The Init File
|
|
280
|
|
281 When you save the customizations, call to @code{custom-set-variables},
|
|
282 @code{custom-set-faces} are inserted into the file specified by
|
|
283 @code{custom-file}. By default @code{custom-file} is your @file{.emacs}
|
116
|
284 file. If you use another file, you must explicitly load it yourself.
|
|
285 The two functions will initialize variables and faces as you have
|
|
286 specified.
|
98
|
287
|
155
|
288 @node Wishlist, , The Init File, Top
|
98
|
289 @comment node-name, next, previous, up
|
|
290 @section Wishlist
|
|
291
|
|
292 @itemize @bullet
|
422
|
293 @item
|
120
|
294 Better support for keyboard operations in the customize buffer.
|
98
|
295
|
|
296 @item
|
155
|
297 Integrate with @file{w3} so you can get customization buffers with much
|
98
|
298 better formatting. I'm thinking about adding a <custom>name</custom>
|
108
|
299 tag. The latest w3 have some support for this, so come up with a
|
|
300 convincing example.
|
98
|
301
|
|
302 @item
|
|
303 Add an `examples' section, with explained examples of custom type
|
422
|
304 definitions.
|
98
|
305
|
|
306 @item
|
110
|
307 Support selectable color themes. I.e., change many faces by setting one
|
|
308 variable.
|
|
309
|
|
310 @item
|
98
|
311 Support undo using lmi's @file{gnus-undo.el}.
|
|
312
|
167
|
313
|
98
|
314 @item
|
|
315 Make it possible to append to `choice', `radio', and `set' options.
|
|
316
|
|
317 @item
|
|
318 Ask whether set or modified variables should be saved in
|
422
|
319 @code{kill-buffer-hook}.
|
98
|
320
|
|
321 Ditto for @code{kill-emacs-query-functions}.
|
|
322
|
|
323 @item
|
|
324 Command to check if there are any customization options that
|
422
|
325 does not belong to an existing group.
|
98
|
326
|
|
327 @item
|
|
328 Optionally disable the point-cursor and instead highlight the selected
|
|
329 item in XEmacs. This is like the *Completions* buffer in XEmacs.
|
|
330 Suggested by Jens Lautenbacher
|
|
331 @samp{<jens@@lemming0.lem.uni-karlsruhe.de>}.@refill
|
|
332
|
120
|
333 @item
|
161
|
334 Explain why it is necessary that all choices have different default
|
155
|
335 values.
|
120
|
336
|
124
|
337 @item
|
149
|
338 Add some direct support for meta variables, i.e. make it possible to
|
|
339 specify that this variable should be reset when that variable is
|
422
|
340 changed.
|
149
|
341
|
|
342 @item
|
|
343 Add tutorial.
|
|
344
|
|
345 @item
|
|
346 Describe the @code{:type} syntax in this manual.
|
|
347
|
|
348 @item
|
|
349 Find a place is this manual for the following text:
|
|
350
|
|
351 @strong{Radio vs. Buttons}
|
|
352
|
|
353 Use a radio if you can't find a good way to describe the item in the
|
|
354 choice menu text. I.e. it is better to use a radio if you expect the
|
|
355 user would otherwise manually select each item from the choice menu in
|
|
356 turn to see what it expands too.
|
|
357
|
|
358 Avoid radios if some of the items expands to complex structures.
|
|
359
|
|
360 I mostly use radios when most of the items are of type
|
|
361 @code{function-item} or @code{variable-item}.
|
|
362
|
|
363 @item
|
|
364 Update customize buffers when @code{custom-set-variable} or
|
|
365 @code{custom-save-customized} is called.
|
|
366
|
|
367 @item
|
|
368 Better handling of saved but uninitialized items.
|
|
369
|
153
|
370 @item
|
|
371 Detect when faces have been changed outside customize.
|
|
372
|
|
373 @item
|
155
|
374 Enable mouse help in Emacs by default.
|
153
|
375
|
|
376 @item
|
|
377 Add an easy way to display the standard settings when an item is modified.
|
|
378
|
155
|
379 @item
|
|
380 See if it is feasible to scan files for customization information
|
422
|
381 instead of loading them,
|
155
|
382
|
|
383 @item
|
|
384 Add hint message when user push a non-pushable tag.
|
|
385
|
|
386 Suggest that the user unhide if hidden, and edit the value directly
|
|
387 otherwise.
|
|
388
|
163
|
389 @item
|
|
390 Use checkboxes and radio buttons in the state menus.
|
|
391
|
|
392 @item
|
|
393 Add option to hide @samp{[hide]} for short options. Default, on.
|
|
394
|
422
|
395 @item
|
163
|
396 Add option to hide @samp{[state]} for options with their standard
|
|
397 settings.
|
|
398
|
422
|
399 @item
|
163
|
400 There should be a way to specify site defaults for user options.
|
|
401
|
|
402 @item
|
|
403 There should be more buffer styles. The default `nested style, the old
|
|
404 `outline' style, a `numeric' style with numbers instead of stars, an
|
|
405 `empty' style with just the group name, and `compact' with only one line
|
|
406 per item.
|
|
407
|
167
|
408 @item
|
|
409 Newline and tab should be displayed as @samp{^J} and @samp{^I} in the
|
|
410 @code{regexp} and @code{file} widgets. I think this can be done in
|
|
411 XEmacs by adding a display table to the face.
|
|
412
|
173
|
413 @item
|
|
414 Use glyphs to draw the @code{customize-browse} tree.
|
|
415
|
|
416 Add echo and balloon help. You should be able to read the documentation
|
|
417 simply by moving the mouse pointer above the name.
|
|
418
|
|
419 Add parent links.
|
|
420
|
|
421 Add colors.
|
|
422
|
98
|
423 @end itemize
|
|
424
|
|
425 @contents
|
|
426 @bye
|