Mercurial > hg > xemacs-beta
comparison man/custom.texi @ 428:3ecd8885ac67 r21-2-22
Import from CVS: tag r21-2-22
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:28:15 +0200 |
parents | |
children | 42375619fa45 |
comparison
equal
deleted
inserted
replaced
427:0a0253eac470 | 428:3ecd8885ac67 |
---|---|
1 \input texinfo.tex | |
2 | |
3 @c %**start of header | |
4 @setfilename ../info/custom.info | |
5 @settitle The Customization Library | |
6 @iftex | |
7 @afourpaper | |
8 @headings double | |
9 @end iftex | |
10 @c %**end of header | |
11 | |
12 @ifinfo | |
13 @dircategory XEmacs Editor | |
14 @direntry | |
15 * Customizations: (custom). Customization Library. | |
16 @end direntry | |
17 @end ifinfo | |
18 | |
19 @node Top, Declaring Groups, (dir), (dir) | |
20 @comment node-name, next, previous, up | |
21 @top The Customization Library | |
22 | |
23 This manual describes how to declare customization groups, variables, | |
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 | |
27 @menu | |
28 * Declaring Groups:: | |
29 * Declaring Variables:: | |
30 * Declaring Faces:: | |
31 * Usage for Package Authors:: | |
32 * Utilities:: | |
33 * The Init File:: | |
34 * Wishlist:: | |
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 | |
42 @var{value} should be a customization group. | |
43 Add @var{symbol} to that group. | |
44 @item :link | |
45 @var{value} should be a widget type. | |
46 Add @var{value} to the external links for this customization option. | |
47 Useful widget types include @code{custom-manual}, @code{info-link}, and | |
48 @code{url-link}. | |
49 @item :load | |
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 | |
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 | |
54 @code{require}. | |
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 | |
61 @node Declaring Groups, Declaring Variables, Top, Top | |
62 @comment node-name, next, previous, up | |
63 @section Declaring Groups | |
64 | |
65 Use @code{defgroup} to declare new customization groups. | |
66 | |
67 @defun defgroup symbol members doc [keyword value]... | |
68 Declare @var{symbol} as a customization group containing @var{members}. | |
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 | |
81 documentation string. | |
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 | |
93 @node Declaring Variables, Declaring Faces, Declaring Groups, Top | |
94 @comment node-name, next, previous, up | |
95 @section Declaring Variables | |
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 | |
109 @item :type | |
110 @var{value} should be a widget type. | |
111 | |
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. | |
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} | |
125 method. | |
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 | |
138 already. | |
139 @end table | |
140 | |
141 @item :set | |
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 | |
153 when the `defcustom' is evaluated, or when Emacs is started if the user | |
154 has saved this option. | |
155 | |
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 | |
163 track of the variables type, @code{standard-value} for the program | |
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 | |
168 useful as an member of a hook. | |
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 | |
177 @node Declaring Faces, Usage for Package Authors, Declaring Variables, Top | |
178 @comment node-name, next, previous, up | |
179 @section Declaring Faces | |
180 | |
181 Faces are declared with @code{defface}. | |
182 | |
183 @defun defface face spec doc [keyword value]... | |
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 | |
210 (the value of (window-system))@* | |
211 Should be one of @code{x} or @code{tty}. | |
212 | |
213 @item class | |
214 (the frame's color support)@* | |
215 Should be one of @code{color}, @code{grayscale}, or @code{mono}. | |
216 | |
217 @item background | |
218 (what color is used for the background text)@* | |
219 Should be one of @code{light} or @code{dark}. | |
220 @end table | |
221 | |
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 | |
225 documentation string.@refill | |
226 | |
227 @end defun | |
228 | |
229 @node Usage for Package Authors, Utilities, Declaring Faces, Top | |
230 @comment node-name, next, previous, up | |
231 @section Usage for Package Authors | |
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 | |
241 each @emph{finder} keyword. Press @kbd{C-h p} to see a list of finder | |
242 keywords, and add you group to each of them, using the @code{:group} | |
243 keyword. | |
244 | |
245 @node Utilities, The Init File, Usage for Package Authors, Top | |
246 @comment node-name, next, previous, up | |
247 @section Utilities | |
248 | |
249 These utilities can come in handy when adding customization support. | |
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 | |
270 @defun customize-menu-create symbol &optional name | |
271 Create menu for customization group @var{symbol}. | |
272 If optional @var{name} is given, use that as the name of the menu. | |
273 Otherwise the menu will be named `Customize'. | |
274 The menu is in a format applicable to @code{easy-menu-define}. | |
275 @end defun | |
276 | |
277 @node The Init File, Wishlist, Utilities, Top | |
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} | |
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. | |
287 | |
288 @node Wishlist, , The Init File, Top | |
289 @comment node-name, next, previous, up | |
290 @section Wishlist | |
291 | |
292 @itemize @bullet | |
293 @item | |
294 Better support for keyboard operations in the customize buffer. | |
295 | |
296 @item | |
297 Integrate with @file{w3} so you can get customization buffers with much | |
298 better formatting. I'm thinking about adding a <custom>name</custom> | |
299 tag. The latest w3 have some support for this, so come up with a | |
300 convincing example. | |
301 | |
302 @item | |
303 Add an `examples' section, with explained examples of custom type | |
304 definitions. | |
305 | |
306 @item | |
307 Support selectable color themes. I.e., change many faces by setting one | |
308 variable. | |
309 | |
310 @item | |
311 Support undo using lmi's @file{gnus-undo.el}. | |
312 | |
313 | |
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 | |
319 @code{kill-buffer-hook}. | |
320 | |
321 Ditto for @code{kill-emacs-query-functions}. | |
322 | |
323 @item | |
324 Command to check if there are any customization options that | |
325 does not belong to an existing group. | |
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 | |
333 @item | |
334 Explain why it is necessary that all choices have different default | |
335 values. | |
336 | |
337 @item | |
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 | |
340 changed. | |
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 | |
370 @item | |
371 Detect when faces have been changed outside customize. | |
372 | |
373 @item | |
374 Enable mouse help in Emacs by default. | |
375 | |
376 @item | |
377 Add an easy way to display the standard settings when an item is modified. | |
378 | |
379 @item | |
380 See if it is feasible to scan files for customization information | |
381 instead of loading them, | |
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 | |
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 | |
395 @item | |
396 Add option to hide @samp{[state]} for options with their standard | |
397 settings. | |
398 | |
399 @item | |
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 | |
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 | |
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 | |
423 @end itemize | |
424 | |
425 @contents | |
426 @bye |