Mercurial > emacs
annotate lisp/cus-edit.el @ 18278:4f78346eb734
(Buffer-menu-bury): New command.
(Buffer-menu-mode-map): Put Buffer-menu-bury on `b'.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Tue, 17 Jun 1997 04:28:01 +0000 |
parents | e83bc8150072 |
children | bb83860447d0 |
rev | line source |
---|---|
17334 | 1 ;;; cus-edit.el --- Tools for customization Emacs. |
2 ;; | |
3 ;; Copyright (C) 1996, 1997 Free Software Foundation, Inc. | |
4 ;; | |
5 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk> | |
6 ;; Keywords: help, faces | |
18258
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
7 ;; Version: 1.9920 |
17334 | 8 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/ |
9 | |
17521
ddce9ecc6f6a
(custom-face-set): Don't copy an empty face,
Richard M. Stallman <rms@gnu.org>
parents:
17415
diff
changeset
|
10 ;; This file is part of GNU Emacs. |
ddce9ecc6f6a
(custom-face-set): Don't copy an empty face,
Richard M. Stallman <rms@gnu.org>
parents:
17415
diff
changeset
|
11 |
ddce9ecc6f6a
(custom-face-set): Don't copy an empty face,
Richard M. Stallman <rms@gnu.org>
parents:
17415
diff
changeset
|
12 ;; GNU Emacs is free software; you can redistribute it and/or modify |
ddce9ecc6f6a
(custom-face-set): Don't copy an empty face,
Richard M. Stallman <rms@gnu.org>
parents:
17415
diff
changeset
|
13 ;; it under the terms of the GNU General Public License as published by |
ddce9ecc6f6a
(custom-face-set): Don't copy an empty face,
Richard M. Stallman <rms@gnu.org>
parents:
17415
diff
changeset
|
14 ;; the Free Software Foundation; either version 2, or (at your option) |
ddce9ecc6f6a
(custom-face-set): Don't copy an empty face,
Richard M. Stallman <rms@gnu.org>
parents:
17415
diff
changeset
|
15 ;; any later version. |
ddce9ecc6f6a
(custom-face-set): Don't copy an empty face,
Richard M. Stallman <rms@gnu.org>
parents:
17415
diff
changeset
|
16 |
ddce9ecc6f6a
(custom-face-set): Don't copy an empty face,
Richard M. Stallman <rms@gnu.org>
parents:
17415
diff
changeset
|
17 ;; GNU Emacs is distributed in the hope that it will be useful, |
ddce9ecc6f6a
(custom-face-set): Don't copy an empty face,
Richard M. Stallman <rms@gnu.org>
parents:
17415
diff
changeset
|
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
ddce9ecc6f6a
(custom-face-set): Don't copy an empty face,
Richard M. Stallman <rms@gnu.org>
parents:
17415
diff
changeset
|
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ddce9ecc6f6a
(custom-face-set): Don't copy an empty face,
Richard M. Stallman <rms@gnu.org>
parents:
17415
diff
changeset
|
20 ;; GNU General Public License for more details. |
ddce9ecc6f6a
(custom-face-set): Don't copy an empty face,
Richard M. Stallman <rms@gnu.org>
parents:
17415
diff
changeset
|
21 |
ddce9ecc6f6a
(custom-face-set): Don't copy an empty face,
Richard M. Stallman <rms@gnu.org>
parents:
17415
diff
changeset
|
22 ;; You should have received a copy of the GNU General Public License |
ddce9ecc6f6a
(custom-face-set): Don't copy an empty face,
Richard M. Stallman <rms@gnu.org>
parents:
17415
diff
changeset
|
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
ddce9ecc6f6a
(custom-face-set): Don't copy an empty face,
Richard M. Stallman <rms@gnu.org>
parents:
17415
diff
changeset
|
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
ddce9ecc6f6a
(custom-face-set): Don't copy an empty face,
Richard M. Stallman <rms@gnu.org>
parents:
17415
diff
changeset
|
25 ;; Boston, MA 02111-1307, USA. |
ddce9ecc6f6a
(custom-face-set): Don't copy an empty face,
Richard M. Stallman <rms@gnu.org>
parents:
17415
diff
changeset
|
26 |
17334 | 27 ;;; Commentary: |
28 ;; | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
29 ;; This file implements the code to create and edit customize buffers. |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
30 ;; |
17334 | 31 ;; See `custom.el'. |
32 | |
33 ;;; Code: | |
34 | |
35 (require 'cus-face) | |
36 (require 'wid-edit) | |
37 (require 'easymenu) | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
38 (eval-when-compile (require 'cl)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
39 |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
40 (condition-case nil |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
41 (require 'cus-load) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
42 (error nil)) |
17334 | 43 |
18089 | 44 (condition-case nil |
45 (require 'cus-start) | |
46 (error nil)) | |
47 | |
48 (define-widget-keywords :custom-category :custom-prefixes :custom-menu | |
49 :custom-show | |
17334 | 50 :custom-magic :custom-state :custom-level :custom-form |
51 :custom-set :custom-save :custom-reset-current :custom-reset-saved | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
52 :custom-reset-standard) |
17334 | 53 |
17415 | 54 (put 'custom-define-hook 'custom-type 'hook) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
55 (put 'custom-define-hook 'standard-value '(nil)) |
17415 | 56 (custom-add-to-group 'customize 'custom-define-hook 'custom-variable) |
57 | |
17334 | 58 ;;; Customization Groups. |
59 | |
60 (defgroup emacs nil | |
61 "Customization of the One True Editor." | |
62 :link '(custom-manual "(emacs)Top")) | |
63 | |
64 ;; Most of these groups are stolen from `finder.el', | |
65 (defgroup editing nil | |
66 "Basic text editing facilities." | |
67 :group 'emacs) | |
68 | |
69 (defgroup abbrev nil | |
70 "Abbreviation handling, typing shortcuts, macros." | |
71 :tag "Abbreviations" | |
72 :group 'editing) | |
73 | |
74 (defgroup matching nil | |
75 "Various sorts of searching and matching." | |
76 :group 'editing) | |
77 | |
78 (defgroup emulations nil | |
79 "Emulations of other editors." | |
80 :group 'editing) | |
81 | |
82 (defgroup mouse nil | |
83 "Mouse support." | |
84 :group 'editing) | |
85 | |
86 (defgroup outlines nil | |
87 "Support for hierarchical outlining." | |
88 :group 'editing) | |
89 | |
90 (defgroup external nil | |
91 "Interfacing to external utilities." | |
92 :group 'emacs) | |
93 | |
94 (defgroup bib nil | |
95 "Code related to the `bib' bibliography processor." | |
96 :tag "Bibliography" | |
97 :group 'external) | |
98 | |
99 (defgroup processes nil | |
100 "Process, subshell, compilation, and job control support." | |
101 :group 'external | |
102 :group 'development) | |
103 | |
104 (defgroup programming nil | |
105 "Support for programming in other languages." | |
106 :group 'emacs) | |
107 | |
108 (defgroup languages nil | |
109 "Specialized modes for editing programming languages." | |
110 :group 'programming) | |
111 | |
112 (defgroup lisp nil | |
113 "Lisp support, including Emacs Lisp." | |
114 :group 'languages | |
115 :group 'development) | |
116 | |
117 (defgroup c nil | |
118 "Support for the C language and related languages." | |
119 :group 'languages) | |
120 | |
121 (defgroup tools nil | |
122 "Programming tools." | |
123 :group 'programming) | |
124 | |
125 (defgroup oop nil | |
126 "Support for object-oriented programming." | |
127 :group 'programming) | |
128 | |
129 (defgroup applications nil | |
130 "Applications written in Emacs." | |
131 :group 'emacs) | |
132 | |
133 (defgroup calendar nil | |
134 "Calendar and time management support." | |
135 :group 'applications) | |
136 | |
137 (defgroup mail nil | |
138 "Modes for electronic-mail handling." | |
139 :group 'applications) | |
140 | |
141 (defgroup news nil | |
142 "Support for netnews reading and posting." | |
143 :group 'applications) | |
144 | |
145 (defgroup games nil | |
146 "Games, jokes and amusements." | |
147 :group 'applications) | |
148 | |
149 (defgroup development nil | |
150 "Support for further development of Emacs." | |
151 :group 'emacs) | |
152 | |
153 (defgroup docs nil | |
154 "Support for Emacs documentation." | |
155 :group 'development) | |
156 | |
157 (defgroup extensions nil | |
158 "Emacs Lisp language extensions." | |
159 :group 'development) | |
160 | |
161 (defgroup internal nil | |
162 "Code for Emacs internals, build process, defaults." | |
163 :group 'development) | |
164 | |
165 (defgroup maint nil | |
166 "Maintenance aids for the Emacs development group." | |
167 :tag "Maintenance" | |
168 :group 'development) | |
169 | |
170 (defgroup environment nil | |
171 "Fitting Emacs with its environment." | |
172 :group 'emacs) | |
173 | |
174 (defgroup comm nil | |
175 "Communications, networking, remote access to files." | |
176 :tag "Communication" | |
177 :group 'environment) | |
178 | |
179 (defgroup hardware nil | |
180 "Support for interfacing with exotic hardware." | |
181 :group 'environment) | |
182 | |
183 (defgroup terminals nil | |
184 "Support for terminal types." | |
185 :group 'environment) | |
186 | |
187 (defgroup unix nil | |
188 "Front-ends/assistants for, or emulators of, UNIX features." | |
189 :group 'environment) | |
190 | |
191 (defgroup vms nil | |
192 "Support code for vms." | |
193 :group 'environment) | |
194 | |
195 (defgroup i18n nil | |
196 "Internationalization and alternate character-set support." | |
197 :group 'environment | |
198 :group 'editing) | |
199 | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
200 (defgroup x nil |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
201 "The X Window system." |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
202 :group 'environment) |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
203 |
17334 | 204 (defgroup frames nil |
205 "Support for Emacs frames and window systems." | |
206 :group 'environment) | |
207 | |
208 (defgroup data nil | |
209 "Support editing files of data." | |
210 :group 'emacs) | |
211 | |
212 (defgroup wp nil | |
213 "Word processing." | |
214 :group 'emacs) | |
215 | |
216 (defgroup tex nil | |
217 "Code related to the TeX formatter." | |
218 :group 'wp) | |
219 | |
220 (defgroup faces nil | |
221 "Support for multiple fonts." | |
222 :group 'emacs) | |
223 | |
224 (defgroup hypermedia nil | |
225 "Support for links between text or other media types." | |
226 :group 'emacs) | |
227 | |
228 (defgroup help nil | |
229 "Support for on-line help systems." | |
230 :group 'emacs) | |
231 | |
232 (defgroup local nil | |
233 "Code local to your site." | |
234 :group 'emacs) | |
235 | |
236 (defgroup customize '((widgets custom-group)) | |
237 "Customization of the Customization support." | |
238 :link '(custom-manual "(custom)Top") | |
239 :link '(url-link :tag "Development Page" | |
240 "http://www.dina.kvl.dk/~abraham/custom/") | |
241 :prefix "custom-" | |
17415 | 242 :group 'help) |
243 | |
244 (defgroup custom-faces nil | |
245 "Faces used by customize." | |
246 :group 'customize | |
17334 | 247 :group 'faces) |
248 | |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
249 (defgroup custom-buffer nil |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
250 "Control the customize buffers." |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
251 :prefix "custom-" |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
252 :group 'customize) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
253 |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
254 (defgroup custom-menu nil |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
255 "Control how the customize menus." |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
256 :prefix "custom-" |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
257 :group 'customize) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
258 |
17415 | 259 (defgroup abbrev-mode nil |
260 "Word abbreviations mode." | |
261 :group 'abbrev) | |
262 | |
263 (defgroup alloc nil | |
264 "Storage allocation and gc for GNU Emacs Lisp interpreter." | |
265 :tag "Storage Allocation" | |
266 :group 'internal) | |
267 | |
268 (defgroup undo nil | |
269 "Undoing changes in buffers." | |
270 :group 'editing) | |
271 | |
272 (defgroup modeline nil | |
273 "Content of the modeline." | |
274 :group 'environment) | |
275 | |
276 (defgroup fill nil | |
277 "Indenting and filling text." | |
278 :group 'editing) | |
279 | |
280 (defgroup editing-basics nil | |
281 "Most basic editing facilities." | |
282 :group 'editing) | |
283 | |
284 (defgroup display nil | |
285 "How characters are displayed in buffers." | |
286 :group 'environment) | |
287 | |
288 (defgroup execute nil | |
289 "Executing external commands." | |
290 :group 'processes) | |
291 | |
292 (defgroup installation nil | |
293 "The Emacs installation." | |
294 :group 'environment) | |
295 | |
296 (defgroup dired nil | |
297 "Directory editing." | |
298 :group 'environment) | |
299 | |
300 (defgroup limits nil | |
301 "Internal Emacs limits." | |
302 :group 'internal) | |
303 | |
304 (defgroup debug nil | |
305 "Debugging Emacs itself." | |
306 :group 'development) | |
307 | |
308 (defgroup minibuffer nil | |
309 "Controling the behaviour of the minibuffer." | |
310 :group 'environment) | |
311 | |
312 (defgroup keyboard nil | |
313 "Input from the keyboard." | |
314 :group 'environment) | |
315 | |
316 (defgroup mouse nil | |
317 "Input from the mouse." | |
318 :group 'environment) | |
319 | |
320 (defgroup menu nil | |
321 "Input from the menus." | |
322 :group 'environment) | |
323 | |
324 (defgroup auto-save nil | |
325 "Preventing accidential loss of data." | |
326 :group 'data) | |
327 | |
328 (defgroup processes-basics nil | |
329 "Basic stuff dealing with processes." | |
330 :group 'processes) | |
331 | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
332 (defgroup mule nil |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
333 "MULE Emacs internationalization." |
18053
941f5d1a241e
(cus-start): Require cus-start.
Richard M. Stallman <rms@gnu.org>
parents:
18033
diff
changeset
|
334 :group 'i18n) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
335 |
17415 | 336 (defgroup windows nil |
337 "Windows within a frame." | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
338 :group 'environment) |
17415 | 339 |
17334 | 340 ;;; Utilities. |
341 | |
342 (defun custom-quote (sexp) | |
343 "Quote SEXP iff it is not self quoting." | |
344 (if (or (memq sexp '(t nil)) | |
345 (and (symbolp sexp) | |
346 (eq (aref (symbol-name sexp) 0) ?:)) | |
347 (and (listp sexp) | |
348 (memq (car sexp) '(lambda))) | |
349 (stringp sexp) | |
350 (numberp sexp) | |
351 (and (fboundp 'characterp) | |
352 (characterp sexp))) | |
353 sexp | |
354 (list 'quote sexp))) | |
355 | |
356 (defun custom-split-regexp-maybe (regexp) | |
357 "If REGEXP is a string, split it to a list at `\\|'. | |
358 You can get the original back with from the result with: | |
359 (mapconcat 'identity result \"\\|\") | |
360 | |
361 IF REGEXP is not a string, return it unchanged." | |
362 (if (stringp regexp) | |
363 (let ((start 0) | |
364 all) | |
365 (while (string-match "\\\\|" regexp start) | |
366 (setq all (cons (substring regexp start (match-beginning 0)) all) | |
367 start (match-end 0))) | |
368 (nreverse (cons (substring regexp start) all))) | |
369 regexp)) | |
370 | |
17415 | 371 (defun custom-variable-prompt () |
372 ;; Code stolen from `help.el'. | |
373 "Prompt for a variable, defaulting to the variable at point. | |
374 Return a list suitable for use in `interactive'." | |
375 (let ((v (variable-at-point)) | |
376 (enable-recursive-minibuffers t) | |
377 val) | |
378 (setq val (completing-read | |
18085
3da4eaba1fe8
(custom-variable-prompt): Handle variable-at-point returning 0.
Richard M. Stallman <rms@gnu.org>
parents:
18067
diff
changeset
|
379 (if (symbolp v) |
18131
5711f2e5a643
(custom-variable-prompt): Change prompt.
Richard M. Stallman <rms@gnu.org>
parents:
18090
diff
changeset
|
380 (format "Customize option: (default %s) " v) |
17415 | 381 "Customize variable: ") |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
382 obarray (lambda (symbol) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
383 (and (boundp symbol) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
384 (or (get symbol 'custom-type) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
385 (user-variable-p symbol)))))) |
17415 | 386 (list (if (equal val "") |
18085
3da4eaba1fe8
(custom-variable-prompt): Handle variable-at-point returning 0.
Richard M. Stallman <rms@gnu.org>
parents:
18067
diff
changeset
|
387 (if (symbolp v) v nil) |
3da4eaba1fe8
(custom-variable-prompt): Handle variable-at-point returning 0.
Richard M. Stallman <rms@gnu.org>
parents:
18067
diff
changeset
|
388 (intern val))))) |
17415 | 389 |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
390 (defun custom-menu-filter (menu widget) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
391 "Convert MENU to the form used by `widget-choose'. |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
392 MENU should be in the same format as `custom-variable-menu'. |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
393 WIDGET is the widget to apply the filter entries of MENU on." |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
394 (let ((result nil) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
395 current name action filter) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
396 (while menu |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
397 (setq current (car menu) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
398 name (nth 0 current) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
399 action (nth 1 current) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
400 filter (nth 2 current) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
401 menu (cdr menu)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
402 (if (or (null filter) (funcall filter widget)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
403 (push (cons name action) result) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
404 (push name result))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
405 (nreverse result))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
406 |
17415 | 407 ;;; Unlispify. |
408 | |
17334 | 409 (defvar custom-prefix-list nil |
410 "List of prefixes that should be ignored by `custom-unlispify'") | |
411 | |
412 (defcustom custom-unlispify-menu-entries t | |
413 "Display menu entries as words instead of symbols if non nil." | |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
414 :group 'custom-menu |
17334 | 415 :type 'boolean) |
416 | |
417 (defun custom-unlispify-menu-entry (symbol &optional no-suffix) | |
418 "Convert symbol into a menu entry." | |
419 (cond ((not custom-unlispify-menu-entries) | |
420 (symbol-name symbol)) | |
421 ((get symbol 'custom-tag) | |
422 (if no-suffix | |
423 (get symbol 'custom-tag) | |
424 (concat (get symbol 'custom-tag) "..."))) | |
425 (t | |
426 (save-excursion | |
427 (set-buffer (get-buffer-create " *Custom-Work*")) | |
428 (erase-buffer) | |
429 (princ symbol (current-buffer)) | |
430 (goto-char (point-min)) | |
17415 | 431 (when (and (eq (get symbol 'custom-type) 'boolean) |
432 (re-search-forward "-p\\'" nil t)) | |
433 (replace-match "" t t) | |
434 (goto-char (point-min))) | |
17334 | 435 (let ((prefixes custom-prefix-list) |
436 prefix) | |
437 (while prefixes | |
438 (setq prefix (car prefixes)) | |
439 (if (search-forward prefix (+ (point) (length prefix)) t) | |
440 (progn | |
441 (setq prefixes nil) | |
442 (delete-region (point-min) (point))) | |
443 (setq prefixes (cdr prefixes))))) | |
444 (subst-char-in-region (point-min) (point-max) ?- ?\ t) | |
445 (capitalize-region (point-min) (point-max)) | |
446 (unless no-suffix | |
447 (goto-char (point-max)) | |
448 (insert "...")) | |
449 (buffer-string))))) | |
450 | |
451 (defcustom custom-unlispify-tag-names t | |
452 "Display tag names as words instead of symbols if non nil." | |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
453 :group 'custom-buffer |
17334 | 454 :type 'boolean) |
455 | |
456 (defun custom-unlispify-tag-name (symbol) | |
457 "Convert symbol into a menu entry." | |
458 (let ((custom-unlispify-menu-entries custom-unlispify-tag-names)) | |
459 (custom-unlispify-menu-entry symbol t))) | |
460 | |
461 (defun custom-prefix-add (symbol prefixes) | |
462 ;; Addd SYMBOL to list of ignored PREFIXES. | |
463 (cons (or (get symbol 'custom-prefix) | |
464 (concat (symbol-name symbol) "-")) | |
465 prefixes)) | |
466 | |
17415 | 467 ;;; Guess. |
468 | |
469 (defcustom custom-guess-name-alist | |
470 '(("-p\\'" boolean) | |
471 ("-hook\\'" hook) | |
472 ("-face\\'" face) | |
473 ("-file\\'" file) | |
474 ("-function\\'" function) | |
475 ("-functions\\'" (repeat function)) | |
476 ("-list\\'" (repeat sexp)) | |
477 ("-alist\\'" (repeat (cons sexp sexp)))) | |
478 "Alist of (MATCH TYPE). | |
479 | |
480 MATCH should be a regexp matching the name of a symbol, and TYPE should | |
481 be a widget suitable for editing the value of that symbol. The TYPE | |
482 of the first entry where MATCH matches the name of the symbol will be | |
483 used. | |
484 | |
485 This is used for guessing the type of variables not declared with | |
486 customize." | |
487 :type '(repeat (group (regexp :tag "Match") (sexp :tag "Type"))) | |
488 :group 'customize) | |
489 | |
490 (defcustom custom-guess-doc-alist | |
491 '(("\\`\\*?Non-nil " boolean)) | |
492 "Alist of (MATCH TYPE). | |
493 | |
494 MATCH should be a regexp matching a documentation string, and TYPE | |
495 should be a widget suitable for editing the value of a variable with | |
496 that documentation string. The TYPE of the first entry where MATCH | |
497 matches the name of the symbol will be used. | |
498 | |
499 This is used for guessing the type of variables not declared with | |
500 customize." | |
501 :type '(repeat (group (regexp :tag "Match") (sexp :tag "Type"))) | |
502 :group 'customize) | |
503 | |
504 (defun custom-guess-type (symbol) | |
505 "Guess a widget suitable for editing the value of SYMBOL. | |
506 This is done by matching SYMBOL with `custom-guess-name-alist' and | |
507 if that fails, the doc string with `custom-guess-doc-alist'." | |
508 (let ((name (symbol-name symbol)) | |
509 (names custom-guess-name-alist) | |
510 current found) | |
511 (while names | |
512 (setq current (car names) | |
513 names (cdr names)) | |
514 (when (string-match (nth 0 current) name) | |
515 (setq found (nth 1 current) | |
516 names nil))) | |
517 (unless found | |
518 (let ((doc (documentation-property symbol 'variable-documentation)) | |
519 (docs custom-guess-doc-alist)) | |
520 (when doc | |
521 (while docs | |
522 (setq current (car docs) | |
523 docs (cdr docs)) | |
524 (when (string-match (nth 0 current) doc) | |
525 (setq found (nth 1 current) | |
526 docs nil)))))) | |
527 found)) | |
528 | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
529 ;;; Sorting. |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
530 |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
531 (defcustom custom-buffer-sort-predicate 'ignore |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
532 "Function used for sorting group members in buffers. |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
533 The value should be useful as a predicate for `sort'. |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
534 The list to be sorted is the value of the groups `custom-group' property." |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
535 :type '(radio (const :tag "Unsorted" ignore) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
536 (const :tag "Alphabetic" custom-sort-items-alphabetically) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
537 (function :tag "Other")) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
538 :group 'custom-buffer) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
539 |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
540 (defcustom custom-buffer-order-predicate 'custom-sort-groups-last |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
541 "Function used for sorting group members in buffers. |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
542 The value should be useful as a predicate for `sort'. |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
543 The list to be sorted is the value of the groups `custom-group' property." |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
544 :type '(radio (const :tag "Groups first" custom-sort-groups-first) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
545 (const :tag "Groups last" custom-sort-groups-last) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
546 (function :tag "Other")) |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
547 :group 'custom-buffer) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
548 |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
549 (defcustom custom-menu-sort-predicate 'ignore |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
550 "Function used for sorting group members in menus. |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
551 The value should be useful as a predicate for `sort'. |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
552 The list to be sorted is the value of the groups `custom-group' property." |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
553 :type '(radio (const :tag "Unsorted" ignore) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
554 (const :tag "Alphabetic" custom-sort-items-alphabetically) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
555 (function :tag "Other")) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
556 :group 'custom-menu) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
557 |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
558 (defcustom custom-menu-order-predicate 'custom-sort-groups-first |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
559 "Function used for sorting group members in menus. |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
560 The value should be useful as a predicate for `sort'. |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
561 The list to be sorted is the value of the groups `custom-group' property." |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
562 :type '(radio (const :tag "Groups first" custom-sort-groups-first) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
563 (const :tag "Groups last" custom-sort-groups-last) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
564 (function :tag "Other")) |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
565 :group 'custom-menu) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
566 |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
567 (defun custom-sort-items-alphabetically (a b) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
568 "Return t iff A is alphabetically before B and the same custom type. |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
569 A and B should be members of a `custom-group' property." |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
570 (and (eq (nth 1 a) (nth 1 b)) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
571 (string-lessp (symbol-name (nth 0 a)) (symbol-name (nth 0 b))))) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
572 |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
573 (defun custom-sort-groups-first (a b) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
574 "Return t iff A a custom group and B is a not. |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
575 A and B should be members of a `custom-group' property." |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
576 (and (eq (nth 1 a) 'custom-group) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
577 (not (eq (nth 1 b) 'custom-group)))) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
578 |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
579 (defun custom-sort-groups-last (a b) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
580 "Return t iff B a custom group and A is a not. |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
581 A and B should be members of a `custom-group' property." |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
582 (and (eq (nth 1 b) 'custom-group) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
583 (not (eq (nth 1 a) 'custom-group)))) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
584 |
17415 | 585 ;;; Custom Mode Commands. |
17334 | 586 |
587 (defvar custom-options nil | |
588 "Customization widgets in the current buffer.") | |
589 | |
590 (defun custom-set () | |
591 "Set changes in all modified options." | |
592 (interactive) | |
593 (let ((children custom-options)) | |
594 (mapcar (lambda (child) | |
595 (when (eq (widget-get child :custom-state) 'modified) | |
596 (widget-apply child :custom-set))) | |
597 children))) | |
598 | |
599 (defun custom-save () | |
600 "Set all modified group members and save them." | |
601 (interactive) | |
602 (let ((children custom-options)) | |
603 (mapcar (lambda (child) | |
604 (when (memq (widget-get child :custom-state) '(modified set)) | |
605 (widget-apply child :custom-save))) | |
606 children)) | |
607 (custom-save-all)) | |
608 | |
609 (defvar custom-reset-menu | |
610 '(("Current" . custom-reset-current) | |
611 ("Saved" . custom-reset-saved) | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
612 ("Standard Settings" . custom-reset-standard)) |
17334 | 613 "Alist of actions for the `Reset' button. |
614 The key is a string containing the name of the action, the value is a | |
615 lisp function taking the widget as an element which will be called | |
616 when the action is chosen.") | |
617 | |
618 (defun custom-reset (event) | |
619 "Select item from reset menu." | |
620 (let* ((completion-ignore-case t) | |
621 (answer (widget-choose "Reset to" | |
622 custom-reset-menu | |
623 event))) | |
624 (if answer | |
625 (funcall answer)))) | |
626 | |
18089 | 627 (defun custom-reset-current (&rest ignore) |
17334 | 628 "Reset all modified group members to their current value." |
629 (interactive) | |
630 (let ((children custom-options)) | |
631 (mapcar (lambda (child) | |
632 (when (eq (widget-get child :custom-state) 'modified) | |
633 (widget-apply child :custom-reset-current))) | |
634 children))) | |
635 | |
18089 | 636 (defun custom-reset-saved (&rest ignore) |
17334 | 637 "Reset all modified or set group members to their saved value." |
638 (interactive) | |
639 (let ((children custom-options)) | |
640 (mapcar (lambda (child) | |
641 (when (eq (widget-get child :custom-state) 'modified) | |
642 (widget-apply child :custom-reset-current))) | |
643 children))) | |
644 | |
18089 | 645 (defun custom-reset-standard (&rest ignore) |
17641
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
646 "Reset all modified, set, or saved group members to their standard settings." |
17334 | 647 (interactive) |
648 (let ((children custom-options)) | |
649 (mapcar (lambda (child) | |
650 (when (eq (widget-get child :custom-state) 'modified) | |
651 (widget-apply child :custom-reset-current))) | |
652 children))) | |
653 | |
654 ;;; The Customize Commands | |
655 | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
656 (defun custom-prompt-variable (prompt-var prompt-val) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
657 "Prompt for a variable and a value and return them as a list. |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
658 PROMPT-VAR is the prompt for the variable, and PROMPT-VAL is the |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
659 prompt for the value. The %s escape in PROMPT-VAL is replaced with |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
660 the name of the variable. |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
661 |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
662 If the variable has a `variable-interactive' property, that is used as if |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
663 it were the arg to `interactive' (which see) to interactively read the value. |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
664 |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
665 If the variable has a `custom-type' property, it must be a widget and the |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
666 `:prompt-value' property of that widget will be used for reading the value." |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
667 (let* ((var (read-variable prompt-var)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
668 (minibuffer-help-form '(describe-variable var))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
669 (list var |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
670 (let ((prop (get var 'variable-interactive)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
671 (type (get var 'custom-type)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
672 (prompt (format prompt-val var))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
673 (unless (listp type) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
674 (setq type (list type))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
675 (cond (prop |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
676 ;; Use VAR's `variable-interactive' property |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
677 ;; as an interactive spec for prompting. |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
678 (call-interactively (list 'lambda '(arg) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
679 (list 'interactive prop) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
680 'arg))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
681 (type |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
682 (widget-prompt-value type |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
683 prompt |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
684 (if (boundp var) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
685 (symbol-value var)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
686 (not (boundp var)))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
687 (t |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
688 (eval-minibuffer prompt))))))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
689 |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
690 ;;;###autoload |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
691 (defun custom-set-value (var val) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
692 "Set VARIABLE to VALUE. VALUE is a Lisp object. |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
693 |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
694 If VARIABLE has a `variable-interactive' property, that is used as if |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
695 it were the arg to `interactive' (which see) to interactively read the value. |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
696 |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
697 If VARIABLE has a `custom-type' property, it must be a widget and the |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
698 `:prompt-value' property of that widget will be used for reading the value." |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
699 (interactive (custom-prompt-variable "Set variable: " |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
700 "Set %s to value: ")) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
701 |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
702 (set var val)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
703 |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
704 ;;;###autoload |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
705 (defun custom-set-variable (var val) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
706 "Set the default for VARIABLE to VALUE. VALUE is a Lisp object. |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
707 |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
708 If VARIABLE has a `custom-set' property, that is used for setting |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
709 VARIABLE, otherwise `set-default' is used. |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
710 |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
711 The `customized-value' property of the VARIABLE will be set to a list |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
712 with a quoted VALUE as its sole list member. |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
713 |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
714 If VARIABLE has a `variable-interactive' property, that is used as if |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
715 it were the arg to `interactive' (which see) to interactively read the value. |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
716 |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
717 If VARIABLE has a `custom-type' property, it must be a widget and the |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
718 `:prompt-value' property of that widget will be used for reading the value. " |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
719 (interactive (custom-prompt-variable "Set variable: " |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
720 "Set customized value for %s to: ")) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
721 (funcall (or (get var 'custom-set) 'set-default) var val) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
722 (put var 'customized-value (list (custom-quote val)))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
723 |
17334 | 724 ;;;###autoload |
17641
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
725 (defun customize () |
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
726 "Select a customization buffer which you can use to set user options. |
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
727 User options are structured into \"groups\". |
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
728 Initially the top-level group `Emacs' and its immediate subgroups |
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
729 are shown; the contents of those subgroups are initially hidden." |
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
730 (interactive) |
17703 | 731 (customize-group 'emacs)) |
17641
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
732 |
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
733 ;;;###autoload |
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
734 (defun customize-group (group) |
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
735 "Customize GROUP, which must be a customization group." |
17334 | 736 (interactive (list (completing-read "Customize group: (default emacs) " |
737 obarray | |
738 (lambda (symbol) | |
739 (get symbol 'custom-group)) | |
740 t))) | |
741 | |
17641
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
742 (when (stringp group) |
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
743 (if (string-equal "" group) |
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
744 (setq group 'emacs) |
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
745 (setq group (intern group)))) |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
746 (custom-buffer-create (list (list group 'custom-group)) |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
747 (format "*Customize Group: %s*" |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
748 (custom-unlispify-tag-name group)))) |
17334 | 749 |
750 ;;;###autoload | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
751 (defun customize-group-other-window (symbol) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
752 "Customize SYMBOL, which must be a customization group." |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
753 (interactive (list (completing-read "Customize group: (default emacs) " |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
754 obarray |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
755 (lambda (symbol) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
756 (get symbol 'custom-group)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
757 t))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
758 |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
759 (when (stringp symbol) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
760 (if (string-equal "" symbol) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
761 (setq symbol 'emacs) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
762 (setq symbol (intern symbol)))) |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
763 (custom-buffer-create-other-window |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
764 (list (list symbol 'custom-group)) |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
765 (format "*Customize Group: %s*" (custom-unlispify-tag-name symbol)))) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
766 |
18089 | 767 ;;;###autoload |
768 (defalias 'customize-variable 'customize-option) | |
18086
dbae3eb8b351
(customize-option): Renamed from custom-variable.
Richard M. Stallman <rms@gnu.org>
parents:
18085
diff
changeset
|
769 |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
770 ;;;###autoload |
18086
dbae3eb8b351
(customize-option): Renamed from custom-variable.
Richard M. Stallman <rms@gnu.org>
parents:
18085
diff
changeset
|
771 (defun customize-option (symbol) |
dbae3eb8b351
(customize-option): Renamed from custom-variable.
Richard M. Stallman <rms@gnu.org>
parents:
18085
diff
changeset
|
772 "Customize SYMBOL, which must be a user option variable." |
17415 | 773 (interactive (custom-variable-prompt)) |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
774 (custom-buffer-create (list (list symbol 'custom-variable)) |
18086
dbae3eb8b351
(customize-option): Renamed from custom-variable.
Richard M. Stallman <rms@gnu.org>
parents:
18085
diff
changeset
|
775 (format "*Customize Option: %s*" |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
776 (custom-unlispify-tag-name symbol)))) |
17334 | 777 |
778 ;;;###autoload | |
18139
ee3c0d09dcd3
Synched with 1.9908.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18131
diff
changeset
|
779 (defalias 'customize-variable-other-window 'customize-option-other-window) |
ee3c0d09dcd3
Synched with 1.9908.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18131
diff
changeset
|
780 |
ee3c0d09dcd3
Synched with 1.9908.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18131
diff
changeset
|
781 ;;;###autoload |
18086
dbae3eb8b351
(customize-option): Renamed from custom-variable.
Richard M. Stallman <rms@gnu.org>
parents:
18085
diff
changeset
|
782 (defun customize-option-other-window (symbol) |
dbae3eb8b351
(customize-option): Renamed from custom-variable.
Richard M. Stallman <rms@gnu.org>
parents:
18085
diff
changeset
|
783 "Customize SYMBOL, which must be a user option variable. |
17415 | 784 Show the buffer in another window, but don't select it." |
785 (interactive (custom-variable-prompt)) | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
786 (custom-buffer-create-other-window |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
787 (list (list symbol 'custom-variable)) |
18086
dbae3eb8b351
(customize-option): Renamed from custom-variable.
Richard M. Stallman <rms@gnu.org>
parents:
18085
diff
changeset
|
788 (format "*Customize Option: %s*" (custom-unlispify-tag-name symbol)))) |
17415 | 789 |
790 ;;;###autoload | |
17334 | 791 (defun customize-face (&optional symbol) |
792 "Customize SYMBOL, which should be a face name or nil. | |
793 If SYMBOL is nil, customize all faces." | |
794 (interactive (list (completing-read "Customize face: (default all) " | |
795 obarray 'custom-facep))) | |
796 (if (or (null symbol) (and (stringp symbol) (zerop (length symbol)))) | |
797 (let ((found nil)) | |
798 (message "Looking for faces...") | |
799 (mapcar (lambda (symbol) | |
800 (setq found (cons (list symbol 'custom-face) found))) | |
17415 | 801 (nreverse (mapcar 'intern |
802 (sort (mapcar 'symbol-name (face-list)) | |
803 'string<)))) | |
804 | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
805 (custom-buffer-create found "*Customize Faces*")) |
17334 | 806 (if (stringp symbol) |
807 (setq symbol (intern symbol))) | |
808 (unless (symbolp symbol) | |
809 (error "Should be a symbol %S" symbol)) | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
810 (custom-buffer-create (list (list symbol 'custom-face)) |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
811 (format "*Customize Face: %s*" |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
812 (custom-unlispify-tag-name symbol))))) |
17334 | 813 |
814 ;;;###autoload | |
17415 | 815 (defun customize-face-other-window (&optional symbol) |
816 "Show customization buffer for FACE in other window." | |
817 (interactive (list (completing-read "Customize face: " | |
818 obarray 'custom-facep))) | |
819 (if (or (null symbol) (and (stringp symbol) (zerop (length symbol)))) | |
820 () | |
821 (if (stringp symbol) | |
822 (setq symbol (intern symbol))) | |
823 (unless (symbolp symbol) | |
824 (error "Should be a symbol %S" symbol)) | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
825 (custom-buffer-create-other-window |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
826 (list (list symbol 'custom-face)) |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
827 (format "*Customize Face: %s*" (custom-unlispify-tag-name symbol))))) |
17415 | 828 |
829 ;;;###autoload | |
17334 | 830 (defun customize-customized () |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
831 "Customize all user options set since the last save in this session." |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
832 (interactive) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
833 (let ((found nil)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
834 (mapatoms (lambda (symbol) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
835 (and (get symbol 'customized-face) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
836 (custom-facep symbol) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
837 (setq found (cons (list symbol 'custom-face) found))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
838 (and (get symbol 'customized-value) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
839 (boundp symbol) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
840 (setq found |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
841 (cons (list symbol 'custom-variable) found))))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
842 (if found |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
843 (custom-buffer-create found "*Customize Customized*") |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
844 (error "No customized user options")))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
845 |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
846 ;;;###autoload |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
847 (defun customize-saved () |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
848 "Customize all already saved user options." |
17334 | 849 (interactive) |
850 (let ((found nil)) | |
851 (mapatoms (lambda (symbol) | |
852 (and (get symbol 'saved-face) | |
853 (custom-facep symbol) | |
854 (setq found (cons (list symbol 'custom-face) found))) | |
855 (and (get symbol 'saved-value) | |
856 (boundp symbol) | |
857 (setq found | |
858 (cons (list symbol 'custom-variable) found))))) | |
859 (if found | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
860 (custom-buffer-create found "*Customize Saved*") |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
861 (error "No saved user options")))) |
17334 | 862 |
863 ;;;###autoload | |
864 (defun customize-apropos (regexp &optional all) | |
865 "Customize all user options matching REGEXP. | |
866 If ALL (e.g., started with a prefix key), include options which are not | |
867 user-settable." | |
868 (interactive "sCustomize regexp: \nP") | |
869 (let ((found nil)) | |
870 (mapatoms (lambda (symbol) | |
871 (when (string-match regexp (symbol-name symbol)) | |
872 (when (get symbol 'custom-group) | |
873 (setq found (cons (list symbol 'custom-group) found))) | |
874 (when (custom-facep symbol) | |
875 (setq found (cons (list symbol 'custom-face) found))) | |
876 (when (and (boundp symbol) | |
877 (or (get symbol 'saved-value) | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
878 (get symbol 'standard-value) |
17334 | 879 (if all |
880 (get symbol 'variable-documentation) | |
881 (user-variable-p symbol)))) | |
882 (setq found | |
883 (cons (list symbol 'custom-variable) found)))))) | |
884 (if found | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
885 (custom-buffer-create found "*Customize Apropos*") |
17334 | 886 (error "No matches")))) |
887 | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
888 ;;; Buffer. |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
889 |
17334 | 890 ;;;###autoload |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
891 (defun custom-buffer-create (options &optional name) |
17334 | 892 "Create a buffer containing OPTIONS. |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
893 Optional NAME is the name of the buffer. |
17334 | 894 OPTIONS should be an alist of the form ((SYMBOL WIDGET)...), where |
895 SYMBOL is a customization option, and WIDGET is a widget for editing | |
896 that option." | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
897 (unless name (setq name "*Customization*")) |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
898 (kill-buffer (get-buffer-create name)) |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
899 (switch-to-buffer (get-buffer-create name)) |
17415 | 900 (custom-buffer-create-internal options)) |
901 | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
902 ;;;###autoload |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
903 (defun custom-buffer-create-other-window (options &optional name) |
17415 | 904 "Create a buffer containing OPTIONS. |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
905 Optional NAME is the name of the buffer. |
17415 | 906 OPTIONS should be an alist of the form ((SYMBOL WIDGET)...), where |
907 SYMBOL is a customization option, and WIDGET is a widget for editing | |
908 that option." | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
909 (unless name (setq name "*Customization*")) |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
910 (kill-buffer (get-buffer-create name)) |
17415 | 911 (let ((window (selected-window))) |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
912 (switch-to-buffer-other-window (get-buffer-create name)) |
17415 | 913 (custom-buffer-create-internal options) |
914 (select-window window))) | |
18089 | 915 |
916 (defcustom custom-reset-button-menu nil | |
917 "If non-nil, only show a single reset button in customize buffers. | |
918 This button will have a menu with all three reset operations." | |
919 :type 'boolean | |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
920 :group 'custom-buffer) |
17415 | 921 |
922 (defun custom-buffer-create-internal (options) | |
923 (message "Creating customization buffer...") | |
17334 | 924 (custom-mode) |
925 (widget-insert "This is a customization buffer. | |
926 Push RET or click mouse-2 on the word ") | |
927 (widget-create 'info-link | |
928 :tag "help" | |
929 :help-echo "Read the online help." | |
18032
fd3f0a7e79b9
(custom-face-display-set): Define if not defined.
Richard M. Stallman <rms@gnu.org>
parents:
17800
diff
changeset
|
930 "(emacs)Easy Customization") |
17334 | 931 (widget-insert " for more information.\n\n") |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
932 (message "Creating customization buttons...") |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
933 (widget-create 'push-button |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
934 :tag "Set" |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
935 :help-echo "Set all modifications for this session." |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
936 :action (lambda (widget &optional event) |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
937 (custom-set))) |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
938 (widget-insert " ") |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
939 (widget-create 'push-button |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
940 :tag "Save" |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
941 :help-echo "\ |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
942 Make the modifications default for future sessions." |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
943 :action (lambda (widget &optional event) |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
944 (custom-save))) |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
945 (widget-insert " ") |
18089 | 946 (if custom-reset-button-menu |
947 (widget-create 'push-button | |
948 :tag "Reset" | |
18139
ee3c0d09dcd3
Synched with 1.9908.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18131
diff
changeset
|
949 :help-echo "Show a menu with reset operations." |
18089 | 950 :mouse-down-action (lambda (&rest junk) t) |
951 :action (lambda (widget &optional event) | |
952 (custom-reset event))) | |
953 (widget-create 'push-button | |
954 :tag "Reset" | |
18139
ee3c0d09dcd3
Synched with 1.9908.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18131
diff
changeset
|
955 :help-echo "\ |
ee3c0d09dcd3
Synched with 1.9908.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18131
diff
changeset
|
956 Reset all visible items in this buffer to their current settings." |
18089 | 957 :action 'custom-reset-current) |
958 (widget-insert " ") | |
959 (widget-create 'push-button | |
960 :tag "Reset to Saved" | |
18139
ee3c0d09dcd3
Synched with 1.9908.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18131
diff
changeset
|
961 :help-echo "\ |
ee3c0d09dcd3
Synched with 1.9908.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18131
diff
changeset
|
962 Reset all visible items in this buffer to their saved settings." |
18089 | 963 :action 'custom-reset-saved) |
964 (widget-insert " ") | |
965 (widget-create 'push-button | |
966 :tag "Reset to Standard" | |
18139
ee3c0d09dcd3
Synched with 1.9908.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18131
diff
changeset
|
967 :help-echo "\ |
ee3c0d09dcd3
Synched with 1.9908.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18131
diff
changeset
|
968 Reset all visible items in this buffer to their standard settings." |
18089 | 969 :action 'custom-reset-standard)) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
970 (widget-insert " ") |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
971 (widget-create 'push-button |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
972 :tag "Done" |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
973 :help-echo "Bury the buffer." |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
974 :action (lambda (widget &optional event) |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
975 (bury-buffer))) |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
976 (widget-insert "\n\n") |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
977 (message "Creating customization items...") |
17334 | 978 (setq custom-options |
979 (if (= (length options) 1) | |
980 (mapcar (lambda (entry) | |
981 (widget-create (nth 1 entry) | |
18139
ee3c0d09dcd3
Synched with 1.9908.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18131
diff
changeset
|
982 :documentation-shown t |
17334 | 983 :custom-state 'unknown |
984 :tag (custom-unlispify-tag-name | |
985 (nth 0 entry)) | |
986 :value (nth 0 entry))) | |
987 options) | |
988 (let ((count 0) | |
989 (length (length options))) | |
990 (mapcar (lambda (entry) | |
991 (prog2 | |
992 (message "Creating customization items %2d%%..." | |
993 (/ (* 100.0 count) length)) | |
994 (widget-create (nth 1 entry) | |
995 :tag (custom-unlispify-tag-name | |
996 (nth 0 entry)) | |
997 :value (nth 0 entry)) | |
998 (setq count (1+ count)) | |
999 (unless (eq (preceding-char) ?\n) | |
1000 (widget-insert "\n")) | |
1001 (widget-insert "\n"))) | |
1002 options)))) | |
1003 (unless (eq (preceding-char) ?\n) | |
1004 (widget-insert "\n")) | |
1005 (message "Creating customization magic...") | |
1006 (mapcar 'custom-magic-reset custom-options) | |
1007 (message "Creating customization setup...") | |
1008 (widget-setup) | |
1009 (goto-char (point-min)) | |
1010 (message "Creating customization buffer...done")) | |
1011 | |
1012 ;;; Modification of Basic Widgets. | |
1013 ;; | |
1014 ;; We add extra properties to the basic widgets needed here. This is | |
1015 ;; fine, as long as we are careful to stay within out own namespace. | |
1016 ;; | |
1017 ;; We want simple widgets to be displayed by default, but complex | |
1018 ;; widgets to be hidden. | |
1019 | |
1020 (widget-put (get 'item 'widget-type) :custom-show t) | |
1021 (widget-put (get 'editable-field 'widget-type) | |
1022 :custom-show (lambda (widget value) | |
1023 (let ((pp (pp-to-string value))) | |
1024 (cond ((string-match "\n" pp) | |
1025 nil) | |
1026 ((> (length pp) 40) | |
1027 nil) | |
1028 (t t))))) | |
1029 (widget-put (get 'menu-choice 'widget-type) :custom-show t) | |
1030 | |
1031 ;;; The `custom-manual' Widget. | |
1032 | |
1033 (define-widget 'custom-manual 'info-link | |
1034 "Link to the manual entry for this customization option." | |
1035 :help-echo "Read the manual entry for this option." | |
1036 :tag "Manual") | |
1037 | |
1038 ;;; The `custom-magic' Widget. | |
1039 | |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
1040 (defgroup custom-magic-faces nil |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
1041 "Faces used by the magic button." |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
1042 :group 'custom-faces |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
1043 :group 'custom-buffer) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
1044 |
17334 | 1045 (defface custom-invalid-face '((((class color)) |
1046 (:foreground "yellow" :background "red")) | |
1047 (t | |
1048 (:bold t :italic t :underline t))) | |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
1049 "Face used when the customize item is invalid." |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
1050 :group 'custom-magic-faces) |
17334 | 1051 |
1052 (defface custom-rogue-face '((((class color)) | |
1053 (:foreground "pink" :background "black")) | |
1054 (t | |
1055 (:underline t))) | |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
1056 "Face used when the customize item is not defined for customization." |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
1057 :group 'custom-magic-faces) |
17334 | 1058 |
1059 (defface custom-modified-face '((((class color)) | |
1060 (:foreground "white" :background "blue")) | |
1061 (t | |
1062 (:italic t :bold))) | |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
1063 "Face used when the customize item has been modified." |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
1064 :group 'custom-magic-faces) |
17334 | 1065 |
1066 (defface custom-set-face '((((class color)) | |
1067 (:foreground "blue" :background "white")) | |
1068 (t | |
1069 (:italic t))) | |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
1070 "Face used when the customize item has been set." |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
1071 :group 'custom-magic-faces) |
17334 | 1072 |
1073 (defface custom-changed-face '((((class color)) | |
1074 (:foreground "white" :background "blue")) | |
1075 (t | |
1076 (:italic t))) | |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
1077 "Face used when the customize item has been changed." |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
1078 :group 'custom-magic-faces) |
17334 | 1079 |
1080 (defface custom-saved-face '((t (:underline t))) | |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
1081 "Face used when the customize item has been saved." |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
1082 :group 'custom-magic-faces) |
17334 | 1083 |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1084 (defconst custom-magic-alist '((nil "#" underline "\ |
17334 | 1085 uninitialized, you should not see this.") |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1086 (unknown "?" italic "\ |
17334 | 1087 unknown, you should not see this.") |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1088 (hidden "-" default "\ |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1089 hidden, invoke the dots above to show." "\ |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1090 group now hidden, invoke the dots above to show contents.") |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1091 (invalid "x" custom-invalid-face "\ |
18089 | 1092 the value displayed for this %c is invalid and cannot be set.") |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1093 (modified "*" custom-modified-face "\ |
18089 | 1094 you have edited the value, and can now set the %c." "\ |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1095 you have edited something in this group, and can now set it.") |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1096 (set "+" custom-set-face "\ |
18089 | 1097 you have set this %c, but not saved it." "\ |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1098 something in this group has been set, but not yet saved.") |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1099 (changed ":" custom-changed-face "\ |
18089 | 1100 this %c has been changed outside the customize buffer." "\ |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1101 something in this group has been changed outside customize.") |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1102 (saved "!" custom-saved-face "\ |
18089 | 1103 this %c has been set and saved." "\ |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1104 something in this group has been set and saved.") |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1105 (rogue "@" custom-rogue-face "\ |
18089 | 1106 this %c has not been changed with customize." "\ |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1107 something in this group is not prepared for customization.") |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1108 (standard " " nil "\ |
18089 | 1109 this %c is unchanged from its standard setting." "\ |
18139
ee3c0d09dcd3
Synched with 1.9908.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18131
diff
changeset
|
1110 visible group members are all at standard settings.")) |
17334 | 1111 "Alist of customize option states. |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1112 Each entry is of the form (STATE MAGIC FACE ITEM-DESC [ GROUP-DESC ]), where |
17334 | 1113 |
1114 STATE is one of the following symbols: | |
1115 | |
1116 `nil' | |
1117 For internal use, should never occur. | |
1118 `unknown' | |
1119 For internal use, should never occur. | |
1120 `hidden' | |
1121 This item is not being displayed. | |
1122 `invalid' | |
1123 This item is modified, but has an invalid form. | |
1124 `modified' | |
1125 This item is modified, and has a valid form. | |
1126 `set' | |
1127 This item has been set but not saved. | |
1128 `changed' | |
1129 The current value of this item has been changed temporarily. | |
1130 `saved' | |
1131 This item is marked for saving. | |
1132 `rogue' | |
1133 This item has no customization information. | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1134 `standard' |
17641
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
1135 This item is unchanged from the standard setting. |
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
1136 |
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
1137 MAGIC is a string used to present that state. |
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
1138 |
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
1139 FACE is a face used to present the state. |
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
1140 |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1141 ITEM-DESC is a string describing the state for options. |
17641
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
1142 |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1143 GROUP-DESC is a string describing the state for groups. If this is |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1144 left out, ITEM-DESC will be used. |
17334 | 1145 |
18089 | 1146 The string %c in either description will be replaced with the |
1147 category of the item. These are `group'. `option', and `face'. | |
1148 | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1149 The list should be sorted most significant first.") |
17334 | 1150 |
1151 (defcustom custom-magic-show 'long | |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1152 "If non-nil, show textual description of the state. |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1153 If non-nil and not the symbol `long', only show first word." |
17334 | 1154 :type '(choice (const :tag "no" nil) |
1155 (const short) | |
1156 (const long)) | |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
1157 :group 'custom-buffer) |
17334 | 1158 |
18089 | 1159 (defcustom custom-magic-show-hidden '(option face) |
1160 "Control whether the state button is shown for hidden items. | |
1161 The value should be a list with the custom categories where the state | |
1162 button should be visible. Possible categories are `group', `option', | |
1163 and `face'." | |
1164 :type '(set (const group) (const option) (const face)) | |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
1165 :group 'custom-buffer) |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1166 |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1167 (defcustom custom-magic-show-button nil |
17334 | 1168 "Show a magic button indicating the state of each customization option." |
1169 :type 'boolean | |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
1170 :group 'custom-buffer) |
17334 | 1171 |
1172 (define-widget 'custom-magic 'default | |
1173 "Show and manipulate state for a customization option." | |
1174 :format "%v" | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1175 :action 'widget-parent-action |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1176 :notify 'ignore |
17334 | 1177 :value-get 'ignore |
1178 :value-create 'custom-magic-value-create | |
1179 :value-delete 'widget-children-value-delete) | |
1180 | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1181 (defun widget-magic-mouse-down-action (widget &optional event) |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1182 ;; Non-nil unless hidden. |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1183 (not (eq (widget-get (widget-get (widget-get widget :parent) :parent) |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1184 :custom-state) |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1185 'hidden))) |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1186 |
17334 | 1187 (defun custom-magic-value-create (widget) |
1188 ;; Create compact status report for WIDGET. | |
1189 (let* ((parent (widget-get widget :parent)) | |
1190 (state (widget-get parent :custom-state)) | |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1191 (hidden (eq state 'hidden)) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1192 (entry (assq state custom-magic-alist)) |
17334 | 1193 (magic (nth 1 entry)) |
1194 (face (nth 2 entry)) | |
18089 | 1195 (category (widget-get parent :custom-category)) |
1196 (text (or (and (eq category 'group) | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1197 (nth 4 entry)) |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1198 (nth 3 entry))) |
17334 | 1199 (lisp (eq (widget-get parent :custom-form) 'lisp)) |
1200 children) | |
18089 | 1201 (while (string-match "\\`\\(.*\\)%c\\(.*\\)\\'" text) |
1202 (setq text (concat (match-string 1 text) | |
1203 (symbol-name category) | |
1204 (match-string 2 text)))) | |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1205 (when (and custom-magic-show |
18089 | 1206 (or (not hidden) |
1207 (memq category custom-magic-show-hidden))) | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1208 (insert " ") |
18258
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1209 (when (eq category 'group) |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1210 (insert-char ?\ (1+ (* 2 (widget-get parent :custom-level))))) |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1211 (push (widget-create-child-and-convert |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1212 widget 'choice-item |
18087 | 1213 :help-echo "Change the state of this item." |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1214 :format (if hidden "%t" "%[%t%]") |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1215 :button-prefix 'widget-push-button-prefix |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1216 :button-suffix 'widget-push-button-suffix |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1217 :mouse-down-action 'widget-magic-mouse-down-action |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1218 :tag "State") |
17334 | 1219 children) |
1220 (insert ": ") | |
1221 (if (eq custom-magic-show 'long) | |
1222 (insert text) | |
1223 (insert (symbol-name state))) | |
1224 (when lisp | |
1225 (insert " (lisp)")) | |
1226 (insert "\n")) | |
1227 (when custom-magic-show-button | |
1228 (when custom-magic-show | |
1229 (let ((indent (widget-get parent :indent))) | |
1230 (when indent | |
1231 (insert-char ? indent)))) | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1232 (push (widget-create-child-and-convert |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1233 widget 'choice-item |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1234 :mouse-down-action 'widget-magic-mouse-down-action |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1235 :button-face face |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1236 :button-prefix "" |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1237 :button-suffix "" |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1238 :help-echo "Change the state." |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1239 :format (if hidden "%t" "%[%t%]") |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1240 :tag (if lisp |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1241 (concat "(" magic ")") |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1242 (concat "[" magic "]"))) |
17334 | 1243 children) |
1244 (insert " ")) | |
1245 (widget-put widget :children children))) | |
1246 | |
1247 (defun custom-magic-reset (widget) | |
1248 "Redraw the :custom-magic property of WIDGET." | |
1249 (let ((magic (widget-get widget :custom-magic))) | |
1250 (widget-value-set magic (widget-value magic)))) | |
1251 | |
1252 ;;; The `custom' Widget. | |
1253 | |
1254 (define-widget 'custom 'default | |
1255 "Customize a user option." | |
1256 :convert-widget 'custom-convert-widget | |
1257 :format-handler 'custom-format-handler | |
1258 :notify 'custom-notify | |
1259 :custom-level 1 | |
1260 :custom-state 'hidden | |
1261 :documentation-property 'widget-subclass-responsibility | |
1262 :value-create 'widget-subclass-responsibility | |
1263 :value-delete 'widget-children-value-delete | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1264 :value-get 'widget-value-value-get |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1265 :validate 'widget-children-validate |
17334 | 1266 :match (lambda (widget value) (symbolp value))) |
1267 | |
1268 (defun custom-convert-widget (widget) | |
1269 ;; Initialize :value and :tag from :args in WIDGET. | |
1270 (let ((args (widget-get widget :args))) | |
1271 (when args | |
1272 (widget-put widget :value (widget-apply widget | |
1273 :value-to-internal (car args))) | |
1274 (widget-put widget :tag (custom-unlispify-tag-name (car args))) | |
1275 (widget-put widget :args nil))) | |
1276 widget) | |
1277 | |
1278 (defun custom-format-handler (widget escape) | |
1279 ;; We recognize extra escape sequences. | |
1280 (let* ((buttons (widget-get widget :buttons)) | |
1281 (state (widget-get widget :custom-state)) | |
18258
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1282 (level (widget-get widget :custom-level)) |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1283 (category (widget-get widget :custom-category))) |
17334 | 1284 (cond ((eq escape ?l) |
1285 (when level | |
18087 | 1286 (insert-char ?\ (1- level)) |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1287 (if (eq state 'hidden) |
18087 | 1288 (insert-char ?- (1+ level)) |
1289 (insert "/") | |
1290 (insert-char ?- level)))) | |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1291 ((eq escape ?e) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1292 (when (and level (not (eq state 'hidden))) |
18087 | 1293 (insert "\n") |
1294 (insert-char ?\ (1- level)) | |
1295 (insert "\\") | |
1296 (insert-char ?- level) | |
1297 (insert " " (widget-get widget :tag) " group end ") | |
1298 (insert-char ?- (- 75 (current-column) level)) | |
1299 (insert "/\n"))) | |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1300 ((eq escape ?-) |
18087 | 1301 (when (and level (not (eq state 'hidden))) |
1302 (insert-char ?- (- 76 (current-column) level)) | |
1303 (insert "\\"))) | |
18258
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1304 ((eq escape ?i) |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1305 (insert-char ?\ (+ 1 level level))) |
17334 | 1306 ((eq escape ?L) |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1307 (push (widget-create-child-and-convert |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1308 widget 'visibility |
18258
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1309 :help-echo "Show or hide this group." |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1310 :action 'custom-toggle-parent |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1311 (not (eq state 'hidden))) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1312 buttons)) |
17334 | 1313 ((eq escape ?m) |
1314 (and (eq (preceding-char) ?\n) | |
1315 (widget-get widget :indent) | |
1316 (insert-char ? (widget-get widget :indent))) | |
1317 (let ((magic (widget-create-child-and-convert | |
1318 widget 'custom-magic nil))) | |
1319 (widget-put widget :custom-magic magic) | |
1320 (push magic buttons) | |
1321 (widget-put widget :buttons buttons))) | |
1322 ((eq escape ?a) | |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1323 (unless (eq state 'hidden) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1324 (let* ((symbol (widget-get widget :value)) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1325 (links (get symbol 'custom-links)) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1326 (many (> (length links) 2))) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1327 (when links |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1328 (and (eq (preceding-char) ?\n) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1329 (widget-get widget :indent) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1330 (insert-char ? (widget-get widget :indent))) |
18258
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1331 (when (eq category 'group) |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1332 (insert-char ?\ (1+ (* 2 level)))) |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1333 (insert "See also ") |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1334 (while links |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1335 (push (widget-create-child-and-convert widget (car links)) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1336 buttons) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1337 (setq links (cdr links)) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1338 (cond ((null links) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1339 (insert ".\n")) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1340 ((null (cdr links)) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1341 (if many |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1342 (insert ", and ") |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1343 (insert " and "))) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1344 (t |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1345 (insert ", ")))) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1346 (widget-put widget :buttons buttons))))) |
17334 | 1347 (t |
1348 (widget-default-format-handler widget escape))))) | |
1349 | |
1350 (defun custom-notify (widget &rest args) | |
1351 "Keep track of changes." | |
18090 | 1352 (let ((state (widget-get widget :custom-state))) |
1353 (unless (eq state 'modified) | |
1354 (unless (memq state '(nil unknown hidden)) | |
1355 (widget-put widget :custom-state 'modified)) | |
1356 (custom-magic-reset widget) | |
1357 (apply 'widget-default-notify widget args)))) | |
17334 | 1358 |
1359 (defun custom-redraw (widget) | |
1360 "Redraw WIDGET with current settings." | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1361 (let ((line (count-lines (point-min) (point))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1362 (column (current-column)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1363 (pos (point)) |
17334 | 1364 (from (marker-position (widget-get widget :from))) |
1365 (to (marker-position (widget-get widget :to)))) | |
1366 (save-excursion | |
1367 (widget-value-set widget (widget-value widget)) | |
1368 (custom-redraw-magic widget)) | |
1369 (when (and (>= pos from) (<= pos to)) | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1370 (condition-case nil |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1371 (progn |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1372 (if (> column 0) |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1373 (goto-line line) |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1374 (goto-line (1+ line))) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1375 (move-to-column column)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1376 (error nil))))) |
17334 | 1377 |
1378 (defun custom-redraw-magic (widget) | |
1379 "Redraw WIDGET state with current settings." | |
1380 (while widget | |
1381 (let ((magic (widget-get widget :custom-magic))) | |
1382 (unless magic | |
1383 (debug)) | |
1384 (widget-value-set magic (widget-value magic)) | |
1385 (when (setq widget (widget-get widget :group)) | |
1386 (custom-group-state-update widget)))) | |
1387 (widget-setup)) | |
1388 | |
1389 (defun custom-show (widget value) | |
1390 "Non-nil if WIDGET should be shown with VALUE by default." | |
1391 (let ((show (widget-get widget :custom-show))) | |
1392 (cond ((null show) | |
1393 nil) | |
1394 ((eq t show) | |
1395 t) | |
1396 (t | |
1397 (funcall show widget value))))) | |
1398 | |
17415 | 1399 (defvar custom-load-recursion nil |
1400 "Hack to avoid recursive dependencies.") | |
1401 | |
17334 | 1402 (defun custom-load-symbol (symbol) |
1403 "Load all dependencies for SYMBOL." | |
17415 | 1404 (unless custom-load-recursion |
1405 (let ((custom-load-recursion t) | |
1406 (loads (get symbol 'custom-loads)) | |
1407 load) | |
1408 (while loads | |
1409 (setq load (car loads) | |
1410 loads (cdr loads)) | |
1411 (cond ((symbolp load) | |
1412 (condition-case nil | |
1413 (require load) | |
1414 (error nil))) | |
18059
fef9a6fc0655
(custom-load-symbol): Simplify previous change.
Richard M. Stallman <rms@gnu.org>
parents:
18053
diff
changeset
|
1415 ;; Don't reload a file already loaded. |
18086
dbae3eb8b351
(customize-option): Renamed from custom-variable.
Richard M. Stallman <rms@gnu.org>
parents:
18085
diff
changeset
|
1416 ((assoc load load-history)) |
18059
fef9a6fc0655
(custom-load-symbol): Simplify previous change.
Richard M. Stallman <rms@gnu.org>
parents:
18053
diff
changeset
|
1417 ((assoc (locate-library load) load-history)) |
17415 | 1418 (t |
1419 (condition-case nil | |
18059
fef9a6fc0655
(custom-load-symbol): Simplify previous change.
Richard M. Stallman <rms@gnu.org>
parents:
18053
diff
changeset
|
1420 ;; Without this, we would load cus-edit recursively. |
fef9a6fc0655
(custom-load-symbol): Simplify previous change.
Richard M. Stallman <rms@gnu.org>
parents:
18053
diff
changeset
|
1421 ;; We are still loading it when we call this, |
fef9a6fc0655
(custom-load-symbol): Simplify previous change.
Richard M. Stallman <rms@gnu.org>
parents:
18053
diff
changeset
|
1422 ;; and it is not in load-history yet. |
fef9a6fc0655
(custom-load-symbol): Simplify previous change.
Richard M. Stallman <rms@gnu.org>
parents:
18053
diff
changeset
|
1423 (or (equal load "cus-edit") |
fef9a6fc0655
(custom-load-symbol): Simplify previous change.
Richard M. Stallman <rms@gnu.org>
parents:
18053
diff
changeset
|
1424 (load-library load)) |
17415 | 1425 (error nil)))))))) |
17334 | 1426 |
1427 (defun custom-load-widget (widget) | |
1428 "Load all dependencies for WIDGET." | |
1429 (custom-load-symbol (widget-value widget))) | |
1430 | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1431 (defun custom-toggle-hide (widget) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1432 "Toggle visibility of WIDGET." |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1433 (let ((state (widget-get widget :custom-state))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1434 (cond ((memq state '(invalid modified)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1435 (error "There are unset changes")) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1436 ((eq state 'hidden) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1437 (widget-put widget :custom-state 'unknown)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1438 (t |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1439 (widget-put widget :documentation-shown nil) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1440 (widget-put widget :custom-state 'hidden))) |
18258
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1441 (custom-redraw widget) |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1442 (widget-setup))) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1443 |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1444 (defun custom-toggle-parent (widget &rest ignore) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1445 "Toggle visibility of parent to WIDGET." |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1446 (custom-toggle-hide (widget-get widget :parent))) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1447 |
17334 | 1448 ;;; The `custom-variable' Widget. |
1449 | |
1450 (defface custom-variable-sample-face '((t (:underline t))) | |
1451 "Face used for unpushable variable tags." | |
17415 | 1452 :group 'custom-faces) |
17334 | 1453 |
1454 (defface custom-variable-button-face '((t (:underline t :bold t))) | |
1455 "Face used for pushable variable tags." | |
17415 | 1456 :group 'custom-faces) |
17334 | 1457 |
1458 (define-widget 'custom-variable 'custom | |
1459 "Customize variable." | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1460 :format "%v%m%h%a" |
17334 | 1461 :help-echo "Set or reset this variable." |
1462 :documentation-property 'variable-documentation | |
18089 | 1463 :custom-category 'option |
17334 | 1464 :custom-state nil |
1465 :custom-menu 'custom-variable-menu-create | |
1466 :custom-form 'edit | |
1467 :value-create 'custom-variable-value-create | |
1468 :action 'custom-variable-action | |
1469 :custom-set 'custom-variable-set | |
1470 :custom-save 'custom-variable-save | |
1471 :custom-reset-current 'custom-redraw | |
1472 :custom-reset-saved 'custom-variable-reset-saved | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1473 :custom-reset-standard 'custom-variable-reset-standard) |
17334 | 1474 |
17415 | 1475 (defun custom-variable-type (symbol) |
1476 "Return a widget suitable for editing the value of SYMBOL. | |
1477 If SYMBOL has a `custom-type' property, use that. | |
1478 Otherwise, look up symbol in `custom-guess-type-alist'." | |
1479 (let* ((type (or (get symbol 'custom-type) | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1480 (and (not (get symbol 'standard-value)) |
17415 | 1481 (custom-guess-type symbol)) |
1482 'sexp)) | |
1483 (options (get symbol 'custom-options)) | |
1484 (tmp (if (listp type) | |
17534
a5cf59eee84b
(custom-variable-type): Use copy-sequence, not copy-list.
Richard M. Stallman <rms@gnu.org>
parents:
17521
diff
changeset
|
1485 (copy-sequence type) |
17415 | 1486 (list type)))) |
1487 (when options | |
1488 (widget-put tmp :options options)) | |
1489 tmp)) | |
1490 | |
17334 | 1491 (defun custom-variable-value-create (widget) |
1492 "Here is where you edit the variables value." | |
1493 (custom-load-widget widget) | |
1494 (let* ((buttons (widget-get widget :buttons)) | |
1495 (children (widget-get widget :children)) | |
1496 (form (widget-get widget :custom-form)) | |
1497 (state (widget-get widget :custom-state)) | |
1498 (symbol (widget-get widget :value)) | |
1499 (tag (widget-get widget :tag)) | |
17415 | 1500 (type (custom-variable-type symbol)) |
17334 | 1501 (conv (widget-convert type)) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1502 (get (or (get symbol 'custom-get) 'default-value)) |
17334 | 1503 (value (if (default-boundp symbol) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1504 (funcall get symbol) |
17334 | 1505 (widget-get conv :value)))) |
1506 ;; If the widget is new, the child determine whether it is hidden. | |
1507 (cond (state) | |
1508 ((custom-show type value) | |
1509 (setq state 'unknown)) | |
1510 (t | |
1511 (setq state 'hidden))) | |
1512 ;; If we don't know the state, see if we need to edit it in lisp form. | |
1513 (when (eq state 'unknown) | |
1514 (unless (widget-apply conv :match value) | |
1515 ;; (widget-apply (widget-convert type) :match value) | |
1516 (setq form 'lisp))) | |
1517 ;; Now we can create the child widget. | |
1518 (cond ((eq state 'hidden) | |
1519 ;; Indicate hidden value. | |
1520 (push (widget-create-child-and-convert | |
1521 widget 'item | |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1522 :format "%{%t%}: " |
17334 | 1523 :sample-face 'custom-variable-sample-face |
1524 :tag tag | |
1525 :parent widget) | |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1526 buttons) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1527 (push (widget-create-child-and-convert |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1528 widget 'visibility |
18258
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1529 :help-echo "Show the value of this option." |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1530 :action 'custom-toggle-parent |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1531 nil) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1532 buttons)) |
17334 | 1533 ((eq form 'lisp) |
1534 ;; In lisp mode edit the saved value when possible. | |
1535 (let* ((value (cond ((get symbol 'saved-value) | |
1536 (car (get symbol 'saved-value))) | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1537 ((get symbol 'standard-value) |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1538 (car (get symbol 'standard-value))) |
17334 | 1539 ((default-boundp symbol) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1540 (custom-quote (funcall get symbol))) |
17334 | 1541 (t |
1542 (custom-quote (widget-get conv :value)))))) | |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1543 (insert (symbol-name symbol) ": ") |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1544 (push (widget-create-child-and-convert |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1545 widget 'visibility |
18258
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1546 :help-echo "Hide the value of this option." |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1547 :action 'custom-toggle-parent |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1548 t) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1549 buttons) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1550 (insert " ") |
17334 | 1551 (push (widget-create-child-and-convert |
1552 widget 'sexp | |
1553 :button-face 'custom-variable-button-face | |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1554 :format "%v" |
17334 | 1555 :tag (symbol-name symbol) |
1556 :parent widget | |
1557 :value value) | |
1558 children))) | |
1559 (t | |
1560 ;; Edit mode. | |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1561 (let* ((format (widget-get type :format)) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1562 tag-format value-format) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1563 (unless (string-match ":" format) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1564 (error "Bad format.")) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1565 (setq tag-format (substring format 0 (match-end 0))) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1566 (setq value-format (substring format (match-end 0))) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1567 (push (widget-create-child-and-convert |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1568 widget 'item |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1569 :format tag-format |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1570 :action 'custom-tag-action |
18258
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1571 :help-echo "Change value of this option." |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1572 :mouse-down-action 'custom-tag-mouse-down-action |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1573 :button-face 'custom-variable-button-face |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1574 :sample-face 'custom-variable-sample-face |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1575 tag) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1576 buttons) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1577 (insert " ") |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1578 (push (widget-create-child-and-convert |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1579 widget 'visibility |
18258
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1580 :help-echo "Hide the value of this option." |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1581 :action 'custom-toggle-parent |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1582 t) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1583 buttons) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1584 (push (widget-create-child-and-convert |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1585 widget type |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1586 :format value-format |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1587 :value value) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1588 children)))) |
17334 | 1589 ;; Now update the state. |
1590 (unless (eq (preceding-char) ?\n) | |
1591 (widget-insert "\n")) | |
1592 (if (eq state 'hidden) | |
1593 (widget-put widget :custom-state state) | |
1594 (custom-variable-state-set widget)) | |
1595 (widget-put widget :custom-form form) | |
1596 (widget-put widget :buttons buttons) | |
1597 (widget-put widget :children children))) | |
1598 | |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1599 (defun custom-tag-action (widget &rest args) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1600 "Pass :action to first child of WIDGET's parent." |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1601 (apply 'widget-apply (car (widget-get (widget-get widget :parent) :children)) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1602 :action args)) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1603 |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1604 (defun custom-tag-mouse-down-action (widget &rest args) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1605 "Pass :mouse-down-action to first child of WIDGET's parent." |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1606 (apply 'widget-apply (car (widget-get (widget-get widget :parent) :children)) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1607 :mouse-down-action args)) |
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1608 |
17334 | 1609 (defun custom-variable-state-set (widget) |
1610 "Set the state of WIDGET." | |
1611 (let* ((symbol (widget-value widget)) | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1612 (get (or (get symbol 'custom-get) 'default-value)) |
17334 | 1613 (value (if (default-boundp symbol) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1614 (funcall get symbol) |
17334 | 1615 (widget-get widget :value))) |
1616 tmp | |
1617 (state (cond ((setq tmp (get symbol 'customized-value)) | |
1618 (if (condition-case nil | |
1619 (equal value (eval (car tmp))) | |
1620 (error nil)) | |
1621 'set | |
1622 'changed)) | |
1623 ((setq tmp (get symbol 'saved-value)) | |
1624 (if (condition-case nil | |
1625 (equal value (eval (car tmp))) | |
1626 (error nil)) | |
1627 'saved | |
1628 'changed)) | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1629 ((setq tmp (get symbol 'standard-value)) |
17334 | 1630 (if (condition-case nil |
1631 (equal value (eval (car tmp))) | |
1632 (error nil)) | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1633 'standard |
17334 | 1634 'changed)) |
1635 (t 'rogue)))) | |
1636 (widget-put widget :custom-state state))) | |
1637 | |
1638 (defvar custom-variable-menu | |
18258
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1639 '(("Set" custom-variable-set |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1640 (lambda (widget) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1641 (eq (widget-get widget :custom-state) 'modified))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1642 ("Save" custom-variable-save |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1643 (lambda (widget) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1644 (memq (widget-get widget :custom-state) '(modified set changed rogue)))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1645 ("Reset to Current" custom-redraw |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1646 (lambda (widget) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1647 (and (default-boundp (widget-value widget)) |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1648 (memq (widget-get widget :custom-state) '(modified changed))))) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1649 ("Reset to Saved" custom-variable-reset-saved |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1650 (lambda (widget) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1651 (and (get (widget-value widget) 'saved-value) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1652 (memq (widget-get widget :custom-state) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1653 '(modified set changed rogue))))) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1654 ("Reset to Standard Settings" custom-variable-reset-standard |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1655 (lambda (widget) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1656 (and (get (widget-value widget) 'standard-value) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1657 (memq (widget-get widget :custom-state) |
18258
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1658 '(modified set changed saved rogue))))) |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1659 ("---" ignore ignore) |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1660 ("Don't show as Lisp expression" custom-variable-edit |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1661 (lambda (widget) |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1662 (not (eq (widget-get widget :custom-form) 'edit)))) |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1663 ("Show as Lisp expression" custom-variable-edit-lisp |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1664 (lambda (widget) |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1665 (not (eq (widget-get widget :custom-form) 'lisp))))) |
17334 | 1666 "Alist of actions for the `custom-variable' widget. |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1667 Each entry has the form (NAME ACTION FILTER) where NAME is the name of |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1668 the menu entry, ACTION is the function to call on the widget when the |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1669 menu is selected, and FILTER is a predicate which takes a `custom-variable' |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1670 widget as an argument, and returns non-nil if ACTION is valid on that |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1671 widget. If FILTER is nil, ACTION is always valid.") |
17334 | 1672 |
1673 (defun custom-variable-action (widget &optional event) | |
1674 "Show the menu for `custom-variable' WIDGET. | |
1675 Optional EVENT is the location for the menu." | |
1676 (if (eq (widget-get widget :custom-state) 'hidden) | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1677 (custom-toggle-hide widget) |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1678 (unless (eq (widget-get widget :custom-state) 'modified) |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1679 (custom-variable-state-set widget)) |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1680 (custom-redraw-magic widget) |
17334 | 1681 (let* ((completion-ignore-case t) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1682 (answer (widget-choose (concat "Operation on " |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1683 (custom-unlispify-tag-name |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1684 (widget-get widget :value))) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1685 (custom-menu-filter custom-variable-menu |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1686 widget) |
17334 | 1687 event))) |
1688 (if answer | |
1689 (funcall answer widget))))) | |
1690 | |
1691 (defun custom-variable-edit (widget) | |
1692 "Edit value of WIDGET." | |
1693 (widget-put widget :custom-state 'unknown) | |
1694 (widget-put widget :custom-form 'edit) | |
1695 (custom-redraw widget)) | |
1696 | |
1697 (defun custom-variable-edit-lisp (widget) | |
1698 "Edit the lisp representation of the value of WIDGET." | |
1699 (widget-put widget :custom-state 'unknown) | |
1700 (widget-put widget :custom-form 'lisp) | |
1701 (custom-redraw widget)) | |
1702 | |
1703 (defun custom-variable-set (widget) | |
1704 "Set the current value for the variable being edited by WIDGET." | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1705 (let* ((form (widget-get widget :custom-form)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1706 (state (widget-get widget :custom-state)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1707 (child (car (widget-get widget :children))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1708 (symbol (widget-value widget)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1709 (set (or (get symbol 'custom-set) 'set-default)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1710 val) |
17334 | 1711 (cond ((eq state 'hidden) |
1712 (error "Cannot set hidden variable.")) | |
1713 ((setq val (widget-apply child :validate)) | |
1714 (goto-char (widget-get val :from)) | |
1715 (error "%s" (widget-get val :error))) | |
1716 ((eq form 'lisp) | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1717 (funcall set symbol (eval (setq val (widget-value child)))) |
17334 | 1718 (put symbol 'customized-value (list val))) |
1719 (t | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1720 (funcall set symbol (setq val (widget-value child))) |
17334 | 1721 (put symbol 'customized-value (list (custom-quote val))))) |
1722 (custom-variable-state-set widget) | |
1723 (custom-redraw-magic widget))) | |
1724 | |
1725 (defun custom-variable-save (widget) | |
1726 "Set the default value for the variable being edited by WIDGET." | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1727 (let* ((form (widget-get widget :custom-form)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1728 (state (widget-get widget :custom-state)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1729 (child (car (widget-get widget :children))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1730 (symbol (widget-value widget)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1731 (set (or (get symbol 'custom-set) 'set-default)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1732 val) |
17334 | 1733 (cond ((eq state 'hidden) |
1734 (error "Cannot set hidden variable.")) | |
1735 ((setq val (widget-apply child :validate)) | |
1736 (goto-char (widget-get val :from)) | |
1737 (error "%s" (widget-get val :error))) | |
1738 ((eq form 'lisp) | |
1739 (put symbol 'saved-value (list (widget-value child))) | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1740 (funcall set symbol (eval (widget-value child)))) |
17334 | 1741 (t |
1742 (put symbol | |
1743 'saved-value (list (custom-quote (widget-value | |
1744 child)))) | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1745 (funcall set symbol (widget-value child)))) |
17334 | 1746 (put symbol 'customized-value nil) |
1747 (custom-save-all) | |
1748 (custom-variable-state-set widget) | |
1749 (custom-redraw-magic widget))) | |
1750 | |
1751 (defun custom-variable-reset-saved (widget) | |
1752 "Restore the saved value for the variable being edited by WIDGET." | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1753 (let* ((symbol (widget-value widget)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1754 (set (or (get symbol 'custom-set) 'set-default))) |
17334 | 1755 (if (get symbol 'saved-value) |
1756 (condition-case nil | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1757 (funcall set symbol (eval (car (get symbol 'saved-value)))) |
17334 | 1758 (error nil)) |
1759 (error "No saved value for %s" symbol)) | |
1760 (put symbol 'customized-value nil) | |
1761 (widget-put widget :custom-state 'unknown) | |
1762 (custom-redraw widget))) | |
1763 | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1764 (defun custom-variable-reset-standard (widget) |
17641
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
1765 "Restore the standard setting for the variable being edited by WIDGET." |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1766 (let* ((symbol (widget-value widget)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1767 (set (or (get symbol 'custom-set) 'set-default))) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1768 (if (get symbol 'standard-value) |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1769 (funcall set symbol (eval (car (get symbol 'standard-value)))) |
17641
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
1770 (error "No standard setting known for %S" symbol)) |
17334 | 1771 (put symbol 'customized-value nil) |
1772 (when (get symbol 'saved-value) | |
1773 (put symbol 'saved-value nil) | |
1774 (custom-save-all)) | |
1775 (widget-put widget :custom-state 'unknown) | |
1776 (custom-redraw widget))) | |
1777 | |
1778 ;;; The `custom-face-edit' Widget. | |
1779 | |
1780 (define-widget 'custom-face-edit 'checklist | |
1781 "Edit face attributes." | |
1782 :format "%t: %v" | |
1783 :tag "Attributes" | |
1784 :extra-offset 12 | |
1785 :button-args '(:help-echo "Control whether this attribute have any effect.") | |
1786 :args (mapcar (lambda (att) | |
1787 (list 'group | |
1788 :inline t | |
1789 :sibling-args (widget-get (nth 1 att) :sibling-args) | |
1790 (list 'const :format "" :value (nth 0 att)) | |
1791 (nth 1 att))) | |
1792 custom-face-attributes)) | |
1793 | |
1794 ;;; The `custom-display' Widget. | |
1795 | |
1796 (define-widget 'custom-display 'menu-choice | |
1797 "Select a display type." | |
1798 :tag "Display" | |
1799 :value t | |
1800 :help-echo "Specify frames where the face attributes should be used." | |
1801 :args '((const :tag "all" t) | |
1802 (checklist | |
1803 :offset 0 | |
1804 :extra-offset 9 | |
1805 :args ((group :sibling-args (:help-echo "\ | |
1806 Only match the specified window systems.") | |
1807 (const :format "Type: " | |
1808 type) | |
1809 (checklist :inline t | |
1810 :offset 0 | |
1811 (const :format "X " | |
1812 :sibling-args (:help-echo "\ | |
1813 The X11 Window System.") | |
1814 x) | |
1815 (const :format "PM " | |
1816 :sibling-args (:help-echo "\ | |
1817 OS/2 Presentation Manager.") | |
1818 pm) | |
1819 (const :format "Win32 " | |
1820 :sibling-args (:help-echo "\ | |
1821 Windows NT/95/97.") | |
1822 win32) | |
1823 (const :format "DOS " | |
1824 :sibling-args (:help-echo "\ | |
1825 Plain MS-DOS.") | |
1826 pc) | |
1827 (const :format "TTY%n" | |
1828 :sibling-args (:help-echo "\ | |
1829 Plain text terminals.") | |
1830 tty))) | |
1831 (group :sibling-args (:help-echo "\ | |
1832 Only match the frames with the specified color support.") | |
1833 (const :format "Class: " | |
1834 class) | |
1835 (checklist :inline t | |
1836 :offset 0 | |
1837 (const :format "Color " | |
1838 :sibling-args (:help-echo "\ | |
1839 Match color frames.") | |
1840 color) | |
1841 (const :format "Grayscale " | |
1842 :sibling-args (:help-echo "\ | |
1843 Match grayscale frames.") | |
1844 grayscale) | |
1845 (const :format "Monochrome%n" | |
1846 :sibling-args (:help-echo "\ | |
1847 Match frames with no color support.") | |
1848 mono))) | |
1849 (group :sibling-args (:help-echo "\ | |
1850 Only match frames with the specified intensity.") | |
1851 (const :format "\ | |
1852 Background brightness: " | |
1853 background) | |
1854 (checklist :inline t | |
1855 :offset 0 | |
1856 (const :format "Light " | |
1857 :sibling-args (:help-echo "\ | |
1858 Match frames with light backgrounds.") | |
1859 light) | |
1860 (const :format "Dark\n" | |
1861 :sibling-args (:help-echo "\ | |
1862 Match frames with dark backgrounds.") | |
1863 dark))))))) | |
1864 | |
1865 ;;; The `custom-face' Widget. | |
1866 | |
1867 (defface custom-face-tag-face '((t (:underline t))) | |
1868 "Face used for face tags." | |
17415 | 1869 :group 'custom-faces) |
17334 | 1870 |
1871 (define-widget 'custom-face 'custom | |
1872 "Customize face." | |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1873 :format "%{%t%}: %s %L\n%m%h%a%v" |
17334 | 1874 :format-handler 'custom-face-format-handler |
1875 :sample-face 'custom-face-tag-face | |
1876 :help-echo "Set or reset this face." | |
1877 :documentation-property '(lambda (face) | |
1878 (face-doc-string face)) | |
1879 :value-create 'custom-face-value-create | |
1880 :action 'custom-face-action | |
18089 | 1881 :custom-category 'face |
17334 | 1882 :custom-form 'selected |
1883 :custom-set 'custom-face-set | |
1884 :custom-save 'custom-face-save | |
1885 :custom-reset-current 'custom-redraw | |
1886 :custom-reset-saved 'custom-face-reset-saved | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1887 :custom-reset-standard 'custom-face-reset-standard |
17334 | 1888 :custom-menu 'custom-face-menu-create) |
1889 | |
1890 (defun custom-face-format-handler (widget escape) | |
1891 ;; We recognize extra escape sequences. | |
1892 (let (child | |
1893 (symbol (widget-get widget :value))) | |
1894 (cond ((eq escape ?s) | |
1895 (and (string-match "XEmacs" emacs-version) | |
1896 ;; XEmacs cannot display initialized faces. | |
1897 (not (custom-facep symbol)) | |
1898 (copy-face 'custom-face-empty symbol)) | |
1899 (setq child (widget-create-child-and-convert | |
1900 widget 'item | |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
1901 :format "(%{%t%})" |
17334 | 1902 :sample-face symbol |
1903 :tag "sample"))) | |
1904 (t | |
1905 (custom-format-handler widget escape))) | |
1906 (when child | |
1907 (widget-put widget | |
1908 :buttons (cons child (widget-get widget :buttons)))))) | |
1909 | |
1910 (define-widget 'custom-face-all 'editable-list | |
1911 "An editable list of display specifications and attributes." | |
1912 :entry-format "%i %d %v" | |
1913 :insert-button-args '(:help-echo "Insert new display specification here.") | |
1914 :append-button-args '(:help-echo "Append new display specification here.") | |
1915 :delete-button-args '(:help-echo "Delete this display specification.") | |
1916 :args '((group :format "%v" custom-display custom-face-edit))) | |
1917 | |
1918 (defconst custom-face-all (widget-convert 'custom-face-all) | |
1919 "Converted version of the `custom-face-all' widget.") | |
1920 | |
1921 (define-widget 'custom-display-unselected 'item | |
1922 "A display specification that doesn't match the selected display." | |
1923 :match 'custom-display-unselected-match) | |
1924 | |
1925 (defun custom-display-unselected-match (widget value) | |
1926 "Non-nil if VALUE is an unselected display specification." | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1927 (not (face-spec-set-match-display value (selected-frame)))) |
17334 | 1928 |
1929 (define-widget 'custom-face-selected 'group | |
1930 "Edit the attributes of the selected display in a face specification." | |
1931 :args '((repeat :format "" | |
1932 :inline t | |
1933 (group custom-display-unselected sexp)) | |
1934 (group (sexp :format "") custom-face-edit) | |
1935 (repeat :format "" | |
1936 :inline t | |
1937 sexp))) | |
1938 | |
1939 (defconst custom-face-selected (widget-convert 'custom-face-selected) | |
1940 "Converted version of the `custom-face-selected' widget.") | |
1941 | |
1942 (defun custom-face-value-create (widget) | |
1943 ;; Create a list of the display specifications. | |
1944 (unless (eq (preceding-char) ?\n) | |
1945 (insert "\n")) | |
1946 (when (not (eq (widget-get widget :custom-state) 'hidden)) | |
1947 (message "Creating face editor...") | |
1948 (custom-load-widget widget) | |
1949 (let* ((symbol (widget-value widget)) | |
1950 (spec (or (get symbol 'saved-face) | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
1951 (get symbol 'face-defface-spec) |
17334 | 1952 ;; Attempt to construct it. |
1953 (list (list t (custom-face-attributes-get | |
1954 symbol (selected-frame)))))) | |
1955 (form (widget-get widget :custom-form)) | |
1956 (indent (widget-get widget :indent)) | |
1957 (edit (widget-create-child-and-convert | |
1958 widget | |
1959 (cond ((and (eq form 'selected) | |
1960 (widget-apply custom-face-selected :match spec)) | |
1961 (when indent (insert-char ?\ indent)) | |
1962 'custom-face-selected) | |
1963 ((and (not (eq form 'lisp)) | |
1964 (widget-apply custom-face-all :match spec)) | |
1965 'custom-face-all) | |
1966 (t | |
1967 (when indent (insert-char ?\ indent)) | |
1968 'sexp)) | |
1969 :value spec))) | |
1970 (custom-face-state-set widget) | |
1971 (widget-put widget :children (list edit))) | |
1972 (message "Creating face editor...done"))) | |
1973 | |
1974 (defvar custom-face-menu | |
18258
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1975 '(("Set" custom-face-set) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1976 ("Save" custom-face-save) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1977 ("Reset to Saved" custom-face-reset-saved |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1978 (lambda (widget) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1979 (get (widget-value widget) 'saved-face))) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
1980 ("Reset to Standard Setting" custom-face-reset-standard |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1981 (lambda (widget) |
18258
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1982 (get (widget-value widget) 'face-defface-spec))) |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1983 ("---" ignore ignore) |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1984 ("Show all display specs" custom-face-edit-all |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1985 (lambda (widget) |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1986 (not (eq (widget-get widget :custom-form) 'all)))) |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1987 ("Just current attributes" custom-face-edit-selected |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1988 (lambda (widget) |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1989 (not (eq (widget-get widget :custom-form) 'selected)))) |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1990 ("Show as Lisp expression" custom-face-edit-lisp |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1991 (lambda (widget) |
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
1992 (not (eq (widget-get widget :custom-form) 'lisp))))) |
17334 | 1993 "Alist of actions for the `custom-face' widget. |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1994 Each entry has the form (NAME ACTION FILTER) where NAME is the name of |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1995 the menu entry, ACTION is the function to call on the widget when the |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1996 menu is selected, and FILTER is a predicate which takes a `custom-face' |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1997 widget as an argument, and returns non-nil if ACTION is valid on that |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
1998 widget. If FILTER is nil, ACTION is always valid.") |
17334 | 1999 |
2000 (defun custom-face-edit-selected (widget) | |
2001 "Edit selected attributes of the value of WIDGET." | |
2002 (widget-put widget :custom-state 'unknown) | |
2003 (widget-put widget :custom-form 'selected) | |
2004 (custom-redraw widget)) | |
2005 | |
2006 (defun custom-face-edit-all (widget) | |
2007 "Edit all attributes of the value of WIDGET." | |
2008 (widget-put widget :custom-state 'unknown) | |
2009 (widget-put widget :custom-form 'all) | |
2010 (custom-redraw widget)) | |
2011 | |
2012 (defun custom-face-edit-lisp (widget) | |
2013 "Edit the lisp representation of the value of WIDGET." | |
2014 (widget-put widget :custom-state 'unknown) | |
2015 (widget-put widget :custom-form 'lisp) | |
2016 (custom-redraw widget)) | |
2017 | |
2018 (defun custom-face-state-set (widget) | |
2019 "Set the state of WIDGET." | |
2020 (let ((symbol (widget-value widget))) | |
2021 (widget-put widget :custom-state (cond ((get symbol 'customized-face) | |
2022 'set) | |
2023 ((get symbol 'saved-face) | |
2024 'saved) | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
2025 ((get symbol 'face-defface-spec) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2026 'standard) |
17334 | 2027 (t |
2028 'rogue))))) | |
2029 | |
2030 (defun custom-face-action (widget &optional event) | |
2031 "Show the menu for `custom-face' WIDGET. | |
2032 Optional EVENT is the location for the menu." | |
2033 (if (eq (widget-get widget :custom-state) 'hidden) | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2034 (custom-toggle-hide widget) |
17334 | 2035 (let* ((completion-ignore-case t) |
2036 (symbol (widget-get widget :value)) | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2037 (answer (widget-choose (concat "Operation on " |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2038 (custom-unlispify-tag-name symbol)) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2039 (custom-menu-filter custom-face-menu |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2040 widget) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2041 event))) |
17334 | 2042 (if answer |
2043 (funcall answer widget))))) | |
2044 | |
2045 (defun custom-face-set (widget) | |
2046 "Make the face attributes in WIDGET take effect." | |
2047 (let* ((symbol (widget-value widget)) | |
2048 (child (car (widget-get widget :children))) | |
2049 (value (widget-value child))) | |
2050 (put symbol 'customized-face value) | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2051 (face-spec-set symbol value) |
17334 | 2052 (custom-face-state-set widget) |
2053 (custom-redraw-magic widget))) | |
2054 | |
2055 (defun custom-face-save (widget) | |
2056 "Make the face attributes in WIDGET default." | |
2057 (let* ((symbol (widget-value widget)) | |
2058 (child (car (widget-get widget :children))) | |
2059 (value (widget-value child))) | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2060 (face-spec-set symbol value) |
17334 | 2061 (put symbol 'saved-face value) |
2062 (put symbol 'customized-face nil) | |
2063 (custom-face-state-set widget) | |
2064 (custom-redraw-magic widget))) | |
2065 | |
2066 (defun custom-face-reset-saved (widget) | |
2067 "Restore WIDGET to the face's default attributes." | |
2068 (let* ((symbol (widget-value widget)) | |
2069 (child (car (widget-get widget :children))) | |
2070 (value (get symbol 'saved-face))) | |
2071 (unless value | |
2072 (error "No saved value for this face")) | |
2073 (put symbol 'customized-face nil) | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2074 (face-spec-set symbol value) |
17334 | 2075 (widget-value-set child value) |
2076 (custom-face-state-set widget) | |
2077 (custom-redraw-magic widget))) | |
2078 | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2079 (defun custom-face-reset-standard (widget) |
17641
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
2080 "Restore WIDGET to the face's standard settings." |
17334 | 2081 (let* ((symbol (widget-value widget)) |
2082 (child (car (widget-get widget :children))) | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
2083 (value (get symbol 'face-defface-spec))) |
17334 | 2084 (unless value |
17641
4650d25e48f6
Say "standard settings" instead of "factory settings".
Richard M. Stallman <rms@gnu.org>
parents:
17550
diff
changeset
|
2085 (error "No standard setting for this face")) |
17334 | 2086 (put symbol 'customized-face nil) |
2087 (when (get symbol 'saved-face) | |
2088 (put symbol 'saved-face nil) | |
2089 (custom-save-all)) | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2090 (face-spec-set symbol value) |
17334 | 2091 (widget-value-set child value) |
2092 (custom-face-state-set widget) | |
2093 (custom-redraw-magic widget))) | |
2094 | |
2095 ;;; The `face' Widget. | |
2096 | |
2097 (define-widget 'face 'default | |
2098 "Select and customize a face." | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
2099 :convert-widget 'widget-value-convert-widget |
17334 | 2100 :format "%[%t%]: %v" |
2101 :tag "Face" | |
2102 :value 'default | |
2103 :value-create 'widget-face-value-create | |
2104 :value-delete 'widget-face-value-delete | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
2105 :value-get 'widget-value-value-get |
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
2106 :validate 'widget-children-validate |
17334 | 2107 :action 'widget-face-action |
2108 :match '(lambda (widget value) (symbolp value))) | |
2109 | |
2110 (defun widget-face-value-create (widget) | |
2111 ;; Create a `custom-face' child. | |
2112 (let* ((symbol (widget-value widget)) | |
2113 (child (widget-create-child-and-convert | |
2114 widget 'custom-face | |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
2115 :format "%t %s %L\n%m%h%v" |
17334 | 2116 :custom-level nil |
2117 :value symbol))) | |
2118 (custom-magic-reset child) | |
2119 (setq custom-options (cons child custom-options)) | |
2120 (widget-put widget :children (list child)))) | |
2121 | |
2122 (defun widget-face-value-delete (widget) | |
2123 ;; Remove the child from the options. | |
2124 (let ((child (car (widget-get widget :children)))) | |
2125 (setq custom-options (delq child custom-options)) | |
2126 (widget-children-value-delete widget))) | |
2127 | |
2128 (defvar face-history nil | |
2129 "History of entered face names.") | |
2130 | |
2131 (defun widget-face-action (widget &optional event) | |
2132 "Prompt for a face." | |
2133 (let ((answer (completing-read "Face: " | |
2134 (mapcar (lambda (face) | |
2135 (list (symbol-name face))) | |
2136 (face-list)) | |
2137 nil nil nil | |
2138 'face-history))) | |
2139 (unless (zerop (length answer)) | |
2140 (widget-value-set widget (intern answer)) | |
2141 (widget-apply widget :notify widget event) | |
2142 (widget-setup)))) | |
2143 | |
2144 ;;; The `hook' Widget. | |
2145 | |
2146 (define-widget 'hook 'list | |
2147 "A emacs lisp hook" | |
2148 :convert-widget 'custom-hook-convert-widget | |
2149 :tag "Hook") | |
2150 | |
2151 (defun custom-hook-convert-widget (widget) | |
2152 ;; Handle `:custom-options'. | |
2153 (let* ((options (widget-get widget :options)) | |
2154 (other `(editable-list :inline t | |
2155 :entry-format "%i %d%v" | |
2156 (function :format " %v"))) | |
2157 (args (if options | |
2158 (list `(checklist :inline t | |
2159 ,@(mapcar (lambda (entry) | |
2160 `(function-item ,entry)) | |
2161 options)) | |
2162 other) | |
2163 (list other)))) | |
2164 (widget-put widget :args args) | |
2165 widget)) | |
2166 | |
2167 ;;; The `custom-group' Widget. | |
2168 | |
2169 (defcustom custom-group-tag-faces '(custom-group-tag-face-1) | |
2170 ;; In XEmacs, this ought to play games with font size. | |
2171 "Face used for group tags. | |
2172 The first member is used for level 1 groups, the second for level 2, | |
2173 and so forth. The remaining group tags are shown with | |
2174 `custom-group-tag-face'." | |
2175 :type '(repeat face) | |
17415 | 2176 :group 'custom-faces) |
17334 | 2177 |
2178 (defface custom-group-tag-face-1 '((((class color) | |
2179 (background dark)) | |
2180 (:foreground "pink" :underline t)) | |
2181 (((class color) | |
2182 (background light)) | |
2183 (:foreground "red" :underline t)) | |
2184 (t (:underline t))) | |
2185 "Face used for group tags.") | |
2186 | |
2187 (defface custom-group-tag-face '((((class color) | |
2188 (background dark)) | |
2189 (:foreground "light blue" :underline t)) | |
2190 (((class color) | |
2191 (background light)) | |
2192 (:foreground "blue" :underline t)) | |
2193 (t (:underline t))) | |
2194 "Face used for low level group tags." | |
17415 | 2195 :group 'custom-faces) |
17334 | 2196 |
2197 (define-widget 'custom-group 'custom | |
2198 "Customize group." | |
18258
e83bc8150072
Synched with 1.9920.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18244
diff
changeset
|
2199 :format "%l %{%t%} group: %L %-\n%m%i%h%a%v%e" |
17334 | 2200 :sample-face-get 'custom-group-sample-face-get |
2201 :documentation-property 'group-documentation | |
2202 :help-echo "Set or reset all members of this group." | |
2203 :value-create 'custom-group-value-create | |
2204 :action 'custom-group-action | |
18089 | 2205 :custom-category 'group |
17334 | 2206 :custom-set 'custom-group-set |
2207 :custom-save 'custom-group-save | |
2208 :custom-reset-current 'custom-group-reset-current | |
2209 :custom-reset-saved 'custom-group-reset-saved | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2210 :custom-reset-standard 'custom-group-reset-standard |
17334 | 2211 :custom-menu 'custom-group-menu-create) |
2212 | |
2213 (defun custom-group-sample-face-get (widget) | |
2214 ;; Use :sample-face. | |
2215 (or (nth (1- (widget-get widget :custom-level)) custom-group-tag-faces) | |
2216 'custom-group-tag-face)) | |
2217 | |
2218 (defun custom-group-value-create (widget) | |
2219 (let ((state (widget-get widget :custom-state))) | |
2220 (unless (eq state 'hidden) | |
2221 (message "Creating group...") | |
2222 (custom-load-widget widget) | |
2223 (let* ((level (widget-get widget :custom-level)) | |
2224 (symbol (widget-value widget)) | |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
2225 (members (sort (sort (copy-sequence (get symbol 'custom-group)) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
2226 custom-buffer-sort-predicate) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
2227 custom-buffer-order-predicate)) |
17334 | 2228 (prefixes (widget-get widget :custom-prefixes)) |
2229 (custom-prefix-list (custom-prefix-add symbol prefixes)) | |
2230 (length (length members)) | |
2231 (count 0) | |
2232 (children (mapcar (lambda (entry) | |
2233 (widget-insert "\n") | |
2234 (message "Creating group members... %2d%%" | |
2235 (/ (* 100.0 count) length)) | |
2236 (setq count (1+ count)) | |
2237 (prog1 | |
2238 (widget-create-child-and-convert | |
2239 widget (nth 1 entry) | |
2240 :group widget | |
2241 :tag (custom-unlispify-tag-name | |
2242 (nth 0 entry)) | |
2243 :custom-prefixes custom-prefix-list | |
2244 :custom-level (1+ level) | |
2245 :value (nth 0 entry)) | |
2246 (unless (eq (preceding-char) ?\n) | |
2247 (widget-insert "\n")))) | |
2248 members))) | |
2249 (message "Creating group magic...") | |
2250 (mapcar 'custom-magic-reset children) | |
2251 (message "Creating group state...") | |
2252 (widget-put widget :children children) | |
2253 (custom-group-state-update widget) | |
2254 (message "Creating group... done"))))) | |
2255 | |
2256 (defvar custom-group-menu | |
18067
0e2aa3b58e16
Synched with version 1.9901.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18059
diff
changeset
|
2257 '(("Set" custom-group-set |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2258 (lambda (widget) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2259 (eq (widget-get widget :custom-state) 'modified))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2260 ("Save" custom-group-save |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2261 (lambda (widget) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2262 (memq (widget-get widget :custom-state) '(modified set)))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2263 ("Reset to Current" custom-group-reset-current |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2264 (lambda (widget) |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
2265 (memq (widget-get widget :custom-state) '(modified)))) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2266 ("Reset to Saved" custom-group-reset-saved |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2267 (lambda (widget) |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
2268 (memq (widget-get widget :custom-state) '(modified set)))) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2269 ("Reset to standard setting" custom-group-reset-standard |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2270 (lambda (widget) |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
2271 (memq (widget-get widget :custom-state) '(modified set saved))))) |
17334 | 2272 "Alist of actions for the `custom-group' widget. |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2273 Each entry has the form (NAME ACTION FILTER) where NAME is the name of |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2274 the menu entry, ACTION is the function to call on the widget when the |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2275 menu is selected, and FILTER is a predicate which takes a `custom-group' |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2276 widget as an argument, and returns non-nil if ACTION is valid on that |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2277 widget. If FILTER is nil, ACTION is always valid.") |
17334 | 2278 |
2279 (defun custom-group-action (widget &optional event) | |
2280 "Show the menu for `custom-group' WIDGET. | |
2281 Optional EVENT is the location for the menu." | |
2282 (if (eq (widget-get widget :custom-state) 'hidden) | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2283 (custom-toggle-hide widget) |
17334 | 2284 (let* ((completion-ignore-case t) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2285 (answer (widget-choose (concat "Operation on " |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2286 (custom-unlispify-tag-name |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2287 (widget-get widget :value))) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2288 (custom-menu-filter custom-group-menu |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2289 widget) |
17334 | 2290 event))) |
2291 (if answer | |
2292 (funcall answer widget))))) | |
2293 | |
2294 (defun custom-group-set (widget) | |
2295 "Set changes in all modified group members." | |
2296 (let ((children (widget-get widget :children))) | |
2297 (mapcar (lambda (child) | |
2298 (when (eq (widget-get child :custom-state) 'modified) | |
2299 (widget-apply child :custom-set))) | |
2300 children ))) | |
2301 | |
2302 (defun custom-group-save (widget) | |
2303 "Save all modified group members." | |
2304 (let ((children (widget-get widget :children))) | |
2305 (mapcar (lambda (child) | |
2306 (when (memq (widget-get child :custom-state) '(modified set)) | |
2307 (widget-apply child :custom-save))) | |
2308 children ))) | |
2309 | |
2310 (defun custom-group-reset-current (widget) | |
2311 "Reset all modified group members." | |
2312 (let ((children (widget-get widget :children))) | |
2313 (mapcar (lambda (child) | |
2314 (when (eq (widget-get child :custom-state) 'modified) | |
2315 (widget-apply child :custom-reset-current))) | |
2316 children ))) | |
2317 | |
2318 (defun custom-group-reset-saved (widget) | |
2319 "Reset all modified or set group members." | |
2320 (let ((children (widget-get widget :children))) | |
2321 (mapcar (lambda (child) | |
2322 (when (memq (widget-get child :custom-state) '(modified set)) | |
2323 (widget-apply child :custom-reset-saved))) | |
2324 children ))) | |
2325 | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2326 (defun custom-group-reset-standard (widget) |
17334 | 2327 "Reset all modified, set, or saved group members." |
2328 (let ((children (widget-get widget :children))) | |
2329 (mapcar (lambda (child) | |
2330 (when (memq (widget-get child :custom-state) | |
2331 '(modified set saved)) | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2332 (widget-apply child :custom-reset-standard))) |
17334 | 2333 children ))) |
2334 | |
2335 (defun custom-group-state-update (widget) | |
2336 "Update magic." | |
2337 (unless (eq (widget-get widget :custom-state) 'hidden) | |
2338 (let* ((children (widget-get widget :children)) | |
2339 (states (mapcar (lambda (child) | |
2340 (widget-get child :custom-state)) | |
2341 children)) | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2342 (magics custom-magic-alist) |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2343 (found 'standard)) |
17334 | 2344 (while magics |
2345 (let ((magic (car (car magics)))) | |
2346 (if (and (not (eq magic 'hidden)) | |
2347 (memq magic states)) | |
2348 (setq found magic | |
2349 magics nil) | |
2350 (setq magics (cdr magics))))) | |
2351 (widget-put widget :custom-state found))) | |
2352 (custom-magic-reset widget)) | |
2353 | |
2354 ;;; The `custom-save-all' Function. | |
2355 | |
2356 (defcustom custom-file "~/.emacs" | |
2357 "File used for storing customization information. | |
2358 If you change this from the default \"~/.emacs\" you need to | |
2359 explicitly load that file for the settings to take effect." | |
2360 :type 'file | |
2361 :group 'customize) | |
2362 | |
2363 (defun custom-save-delete (symbol) | |
2364 "Delete the call to SYMBOL form `custom-file'. | |
2365 Leave point at the location of the call, or after the last expression." | |
2366 (set-buffer (find-file-noselect custom-file)) | |
2367 (goto-char (point-min)) | |
2368 (catch 'found | |
2369 (while t | |
2370 (let ((sexp (condition-case nil | |
2371 (read (current-buffer)) | |
2372 (end-of-file (throw 'found nil))))) | |
2373 (when (and (listp sexp) | |
2374 (eq (car sexp) symbol)) | |
2375 (delete-region (save-excursion | |
2376 (backward-sexp) | |
2377 (point)) | |
2378 (point)) | |
2379 (throw 'found nil)))))) | |
2380 | |
2381 (defun custom-save-variables () | |
2382 "Save all customized variables in `custom-file'." | |
2383 (save-excursion | |
2384 (custom-save-delete 'custom-set-variables) | |
2385 (let ((standard-output (current-buffer))) | |
2386 (unless (bolp) | |
2387 (princ "\n")) | |
2388 (princ "(custom-set-variables") | |
2389 (mapatoms (lambda (symbol) | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2390 (let ((value (get symbol 'saved-value)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2391 (requests (get symbol 'custom-requests)) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2392 (now (not (or (get symbol 'standard-value) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2393 (and (not (boundp symbol)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2394 (not (get symbol 'force-value))))))) |
17334 | 2395 (when value |
2396 (princ "\n '(") | |
2397 (princ symbol) | |
2398 (princ " ") | |
2399 (prin1 (car value)) | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2400 (cond (requests |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2401 (if now |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2402 (princ " t ") |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2403 (princ " nil ")) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2404 (prin1 requests) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2405 (princ ")")) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2406 (now |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2407 (princ " t)")) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2408 (t |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2409 (princ ")"))))))) |
17334 | 2410 (princ ")") |
2411 (unless (looking-at "\n") | |
2412 (princ "\n"))))) | |
2413 | |
2414 (defun custom-save-faces () | |
2415 "Save all customized faces in `custom-file'." | |
2416 (save-excursion | |
2417 (custom-save-delete 'custom-set-faces) | |
2418 (let ((standard-output (current-buffer))) | |
2419 (unless (bolp) | |
2420 (princ "\n")) | |
2421 (princ "(custom-set-faces") | |
17415 | 2422 (let ((value (get 'default 'saved-face))) |
2423 ;; The default face must be first, since it affects the others. | |
2424 (when value | |
2425 (princ "\n '(default ") | |
2426 (prin1 value) | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
2427 (if (or (get 'default 'face-defface-spec) |
17415 | 2428 (and (not (custom-facep 'default)) |
2429 (not (get 'default 'force-face)))) | |
2430 (princ ")") | |
2431 (princ " t)")))) | |
17334 | 2432 (mapatoms (lambda (symbol) |
2433 (let ((value (get symbol 'saved-face))) | |
17415 | 2434 (when (and (not (eq symbol 'default)) |
2435 ;; Don't print default face here. | |
2436 value) | |
17334 | 2437 (princ "\n '(") |
2438 (princ symbol) | |
2439 (princ " ") | |
2440 (prin1 value) | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
2441 (if (or (get symbol 'face-defface-spec) |
17334 | 2442 (and (not (custom-facep symbol)) |
2443 (not (get symbol 'force-face)))) | |
2444 (princ ")") | |
2445 (princ " t)")))))) | |
2446 (princ ")") | |
2447 (unless (looking-at "\n") | |
2448 (princ "\n"))))) | |
2449 | |
2450 ;;;###autoload | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2451 (defun custom-save-customized () |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2452 "Save all user options which have been set in this session." |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2453 (interactive) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2454 (mapatoms (lambda (symbol) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2455 (let ((face (get symbol 'customized-face)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2456 (value (get symbol 'customized-value))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2457 (when face |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2458 (put symbol 'saved-face face) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2459 (put symbol 'customized-face nil)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2460 (when value |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2461 (put symbol 'saved-value value) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2462 (put symbol 'customized-value nil))))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2463 ;; We really should update all custom buffers here. |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2464 (custom-save-all)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2465 |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2466 ;;;###autoload |
17334 | 2467 (defun custom-save-all () |
2468 "Save all customizations in `custom-file'." | |
2469 (custom-save-variables) | |
2470 (custom-save-faces) | |
2471 (save-excursion | |
2472 (set-buffer (find-file-noselect custom-file)) | |
2473 (save-buffer))) | |
2474 | |
2475 ;;; The Customize Menu. | |
2476 | |
17415 | 2477 ;;; Menu support |
2478 | |
2479 (unless (string-match "XEmacs" emacs-version) | |
2480 (defconst custom-help-menu '("Customize" | |
2481 ["Update menu..." custom-menu-update t] | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2482 ["Group..." customize-group t] |
17415 | 2483 ["Variable..." customize-variable t] |
2484 ["Face..." customize-face t] | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2485 ["Saved..." customize-saved t] |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2486 ["Set..." customize-customized t] |
17415 | 2487 ["Apropos..." customize-apropos t]) |
2488 ;; This menu should be identical to the one defined in `menu-bar.el'. | |
2489 "Customize menu") | |
2490 | |
2491 (defun custom-menu-reset () | |
2492 "Reset customize menu." | |
2493 (remove-hook 'custom-define-hook 'custom-menu-reset) | |
2494 (define-key global-map [menu-bar help-menu customize-menu] | |
2495 (cons (car custom-help-menu) | |
2496 (easy-menu-create-keymaps (car custom-help-menu) | |
2497 (cdr custom-help-menu))))) | |
2498 | |
2499 (defun custom-menu-update (event) | |
2500 "Update customize menu." | |
2501 (interactive "e") | |
2502 (add-hook 'custom-define-hook 'custom-menu-reset) | |
2503 (let* ((emacs (widget-apply '(custom-group) :custom-menu 'emacs)) | |
2504 (menu `(,(car custom-help-menu) | |
2505 ,emacs | |
2506 ,@(cdr (cdr custom-help-menu))))) | |
2507 (let ((map (easy-menu-create-keymaps (car menu) (cdr menu)))) | |
2508 (define-key global-map [menu-bar help-menu customize-menu] | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2509 (cons (car menu) map)))))) |
17415 | 2510 |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2511 (defcustom custom-menu-nesting 2 |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2512 "Maximum nesting in custom menus." |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2513 :type 'integer |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
2514 :group 'custom-menu) |
17334 | 2515 |
2516 (defun custom-face-menu-create (widget symbol) | |
2517 "Ignoring WIDGET, create a menu entry for customization face SYMBOL." | |
2518 (vector (custom-unlispify-menu-entry symbol) | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
2519 `(customize-face ',symbol) |
17334 | 2520 t)) |
2521 | |
2522 (defun custom-variable-menu-create (widget symbol) | |
2523 "Ignoring WIDGET, create a menu entry for customization variable SYMBOL." | |
2524 (let ((type (get symbol 'custom-type))) | |
2525 (unless (listp type) | |
2526 (setq type (list type))) | |
2527 (if (and type (widget-get type :custom-menu)) | |
2528 (widget-apply type :custom-menu symbol) | |
2529 (vector (custom-unlispify-menu-entry symbol) | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
2530 `(customize-variable ',symbol) |
17334 | 2531 t)))) |
2532 | |
17415 | 2533 ;; Add checkboxes to boolean variable entries. |
17334 | 2534 (widget-put (get 'boolean 'widget-type) |
2535 :custom-menu (lambda (widget symbol) | |
2536 (vector (custom-unlispify-menu-entry symbol) | |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
2537 `(customize-variable ',symbol) |
17334 | 2538 ':style 'toggle |
2539 ':selected symbol))) | |
2540 | |
2541 (if (string-match "XEmacs" emacs-version) | |
2542 ;; XEmacs can create menus dynamically. | |
2543 (defun custom-group-menu-create (widget symbol) | |
2544 "Ignoring WIDGET, create a menu entry for customization group SYMBOL." | |
2545 `( ,(custom-unlispify-menu-entry symbol t) | |
2546 :filter (lambda (&rest junk) | |
2547 (cdr (custom-menu-create ',symbol))))) | |
2548 ;; But emacs can't. | |
2549 (defun custom-group-menu-create (widget symbol) | |
2550 "Ignoring WIDGET, create a menu entry for customization group SYMBOL." | |
2551 ;; Limit the nesting. | |
2552 (let ((custom-menu-nesting (1- custom-menu-nesting))) | |
2553 (custom-menu-create symbol)))) | |
2554 | |
17415 | 2555 ;;;###autoload |
2556 (defun custom-menu-create (symbol) | |
17334 | 2557 "Create menu for customization group SYMBOL. |
2558 The menu is in a format applicable to `easy-menu-define'." | |
17415 | 2559 (let* ((item (vector (custom-unlispify-menu-entry symbol) |
17798
f59c9a63514b
Synched with version 1.97.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17703
diff
changeset
|
2560 `(customize-group ',symbol) |
17415 | 2561 t))) |
2562 (if (and (or (not (boundp 'custom-menu-nesting)) | |
2563 (>= custom-menu-nesting 0)) | |
17334 | 2564 (< (length (get symbol 'custom-group)) widget-menu-max-size)) |
2565 (let ((custom-prefix-list (custom-prefix-add symbol | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2566 custom-prefix-list)) |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
2567 (members (sort (sort (copy-sequence (get symbol 'custom-group)) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
2568 custom-menu-sort-predicate) |
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
2569 custom-menu-order-predicate))) |
17334 | 2570 (custom-load-symbol symbol) |
2571 `(,(custom-unlispify-menu-entry symbol t) | |
2572 ,item | |
2573 "--" | |
2574 ,@(mapcar (lambda (entry) | |
2575 (widget-apply (if (listp (nth 1 entry)) | |
2576 (nth 1 entry) | |
2577 (list (nth 1 entry))) | |
2578 :custom-menu (nth 0 entry))) | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2579 members))) |
17334 | 2580 item))) |
2581 | |
2582 ;;;###autoload | |
17415 | 2583 (defun customize-menu-create (symbol &optional name) |
2584 "Return a customize menu for customization group SYMBOL. | |
2585 If optional NAME is given, use that as the name of the menu. | |
2586 Otherwise the menu will be named `Customize'. | |
2587 The format is suitable for use with `easy-menu-define'." | |
2588 (unless name | |
2589 (setq name "Customize")) | |
2590 (if (string-match "XEmacs" emacs-version) | |
2591 ;; We can delay it under XEmacs. | |
2592 `(,name | |
2593 :filter (lambda (&rest junk) | |
2594 (cdr (custom-menu-create ',symbol)))) | |
2595 ;; But we must create it now under Emacs. | |
2596 (cons name (cdr (custom-menu-create symbol))))) | |
17334 | 2597 |
17415 | 2598 ;;; The Custom Mode. |
2599 | |
2600 (defvar custom-mode-map nil | |
2601 "Keymap for `custom-mode'.") | |
2602 | |
2603 (unless custom-mode-map | |
2604 (setq custom-mode-map (make-sparse-keymap)) | |
2605 (set-keymap-parent custom-mode-map widget-keymap) | |
18139
ee3c0d09dcd3
Synched with 1.9908.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18131
diff
changeset
|
2606 (suppress-keymap custom-mode-map) |
17415 | 2607 (define-key custom-mode-map "q" 'bury-buffer)) |
2608 | |
2609 (easy-menu-define custom-mode-customize-menu | |
2610 custom-mode-map | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17534
diff
changeset
|
2611 "Menu used to customize customization buffers." |
17415 | 2612 (customize-menu-create 'customize)) |
17334 | 2613 |
17415 | 2614 (easy-menu-define custom-mode-menu |
2615 custom-mode-map | |
2616 "Menu used in customization buffers." | |
2617 `("Custom" | |
2618 ["Set" custom-set t] | |
2619 ["Save" custom-save t] | |
2620 ["Reset to Current" custom-reset-current t] | |
2621 ["Reset to Saved" custom-reset-saved t] | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2622 ["Reset to Standard Settings" custom-reset-standard t] |
17415 | 2623 ["Info" (Info-goto-node "(custom)The Customization Buffer") t])) |
2624 | |
2625 (defcustom custom-mode-hook nil | |
2626 "Hook called when entering custom-mode." | |
2627 :type 'hook | |
18244
909a0f9169b8
Synched with 1.9914.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18139
diff
changeset
|
2628 :group 'custom-buffer ) |
17415 | 2629 |
2630 (defun custom-mode () | |
2631 "Major mode for editing customization buffers. | |
2632 | |
2633 The following commands are available: | |
2634 | |
2635 Move to next button or editable field. \\[widget-forward] | |
2636 Move to previous button or editable field. \\[widget-backward] | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2637 Invoke button under the mouse pointer. \\[widget-button-click] |
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2638 Invoke button under point. \\[widget-button-press] |
17415 | 2639 Set all modifications. \\[custom-set] |
2640 Make all modifications default. \\[custom-save] | |
2641 Reset all modified options. \\[custom-reset-current] | |
2642 Reset all modified or set options. \\[custom-reset-saved] | |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
18032
diff
changeset
|
2643 Reset all options. \\[custom-reset-standard] |
17415 | 2644 |
2645 Entry to this mode calls the value of `custom-mode-hook' | |
2646 if that value is non-nil." | |
2647 (kill-all-local-variables) | |
2648 (setq major-mode 'custom-mode | |
2649 mode-name "Custom") | |
2650 (use-local-map custom-mode-map) | |
2651 (easy-menu-add custom-mode-customize-menu) | |
2652 (easy-menu-add custom-mode-menu) | |
2653 (make-local-variable 'custom-options) | |
2654 (run-hooks 'custom-mode-hook)) | |
17334 | 2655 |
2656 ;;; The End. | |
2657 | |
2658 (provide 'cus-edit) | |
2659 | |
2660 ;; cus-edit.el ends here |