Mercurial > emacs
annotate lisp/custom.el @ 111112:28595721f736
Finished work on mouse highlight that comes from display strings.
Not tested yet.
xdisp.c (fast_find_string_pos): #ifdef away, not used anymore.
(mouse_face_from_string_pos): New function, replaces fast_find_string_pos.
(note_mouse_highlight): Call it instead of fast_find_string_pos.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Sat, 16 Oct 2010 18:14:16 +0200 |
parents | 715d5a9df4aa |
children | 280c8ae2476d |
rev | line source |
---|---|
38412
253f761ad37b
Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents:
36902
diff
changeset
|
1 ;;; custom.el --- tools for declaring and initializing options |
17334 | 2 ;; |
64762
41bb365f41c4
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64441
diff
changeset
|
3 ;; Copyright (C) 1996, 1997, 1999, 2001, 2002, 2003, 2004, |
106815 | 4 ;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
17334 | 5 ;; |
6 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk> | |
26582
fbd1f4d3000d
(custom-declare-group): Purecopy DOC.
Dave Love <fx@gnu.org>
parents:
25888
diff
changeset
|
7 ;; Maintainer: FSF |
17334 | 8 ;; Keywords: help, faces |
9 | |
17520 | 10 ;; This file is part of GNU Emacs. |
11 | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92148
diff
changeset
|
12 ;; GNU Emacs is free software: you can redistribute it and/or modify |
17520 | 13 ;; it under the terms of the GNU General Public License as published by |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92148
diff
changeset
|
14 ;; the Free Software Foundation, either version 3 of the License, or |
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92148
diff
changeset
|
15 ;; (at your option) any later version. |
17520 | 16 |
17 ;; GNU Emacs is distributed in the hope that it will be useful, | |
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 ;; GNU General Public License for more details. | |
21 | |
22 ;; You should have received a copy of the GNU General Public License | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92148
diff
changeset
|
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
17520 | 24 |
17334 | 25 ;;; Commentary: |
26 ;; | |
48238
b6f8e90bc592
Fix typos in Commentary section.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
47822
diff
changeset
|
27 ;; This file only contains the code needed to declare and initialize |
17334 | 28 ;; user options. The code to customize options is autoloaded from |
25683 | 29 ;; `cus-edit.el' and is documented in the Emacs Lisp Reference manual. |
17334 | 30 |
48238
b6f8e90bc592
Fix typos in Commentary section.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
47822
diff
changeset
|
31 ;; The code implementing face declarations is in `cus-face.el'. |
17334 | 32 |
33 ;;; Code: | |
34 | |
35 (require 'widget) | |
36 | |
17415 | 37 (defvar custom-define-hook nil |
38 ;; Customize information for this option is in `cus-edit.el'. | |
39 "Hook called after defining each customize option.") | |
40 | |
47570
b65cc673fb00
(custom-dont-initialize): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
45366
diff
changeset
|
41 (defvar custom-dont-initialize nil |
b65cc673fb00
(custom-dont-initialize): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
45366
diff
changeset
|
42 "Non-nil means `defcustom' should not initialize the variable. |
b65cc673fb00
(custom-dont-initialize): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
45366
diff
changeset
|
43 That is used for the sake of `custom-make-dependencies'. |
b65cc673fb00
(custom-dont-initialize): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
45366
diff
changeset
|
44 Users should not set it.") |
b65cc673fb00
(custom-dont-initialize): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
45366
diff
changeset
|
45 |
41224
fc0e6d3f905d
(custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39981
diff
changeset
|
46 (defvar custom-current-group-alist nil |
fc0e6d3f905d
(custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39981
diff
changeset
|
47 "Alist of (FILE . GROUP) indicating the current group to use for FILE.") |
fc0e6d3f905d
(custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39981
diff
changeset
|
48 |
17334 | 49 ;;; The `defcustom' Macro. |
50 | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
51 (defun custom-initialize-default (symbol value) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
52 "Initialize SYMBOL with VALUE. |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
53 This will do nothing if symbol already has a default binding. |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
54 Otherwise, if symbol has a `saved-value' property, it will evaluate |
55518
10cd0e6bfb73
(custom-initialize-default, defcustom): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
54161
diff
changeset
|
55 the car of that and use it as the default binding for symbol. |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
56 Otherwise, VALUE will be evaluated and used as the default binding for |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
57 symbol." |
17415 | 58 (unless (default-boundp symbol) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17949
diff
changeset
|
59 ;; Use the saved value if it exists, otherwise the standard setting. |
105032
57aeab3faaa9
(custom-initialize-default, custom-initialize-set): CSE.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104990
diff
changeset
|
60 (set-default symbol (eval (if (get symbol 'saved-value) |
57aeab3faaa9
(custom-initialize-default, custom-initialize-set): CSE.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104990
diff
changeset
|
61 (car (get symbol 'saved-value)) |
57aeab3faaa9
(custom-initialize-default, custom-initialize-set): CSE.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104990
diff
changeset
|
62 value))))) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
63 |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
64 (defun custom-initialize-set (symbol value) |
19535
e9d8fcec9843
(custom-declare-variable): Use custom-initialize-reset
Richard M. Stallman <rms@gnu.org>
parents:
19516
diff
changeset
|
65 "Initialize SYMBOL based on VALUE. |
e9d8fcec9843
(custom-declare-variable): Use custom-initialize-reset
Richard M. Stallman <rms@gnu.org>
parents:
19516
diff
changeset
|
66 If the symbol doesn't have a default binding already, |
e9d8fcec9843
(custom-declare-variable): Use custom-initialize-reset
Richard M. Stallman <rms@gnu.org>
parents:
19516
diff
changeset
|
67 then set it using its `:set' function (or `set-default' if it has none). |
e9d8fcec9843
(custom-declare-variable): Use custom-initialize-reset
Richard M. Stallman <rms@gnu.org>
parents:
19516
diff
changeset
|
68 The value is either the value in the symbol's `saved-value' property, |
e9d8fcec9843
(custom-declare-variable): Use custom-initialize-reset
Richard M. Stallman <rms@gnu.org>
parents:
19516
diff
changeset
|
69 if any, or VALUE." |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
70 (unless (default-boundp symbol) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
71 (funcall (or (get symbol 'custom-set) 'set-default) |
25683 | 72 symbol |
105032
57aeab3faaa9
(custom-initialize-default, custom-initialize-set): CSE.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104990
diff
changeset
|
73 (eval (if (get symbol 'saved-value) |
57aeab3faaa9
(custom-initialize-default, custom-initialize-set): CSE.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104990
diff
changeset
|
74 (car (get symbol 'saved-value)) |
57aeab3faaa9
(custom-initialize-default, custom-initialize-set): CSE.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104990
diff
changeset
|
75 value))))) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
76 |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
77 (defun custom-initialize-reset (symbol value) |
19535
e9d8fcec9843
(custom-declare-variable): Use custom-initialize-reset
Richard M. Stallman <rms@gnu.org>
parents:
19516
diff
changeset
|
78 "Initialize SYMBOL based on VALUE. |
e9d8fcec9843
(custom-declare-variable): Use custom-initialize-reset
Richard M. Stallman <rms@gnu.org>
parents:
19516
diff
changeset
|
79 Set the symbol, using its `:set' function (or `set-default' if it has none). |
e9d8fcec9843
(custom-declare-variable): Use custom-initialize-reset
Richard M. Stallman <rms@gnu.org>
parents:
19516
diff
changeset
|
80 The value is either the symbol's current value |
e9d8fcec9843
(custom-declare-variable): Use custom-initialize-reset
Richard M. Stallman <rms@gnu.org>
parents:
19516
diff
changeset
|
81 \(as obtained using the `:get' function), if any, |
e9d8fcec9843
(custom-declare-variable): Use custom-initialize-reset
Richard M. Stallman <rms@gnu.org>
parents:
19516
diff
changeset
|
82 or the value in the symbol's `saved-value' property if any, |
e9d8fcec9843
(custom-declare-variable): Use custom-initialize-reset
Richard M. Stallman <rms@gnu.org>
parents:
19516
diff
changeset
|
83 or (last of all) VALUE." |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
84 (funcall (or (get symbol 'custom-set) 'set-default) |
25683 | 85 symbol |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
86 (cond ((default-boundp symbol) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
87 (funcall (or (get symbol 'custom-get) 'default-value) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
88 symbol)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
89 ((get symbol 'saved-value) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
90 (eval (car (get symbol 'saved-value)))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
91 (t |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
92 (eval value))))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
93 |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
94 (defun custom-initialize-changed (symbol value) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
95 "Initialize SYMBOL with VALUE. |
36269
9a470a7db563
(custom-initialize-changed, defcustom): Doc fix.
Dave Love <fx@gnu.org>
parents:
33027
diff
changeset
|
96 Like `custom-initialize-reset', but only use the `:set' function if |
19535
e9d8fcec9843
(custom-declare-variable): Use custom-initialize-reset
Richard M. Stallman <rms@gnu.org>
parents:
19516
diff
changeset
|
97 not using the standard setting. |
36269
9a470a7db563
(custom-initialize-changed, defcustom): Doc fix.
Dave Love <fx@gnu.org>
parents:
33027
diff
changeset
|
98 For the standard setting, use `set-default'." |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
99 (cond ((default-boundp symbol) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
100 (funcall (or (get symbol 'custom-set) 'set-default) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
101 symbol |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
102 (funcall (or (get symbol 'custom-get) 'default-value) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
103 symbol))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
104 ((get symbol 'saved-value) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
105 (funcall (or (get symbol 'custom-set) 'set-default) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
106 symbol |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
107 (eval (car (get symbol 'saved-value))))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
108 (t |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
109 (set-default symbol (eval value))))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
110 |
104961
0ea87b098bb0
* custom.el (custom-delayed-init-variables): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
111 (defvar custom-delayed-init-variables nil |
0ea87b098bb0
* custom.el (custom-delayed-init-variables): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
112 "List of variables whose initialization is pending.") |
0ea87b098bb0
* custom.el (custom-delayed-init-variables): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
113 |
0ea87b098bb0
* custom.el (custom-delayed-init-variables): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
114 (defun custom-initialize-delay (symbol value) |
0ea87b098bb0
* custom.el (custom-delayed-init-variables): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
115 "Delay initialization of SYMBOL to the next Emacs start. |
107234
78f7c3c01214
* custom.el (custom-initialize-delay): Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
116 This is used in files that are preloaded (or for autoloaded |
78f7c3c01214
* custom.el (custom-initialize-delay): Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
117 variables), so that the initialization is done in the run-time |
78f7c3c01214
* custom.el (custom-initialize-delay): Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
118 context rather than the build-time context. This also has the |
78f7c3c01214
* custom.el (custom-initialize-delay): Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
119 side-effect that the (delayed) initialization is performed with |
78f7c3c01214
* custom.el (custom-initialize-delay): Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
120 the :set function. |
78f7c3c01214
* custom.el (custom-initialize-delay): Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
121 |
78f7c3c01214
* custom.el (custom-initialize-delay): Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
122 For variables in preloaded files, you can simply use this |
78f7c3c01214
* custom.el (custom-initialize-delay): Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
123 function for the :initialize property. For autoloaded variables, |
78f7c3c01214
* custom.el (custom-initialize-delay): Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
124 you will also need to add an autoload stanza calling this |
78f7c3c01214
* custom.el (custom-initialize-delay): Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
125 function, and another one setting the standard-value property. |
78f7c3c01214
* custom.el (custom-initialize-delay): Doc fix.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
126 See `send-mail-function' in sendmail.el for an example." |
104990
f0794252d960
* mail/sendmail.el (send-mail-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104961
diff
changeset
|
127 ;; Until the var is actually initialized, it is kept unbound. |
f0794252d960
* mail/sendmail.el (send-mail-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104961
diff
changeset
|
128 ;; This seemed to be at least as good as setting it to an arbitrary |
f0794252d960
* mail/sendmail.el (send-mail-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104961
diff
changeset
|
129 ;; value like nil (evaluating `value' is not an option because it |
f0794252d960
* mail/sendmail.el (send-mail-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104961
diff
changeset
|
130 ;; may have undesirable side-effects). |
104961
0ea87b098bb0
* custom.el (custom-delayed-init-variables): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
131 (push symbol custom-delayed-init-variables)) |
0ea87b098bb0
* custom.el (custom-delayed-init-variables): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
100908
diff
changeset
|
132 |
19516
6591f294b265
(custom-declare-variable): Rename 2nd arg to DEFAULT.
Richard M. Stallman <rms@gnu.org>
parents:
18882
diff
changeset
|
133 (defun custom-declare-variable (symbol default doc &rest args) |
6591f294b265
(custom-declare-variable): Rename 2nd arg to DEFAULT.
Richard M. Stallman <rms@gnu.org>
parents:
18882
diff
changeset
|
134 "Like `defcustom', but SYMBOL and DEFAULT are evaluated as normal arguments. |
6591f294b265
(custom-declare-variable): Rename 2nd arg to DEFAULT.
Richard M. Stallman <rms@gnu.org>
parents:
18882
diff
changeset
|
135 DEFAULT should be an expression to evaluate to compute the default value, |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
136 not the default value itself. |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
137 |
64226
278c7e4c078a
(custom-declare-variable): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
64221
diff
changeset
|
138 DEFAULT is stored as SYMBOL's standard value, in SYMBOL's property |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
139 `standard-value'. At the same time, SYMBOL's property `force-value' is |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
140 set to nil, as the value is no longer rogue." |
105855
f9569789f83f
(custom-declare-group): Purecopy standard-value.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105032
diff
changeset
|
141 (put symbol 'standard-value (purecopy (list default))) |
17415 | 142 ;; Maybe this option was rogue in an earlier version. It no longer is. |
143 (when (get symbol 'force-value) | |
144 (put symbol 'force-value nil)) | |
17334 | 145 (when doc |
109490
715d5a9df4aa
* custom.el (custom-declare-variable): Give clearer error message (bug#6476).
Juanma Barranquero <lekktu@gmail.com>
parents:
107898
diff
changeset
|
146 (if (keywordp doc) |
715d5a9df4aa
* custom.el (custom-declare-variable): Give clearer error message (bug#6476).
Juanma Barranquero <lekktu@gmail.com>
parents:
107898
diff
changeset
|
147 (error "Doc string is missing") |
715d5a9df4aa
* custom.el (custom-declare-variable): Give clearer error message (bug#6476).
Juanma Barranquero <lekktu@gmail.com>
parents:
107898
diff
changeset
|
148 (put symbol 'variable-documentation doc))) |
19535
e9d8fcec9843
(custom-declare-variable): Use custom-initialize-reset
Richard M. Stallman <rms@gnu.org>
parents:
19516
diff
changeset
|
149 (let ((initialize 'custom-initialize-reset) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
150 (requests nil)) |
41224
fc0e6d3f905d
(custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39981
diff
changeset
|
151 (unless (memq :group args) |
fc0e6d3f905d
(custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39981
diff
changeset
|
152 (custom-add-to-group (custom-current-group) symbol 'custom-variable)) |
25683 | 153 (while args |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
154 (let ((arg (car args))) |
17334 | 155 (setq args (cdr args)) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
156 (unless (symbolp arg) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
157 (error "Junk in args %S" args)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
158 (let ((keyword arg) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
159 (value (car args))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
160 (unless args |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
161 (error "Keyword %s is missing an argument" keyword)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
162 (setq args (cdr args)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
163 (cond ((eq keyword :initialize) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
164 (setq initialize value)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
165 ((eq keyword :set) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
166 (put symbol 'custom-set value)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
167 ((eq keyword :get) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
168 (put symbol 'custom-get value)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
169 ((eq keyword :require) |
48476
29e63846608d
(custom-declare-variable): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
48334
diff
changeset
|
170 (push value requests)) |
85618
e2b55f3f0f2b
(custom-declare-variable): Add :risky and :safe keywords.
Glenn Morris <rgm@gnu.org>
parents:
82365
diff
changeset
|
171 ((eq keyword :risky) |
e2b55f3f0f2b
(custom-declare-variable): Add :risky and :safe keywords.
Glenn Morris <rgm@gnu.org>
parents:
82365
diff
changeset
|
172 (put symbol 'risky-local-variable value)) |
e2b55f3f0f2b
(custom-declare-variable): Add :risky and :safe keywords.
Glenn Morris <rgm@gnu.org>
parents:
82365
diff
changeset
|
173 ((eq keyword :safe) |
e2b55f3f0f2b
(custom-declare-variable): Add :risky and :safe keywords.
Glenn Morris <rgm@gnu.org>
parents:
82365
diff
changeset
|
174 (put symbol 'safe-local-variable value)) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
175 ((eq keyword :type) |
26928
755f54893c1f
(custom-declare-variable): Purecopy value.
Dave Love <fx@gnu.org>
parents:
26831
diff
changeset
|
176 (put symbol 'custom-type (purecopy value))) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
177 ((eq keyword :options) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
178 (if (get symbol 'custom-options) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
179 ;; Slow safe code to avoid duplicates. |
32225
15a7324321bb
(custom-declare-variable, custom-set-variables): Use mapc.
Dave Love <fx@gnu.org>
parents:
31362
diff
changeset
|
180 (mapc (lambda (option) |
15a7324321bb
(custom-declare-variable, custom-set-variables): Use mapc.
Dave Love <fx@gnu.org>
parents:
31362
diff
changeset
|
181 (custom-add-option symbol option)) |
48476
29e63846608d
(custom-declare-variable): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
48334
diff
changeset
|
182 value) |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
183 ;; Fast code for the common case. |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
184 (put symbol 'custom-options (copy-sequence value)))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
185 (t |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
186 (custom-handle-keyword symbol keyword value |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
187 'custom-variable)))))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
188 (put symbol 'custom-requests requests) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
189 ;; Do the actual initialization. |
47570
b65cc673fb00
(custom-dont-initialize): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
45366
diff
changeset
|
190 (unless custom-dont-initialize |
b65cc673fb00
(custom-dont-initialize): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
45366
diff
changeset
|
191 (funcall initialize symbol default))) |
59507
359397c57b70
(custom-declare-variable): Just put symbol instead of (defvar . symbol)
John Paul Wallington <jpw@pobox.com>
parents:
59385
diff
changeset
|
192 (push symbol current-load-list) |
17334 | 193 (run-hooks 'custom-define-hook) |
194 symbol) | |
195 | |
196 (defmacro defcustom (symbol value doc &rest args) | |
197 "Declare SYMBOL as a customizable variable that defaults to VALUE. | |
198 DOC is the variable documentation. | |
199 | |
55518
10cd0e6bfb73
(custom-initialize-default, defcustom): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
54161
diff
changeset
|
200 Neither SYMBOL nor VALUE need to be quoted. |
17334 | 201 If SYMBOL is not already bound, initialize it to VALUE. |
202 The remaining arguments should have the form | |
203 | |
25683 | 204 [KEYWORD VALUE]... |
17334 | 205 |
22141 | 206 The following keywords are meaningful: |
17334 | 207 |
47677 | 208 :type VALUE should be a widget type for editing the symbol's value. |
17334 | 209 :options VALUE should be a list of valid members of the widget type. |
69925
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
210 :initialize |
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
211 VALUE should be a function used to initialize the |
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
212 variable. It takes two arguments, the symbol and value |
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
213 given in the `defcustom' call. The default is |
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
214 `custom-initialize-reset'. |
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
215 :set VALUE should be a function to set the value of the symbol. |
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
216 It takes two arguments, the symbol to set and the value to |
73180 | 217 give it. The default choice of function is `set-default'. |
69925
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
218 :get VALUE should be a function to extract the value of symbol. |
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
219 The function takes one argument, a symbol, and should return |
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
220 the current value for that symbol. The default choice of function |
73180 | 221 is `default-value'. |
69925
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
222 :require |
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
223 VALUE should be a feature symbol. If you save a value |
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
224 for this option, then when your `.emacs' file loads the value, |
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
225 it does (require VALUE) first. |
85618
e2b55f3f0f2b
(custom-declare-variable): Add :risky and :safe keywords.
Glenn Morris <rgm@gnu.org>
parents:
82365
diff
changeset
|
226 :risky Set SYMBOL's `risky-local-variable' property to VALUE. |
e2b55f3f0f2b
(custom-declare-variable): Add :risky and :safe keywords.
Glenn Morris <rgm@gnu.org>
parents:
82365
diff
changeset
|
227 :safe Set SYMBOL's `safe-local-variable' property to VALUE. |
69925
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
228 |
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
229 The following common keywords are also meaningful. |
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
230 |
25683 | 231 :group VALUE should be a customization group. |
69925
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
232 Add SYMBOL (or FACE with `defface') to that group. |
42508
37d771fc6685
(defcustom): Fix syntax of previous change.
Richard M. Stallman <rms@gnu.org>
parents:
42503
diff
changeset
|
233 :link LINK-DATA |
42503
e95910976840
(defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents:
41821
diff
changeset
|
234 Include an external link after the documentation string for this |
e95910976840
(defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents:
41821
diff
changeset
|
235 item. This is a sentence containing an active field which |
e95910976840
(defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents:
41821
diff
changeset
|
236 references some other documentation. |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49522
diff
changeset
|
237 |
67064
e541df85ad86
(defcustom): Update link types in docstring.
Juri Linkov <juri@jurta.org>
parents:
67058
diff
changeset
|
238 There are several alternatives you can use for LINK-DATA: |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49522
diff
changeset
|
239 |
42508
37d771fc6685
(defcustom): Fix syntax of previous change.
Richard M. Stallman <rms@gnu.org>
parents:
42503
diff
changeset
|
240 (custom-manual INFO-NODE) |
42503
e95910976840
(defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents:
41821
diff
changeset
|
241 Link to an Info node; INFO-NODE is a string which specifies |
67064
e541df85ad86
(defcustom): Update link types in docstring.
Juri Linkov <juri@jurta.org>
parents:
67058
diff
changeset
|
242 the node name, as in \"(emacs)Top\". |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49522
diff
changeset
|
243 |
42508
37d771fc6685
(defcustom): Fix syntax of previous change.
Richard M. Stallman <rms@gnu.org>
parents:
42503
diff
changeset
|
244 (info-link INFO-NODE) |
42503
e95910976840
(defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents:
41821
diff
changeset
|
245 Like `custom-manual' except that the link appears in the |
e95910976840
(defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents:
41821
diff
changeset
|
246 customization buffer with the Info node name. |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49522
diff
changeset
|
247 |
42508
37d771fc6685
(defcustom): Fix syntax of previous change.
Richard M. Stallman <rms@gnu.org>
parents:
42503
diff
changeset
|
248 (url-link URL) |
42503
e95910976840
(defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents:
41821
diff
changeset
|
249 Link to a web page; URL is a string which specifies the URL. |
67064
e541df85ad86
(defcustom): Update link types in docstring.
Juri Linkov <juri@jurta.org>
parents:
67058
diff
changeset
|
250 |
e541df85ad86
(defcustom): Update link types in docstring.
Juri Linkov <juri@jurta.org>
parents:
67058
diff
changeset
|
251 (emacs-commentary-link LIBRARY) |
e541df85ad86
(defcustom): Update link types in docstring.
Juri Linkov <juri@jurta.org>
parents:
67058
diff
changeset
|
252 Link to the commentary section of LIBRARY. |
e541df85ad86
(defcustom): Update link types in docstring.
Juri Linkov <juri@jurta.org>
parents:
67058
diff
changeset
|
253 |
e541df85ad86
(defcustom): Update link types in docstring.
Juri Linkov <juri@jurta.org>
parents:
67058
diff
changeset
|
254 (emacs-library-link LIBRARY) |
e541df85ad86
(defcustom): Update link types in docstring.
Juri Linkov <juri@jurta.org>
parents:
67058
diff
changeset
|
255 Link to an Emacs Lisp LIBRARY file. |
e541df85ad86
(defcustom): Update link types in docstring.
Juri Linkov <juri@jurta.org>
parents:
67058
diff
changeset
|
256 |
e541df85ad86
(defcustom): Update link types in docstring.
Juri Linkov <juri@jurta.org>
parents:
67058
diff
changeset
|
257 (file-link FILE) |
e541df85ad86
(defcustom): Update link types in docstring.
Juri Linkov <juri@jurta.org>
parents:
67058
diff
changeset
|
258 Link to FILE. |
e541df85ad86
(defcustom): Update link types in docstring.
Juri Linkov <juri@jurta.org>
parents:
67058
diff
changeset
|
259 |
e541df85ad86
(defcustom): Update link types in docstring.
Juri Linkov <juri@jurta.org>
parents:
67058
diff
changeset
|
260 (function-link FUNCTION) |
e541df85ad86
(defcustom): Update link types in docstring.
Juri Linkov <juri@jurta.org>
parents:
67058
diff
changeset
|
261 Link to the documentation of FUNCTION. |
e541df85ad86
(defcustom): Update link types in docstring.
Juri Linkov <juri@jurta.org>
parents:
67058
diff
changeset
|
262 |
e541df85ad86
(defcustom): Update link types in docstring.
Juri Linkov <juri@jurta.org>
parents:
67058
diff
changeset
|
263 (variable-link VARIABLE) |
e541df85ad86
(defcustom): Update link types in docstring.
Juri Linkov <juri@jurta.org>
parents:
67058
diff
changeset
|
264 Link to the documentation of VARIABLE. |
e541df85ad86
(defcustom): Update link types in docstring.
Juri Linkov <juri@jurta.org>
parents:
67058
diff
changeset
|
265 |
e541df85ad86
(defcustom): Update link types in docstring.
Juri Linkov <juri@jurta.org>
parents:
67058
diff
changeset
|
266 (custom-group-link GROUP) |
e541df85ad86
(defcustom): Update link types in docstring.
Juri Linkov <juri@jurta.org>
parents:
67058
diff
changeset
|
267 Link to another customization GROUP. |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49522
diff
changeset
|
268 |
42503
e95910976840
(defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents:
41821
diff
changeset
|
269 You can specify the text to use in the customization buffer by |
e95910976840
(defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents:
41821
diff
changeset
|
270 adding `:tag NAME' after the first element of the LINK-DATA; for |
42508
37d771fc6685
(defcustom): Fix syntax of previous change.
Richard M. Stallman <rms@gnu.org>
parents:
42503
diff
changeset
|
271 example, (info-link :tag \"foo\" \"(emacs)Top\") makes a link to the |
42503
e95910976840
(defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents:
41821
diff
changeset
|
272 Emacs manual which appears in the buffer as `foo'. |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49522
diff
changeset
|
273 |
42503
e95910976840
(defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents:
41821
diff
changeset
|
274 An item can have more than one external link; however, most items |
e95910976840
(defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents:
41821
diff
changeset
|
275 have none at all. |
29761 | 276 :version |
277 VALUE should be a string specifying that the variable was | |
278 first introduced, or its default value was changed, in Emacs | |
279 version VERSION. | |
69922
dc1f0ab7e276
* custom.el (defcustom, custom-handle-keyword): Add :package-version
Bill Wohler <wohler@newt.com>
parents:
69624
diff
changeset
|
280 :package-version |
70021
8991a6461375
* cus-edit.el (customize-package-emacs-version-alist): Update
Bill Wohler <wohler@newt.com>
parents:
69925
diff
changeset
|
281 VALUE should be a list with the form (PACKAGE . VERSION) |
69922
dc1f0ab7e276
* custom.el (defcustom, custom-handle-keyword): Add :package-version
Bill Wohler <wohler@newt.com>
parents:
69624
diff
changeset
|
282 specifying that the variable was first introduced, or its |
dc1f0ab7e276
* custom.el (defcustom, custom-handle-keyword): Add :package-version
Bill Wohler <wohler@newt.com>
parents:
69624
diff
changeset
|
283 default value was changed, in PACKAGE version VERSION. This |
dc1f0ab7e276
* custom.el (defcustom, custom-handle-keyword): Add :package-version
Bill Wohler <wohler@newt.com>
parents:
69624
diff
changeset
|
284 keyword takes priority over :version. The PACKAGE and VERSION |
dc1f0ab7e276
* custom.el (defcustom, custom-handle-keyword): Add :package-version
Bill Wohler <wohler@newt.com>
parents:
69624
diff
changeset
|
285 must appear in the alist `customize-package-emacs-version-alist'. |
70021
8991a6461375
* cus-edit.el (customize-package-emacs-version-alist): Update
Bill Wohler <wohler@newt.com>
parents:
69925
diff
changeset
|
286 Since PACKAGE must be unique and the user might see it in an |
8991a6461375
* cus-edit.el (customize-package-emacs-version-alist): Update
Bill Wohler <wohler@newt.com>
parents:
69925
diff
changeset
|
287 error message, a good choice is the official name of the |
8991a6461375
* cus-edit.el (customize-package-emacs-version-alist): Update
Bill Wohler <wohler@newt.com>
parents:
69925
diff
changeset
|
288 package, such as MH-E or Gnus. |
42503
e95910976840
(defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents:
41821
diff
changeset
|
289 :tag LABEL |
e95910976840
(defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents:
41821
diff
changeset
|
290 Use LABEL, a string, instead of the item's name, to label the item |
42556 | 291 in customization menus and buffers. |
42503
e95910976840
(defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents:
41821
diff
changeset
|
292 :load FILE |
e95910976840
(defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents:
41821
diff
changeset
|
293 Load file FILE (a string) before displaying this customization |
47822
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
294 item. Loading is done with `load', and only if the file is |
42503
e95910976840
(defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents:
41821
diff
changeset
|
295 not already loaded. |
48821
d886606b4f3a
(defcustom, custom-set-variables): Doc fix.
Dave Love <fx@gnu.org>
parents:
48476
diff
changeset
|
296 :set-after VARIABLES |
d886606b4f3a
(defcustom, custom-set-variables): Doc fix.
Dave Love <fx@gnu.org>
parents:
48476
diff
changeset
|
297 Specifies that SYMBOL should be set after the list of variables |
d886606b4f3a
(defcustom, custom-set-variables): Doc fix.
Dave Love <fx@gnu.org>
parents:
48476
diff
changeset
|
298 VARIABLES when both have been customized. |
17334 | 299 |
56558 | 300 If SYMBOL has a local binding, then this form affects the local |
301 binding. This is normally not what you want. Thus, if you need | |
302 to load a file defining variables with this form, or with | |
303 `defvar' or `defconst', you should always load that file | |
304 _outside_ any bindings for these variables. \(`defvar' and | |
305 `defconst' behave similarly in this respect.) | |
306 | |
69925
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
307 See Info node `(elisp) Customization' in the Emacs Lisp manual |
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
308 for more information." |
107898
6eae3bc10330
* custom.el (defcustom): Add edebug spec.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
107234
diff
changeset
|
309 (declare (doc-string 3) (debug (name body))) |
21703
aea35bf72489
(defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
20599
diff
changeset
|
310 ;; It is better not to use backquote in this file, |
aea35bf72489
(defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
20599
diff
changeset
|
311 ;; because that makes a bootstrapping problem |
aea35bf72489
(defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
20599
diff
changeset
|
312 ;; if you need to recompile all the Lisp files using interpreted code. |
aea35bf72489
(defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
20599
diff
changeset
|
313 (nconc (list 'custom-declare-variable |
aea35bf72489
(defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
20599
diff
changeset
|
314 (list 'quote symbol) |
aea35bf72489
(defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
20599
diff
changeset
|
315 (list 'quote value) |
aea35bf72489
(defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
20599
diff
changeset
|
316 doc) |
aea35bf72489
(defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
20599
diff
changeset
|
317 args)) |
17334 | 318 |
319 ;;; The `defface' Macro. | |
320 | |
321 (defmacro defface (face spec doc &rest args) | |
322 "Declare FACE as a customizable face that defaults to SPEC. | |
323 FACE does not need to be quoted. | |
324 | |
325 Third argument DOC is the face documentation. | |
326 | |
53040 | 327 If FACE has been set with `custom-set-faces', set the face attributes |
17334 | 328 as specified by that function, otherwise set the face attributes |
329 according to SPEC. | |
330 | |
331 The remaining arguments should have the form | |
332 | |
333 [KEYWORD VALUE]... | |
334 | |
69925
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
335 For a list of valid keywords, see the common keywords listed in |
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
336 `defcustom'. |
17334 | 337 |
338 SPEC should be an alist of the form ((DISPLAY ATTS)...). | |
339 | |
77487
cd48f6284818
Johan Bockg? <bojohan at dd.chalmers.se>:
Glenn Morris <rgm@gnu.org>
parents:
75347
diff
changeset
|
340 In the first element, DISPLAY can be `default'. The ATTS in that |
61530 | 341 element then act as defaults for all the following elements. |
342 | |
343 Aside from that, DISPLAY specifies conditions to match some or | |
344 all frames. For each frame, the first element of SPEC where the | |
345 DISPLAY conditions are satisfied is the one that applies to that | |
346 frame. The ATTRs in this element take effect, and the following | |
347 elements are ignored, on that frame. | |
348 | |
349 In the last element, DISPLAY can be t. That element applies to a | |
77487
cd48f6284818
Johan Bockg? <bojohan at dd.chalmers.se>:
Glenn Morris <rgm@gnu.org>
parents:
75347
diff
changeset
|
350 frame if none of the previous elements (except the `default' if |
61530 | 351 any) did. |
17334 | 352 |
17949 | 353 ATTS is a list of face attributes followed by their values: |
354 (ATTR VALUE ATTR VALUE...) | |
24986
cf6d86af7374
(defface): Extend documentation to include new
Gerd Moellmann <gerd@gnu.org>
parents:
24872
diff
changeset
|
355 |
cf6d86af7374
(defface): Extend documentation to include new
Gerd Moellmann <gerd@gnu.org>
parents:
24872
diff
changeset
|
356 The possible attributes are `:family', `:width', `:height', `:weight', |
cf6d86af7374
(defface): Extend documentation to include new
Gerd Moellmann <gerd@gnu.org>
parents:
24872
diff
changeset
|
357 `:slant', `:underline', `:overline', `:strike-through', `:box', |
39981
c576f3427825
(defface): Mention `:inherit' in doc-string.
Miles Bader <miles@gnu.org>
parents:
38857
diff
changeset
|
358 `:foreground', `:background', `:stipple', `:inverse-video', and `:inherit'. |
17334 | 359 |
77487
cd48f6284818
Johan Bockg? <bojohan at dd.chalmers.se>:
Glenn Morris <rgm@gnu.org>
parents:
75347
diff
changeset
|
360 DISPLAY can be `default' (only in the first element), the symbol |
61530 | 361 t (only in the last element) to match all frames, or an alist of |
362 conditions of the form \(REQ ITEM...). For such an alist to | |
363 match a frame, each of the conditions must be satisfied, meaning | |
364 that the REQ property of the frame must match one of the | |
365 corresponding ITEMs. These are the defined REQ values: | |
17334 | 366 |
367 `type' (the value of `window-system') | |
25888
7144668076c7
(defface): Extend documentation for new values of `type'.
Gerd Moellmann <gerd@gnu.org>
parents:
25683
diff
changeset
|
368 Under X, in addition to the values `window-system' can take, |
55545
70c4138d3b8d
* custom.el (defface): Document that type can have value gtk.
Jan Djärv <jan.h.d@swipnet.se>
parents:
55518
diff
changeset
|
369 `motif', `lucid', `gtk' and `x-toolkit' are allowed, and match when |
70c4138d3b8d
* custom.el (defface): Document that type can have value gtk.
Jan Djärv <jan.h.d@swipnet.se>
parents:
55518
diff
changeset
|
370 the Motif toolkit, Lucid toolkit, GTK toolkit or any X toolkit is in use. |
17334 | 371 |
372 `class' (the frame's color support) | |
373 Should be one of `color', `grayscale', or `mono'. | |
374 | |
375 `background' (what color is used for the background text) | |
376 Should be one of `light' or `dark'. | |
377 | |
54152
42286a8d371c
(defface): Add documentation for `min-colors'.
Eli Zaretskii <eliz@gnu.org>
parents:
53371
diff
changeset
|
378 `min-colors' (the minimum number of colors the frame should support) |
42286a8d371c
(defface): Add documentation for `min-colors'.
Eli Zaretskii <eliz@gnu.org>
parents:
53371
diff
changeset
|
379 Should be an integer, it is compared with the result of |
42286a8d371c
(defface): Add documentation for `min-colors'.
Eli Zaretskii <eliz@gnu.org>
parents:
53371
diff
changeset
|
380 `display-color-cells'. |
42286a8d371c
(defface): Add documentation for `min-colors'.
Eli Zaretskii <eliz@gnu.org>
parents:
53371
diff
changeset
|
381 |
55945
4ecb534c2d20
(defface): Add `supports' to docstring.
Juri Linkov <juri@jurta.org>
parents:
55545
diff
changeset
|
382 `supports' (only match frames that support the specified face attributes) |
4ecb534c2d20
(defface): Add `supports' to docstring.
Juri Linkov <juri@jurta.org>
parents:
55545
diff
changeset
|
383 Should be a list of face attributes. See the documentation for |
4ecb534c2d20
(defface): Add `supports' to docstring.
Juri Linkov <juri@jurta.org>
parents:
55545
diff
changeset
|
384 the function `display-supports-face-attributes-p' for more |
4ecb534c2d20
(defface): Add `supports' to docstring.
Juri Linkov <juri@jurta.org>
parents:
55545
diff
changeset
|
385 information on exactly how testing is done. |
4ecb534c2d20
(defface): Add `supports' to docstring.
Juri Linkov <juri@jurta.org>
parents:
55545
diff
changeset
|
386 |
69925
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
387 See Info node `(elisp) Customization' in the Emacs Lisp manual |
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
388 for more information." |
66399
65d160cfd8f2
(defface, defcustom): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
65480
diff
changeset
|
389 (declare (doc-string 3)) |
21703
aea35bf72489
(defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
20599
diff
changeset
|
390 ;; It is better not to use backquote in this file, |
aea35bf72489
(defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
20599
diff
changeset
|
391 ;; because that makes a bootstrapping problem |
aea35bf72489
(defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
20599
diff
changeset
|
392 ;; if you need to recompile all the Lisp files using interpreted code. |
aea35bf72489
(defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
20599
diff
changeset
|
393 (nconc (list 'custom-declare-face (list 'quote face) spec doc) args)) |
17334 | 394 |
395 ;;; The `defgroup' Macro. | |
396 | |
41224
fc0e6d3f905d
(custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39981
diff
changeset
|
397 (defun custom-current-group () |
fc0e6d3f905d
(custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39981
diff
changeset
|
398 (cdr (assoc load-file-name custom-current-group-alist))) |
fc0e6d3f905d
(custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39981
diff
changeset
|
399 |
17334 | 400 (defun custom-declare-group (symbol members doc &rest args) |
401 "Like `defgroup', but SYMBOL is evaluated as a normal argument." | |
25683 | 402 (while members |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
403 (apply 'custom-add-to-group symbol (car members)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
404 (setq members (cdr members))) |
17334 | 405 (when doc |
26582
fbd1f4d3000d
(custom-declare-group): Purecopy DOC.
Dave Love <fx@gnu.org>
parents:
25888
diff
changeset
|
406 ;; This text doesn't get into DOC. |
fbd1f4d3000d
(custom-declare-group): Purecopy DOC.
Dave Love <fx@gnu.org>
parents:
25888
diff
changeset
|
407 (put symbol 'group-documentation (purecopy doc))) |
25683 | 408 (while args |
17334 | 409 (let ((arg (car args))) |
410 (setq args (cdr args)) | |
411 (unless (symbolp arg) | |
412 (error "Junk in args %S" args)) | |
413 (let ((keyword arg) | |
414 (value (car args))) | |
415 (unless args | |
416 (error "Keyword %s is missing an argument" keyword)) | |
417 (setq args (cdr args)) | |
418 (cond ((eq keyword :prefix) | |
105855
f9569789f83f
(custom-declare-group): Purecopy standard-value.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105032
diff
changeset
|
419 (put symbol 'custom-prefix (purecopy value))) |
17334 | 420 (t |
421 (custom-handle-keyword symbol keyword value | |
422 'custom-group)))))) | |
41224
fc0e6d3f905d
(custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39981
diff
changeset
|
423 ;; Record the group on the `current' list. |
fc0e6d3f905d
(custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39981
diff
changeset
|
424 (let ((elt (assoc load-file-name custom-current-group-alist))) |
fc0e6d3f905d
(custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39981
diff
changeset
|
425 (if elt (setcdr elt symbol) |
105943
39e6ad203eb0
(custom-declare-group): Purecopy load-file-name.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105855
diff
changeset
|
426 (push (cons (purecopy load-file-name) symbol) |
39e6ad203eb0
(custom-declare-group): Purecopy load-file-name.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105855
diff
changeset
|
427 custom-current-group-alist))) |
17334 | 428 (run-hooks 'custom-define-hook) |
429 symbol) | |
430 | |
431 (defmacro defgroup (symbol members doc &rest args) | |
432 "Declare SYMBOL as a customization group containing MEMBERS. | |
433 SYMBOL does not need to be quoted. | |
434 | |
106001 | 435 Third argument DOC is the group documentation. This should be a short |
436 description of the group, beginning with a capital and ending with | |
437 a period. Words other than the first should not be capitalized, if they | |
438 are not usually written so. | |
17334 | 439 |
440 MEMBERS should be an alist of the form ((NAME WIDGET)...) where | |
20599 | 441 NAME is a symbol and WIDGET is a widget for editing that symbol. |
442 Useful widgets are `custom-variable' for editing variables, | |
17334 | 443 `custom-face' for edit faces, and `custom-group' for editing groups. |
444 | |
445 The remaining arguments should have the form | |
446 | |
25683 | 447 [KEYWORD VALUE]... |
17334 | 448 |
69925
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
449 For a list of valid keywords, see the common keywords listed in |
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
450 `defcustom'. |
29761 | 451 |
69925
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
452 See Info node `(elisp) Customization' in the Emacs Lisp manual |
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
453 for more information." |
67058
65266d675973
(defgroup): Add doc-string-elt info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66399
diff
changeset
|
454 (declare (doc-string 3)) |
21703
aea35bf72489
(defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
20599
diff
changeset
|
455 ;; It is better not to use backquote in this file, |
aea35bf72489
(defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
20599
diff
changeset
|
456 ;; because that makes a bootstrapping problem |
aea35bf72489
(defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
20599
diff
changeset
|
457 ;; if you need to recompile all the Lisp files using interpreted code. |
aea35bf72489
(defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
20599
diff
changeset
|
458 (nconc (list 'custom-declare-group (list 'quote symbol) members doc) args)) |
17334 | 459 |
460 (defun custom-add-to-group (group option widget) | |
461 "To existing GROUP add a new OPTION of type WIDGET. | |
33025
9559a9aeff3c
(custom-add-to-group): Allow multiple entries for a given value OPTION,
Miles Bader <miles@gnu.org>
parents:
32225
diff
changeset
|
462 If there already is an entry for OPTION and WIDGET, nothing is done." |
9559a9aeff3c
(custom-add-to-group): Allow multiple entries for a given value OPTION,
Miles Bader <miles@gnu.org>
parents:
32225
diff
changeset
|
463 (let ((members (get group 'custom-group)) |
9559a9aeff3c
(custom-add-to-group): Allow multiple entries for a given value OPTION,
Miles Bader <miles@gnu.org>
parents:
32225
diff
changeset
|
464 (entry (list option widget))) |
9559a9aeff3c
(custom-add-to-group): Allow multiple entries for a given value OPTION,
Miles Bader <miles@gnu.org>
parents:
32225
diff
changeset
|
465 (unless (member entry members) |
9559a9aeff3c
(custom-add-to-group): Allow multiple entries for a given value OPTION,
Miles Bader <miles@gnu.org>
parents:
32225
diff
changeset
|
466 (put group 'custom-group (nconc members (list entry)))))) |
17334 | 467 |
47822
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
468 (defun custom-group-of-mode (mode) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
469 "Return the custom group corresponding to the major or minor MODE. |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
470 If no such group is found, return nil." |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
471 (or (get mode 'custom-mode-group) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
472 (if (or (get mode 'custom-group) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
473 (and (string-match "-mode\\'" (symbol-name mode)) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
474 (get (setq mode (intern (substring (symbol-name mode) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
475 0 (match-beginning 0)))) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
476 'custom-group))) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
477 mode))) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
478 |
17334 | 479 ;;; Properties. |
480 | |
481 (defun custom-handle-all-keywords (symbol args type) | |
482 "For customization option SYMBOL, handle keyword arguments ARGS. | |
483 Third argument TYPE is the custom option type." | |
41224
fc0e6d3f905d
(custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39981
diff
changeset
|
484 (unless (memq :group args) |
48272
8555178ad8a0
(custom-handle-all-keywords): Fix arg passed to custom-add-to-group.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
48238
diff
changeset
|
485 (custom-add-to-group (custom-current-group) symbol type)) |
25683 | 486 (while args |
17334 | 487 (let ((arg (car args))) |
488 (setq args (cdr args)) | |
489 (unless (symbolp arg) | |
490 (error "Junk in args %S" args)) | |
491 (let ((keyword arg) | |
492 (value (car args))) | |
493 (unless args | |
494 (error "Keyword %s is missing an argument" keyword)) | |
495 (setq args (cdr args)) | |
25683 | 496 (custom-handle-keyword symbol keyword value type))))) |
17334 | 497 |
498 (defun custom-handle-keyword (symbol keyword value type) | |
499 "For customization option SYMBOL, handle KEYWORD with VALUE. | |
500 Fourth argument TYPE is the custom option type." | |
26582
fbd1f4d3000d
(custom-declare-group): Purecopy DOC.
Dave Love <fx@gnu.org>
parents:
25888
diff
changeset
|
501 (if purify-flag |
fbd1f4d3000d
(custom-declare-group): Purecopy DOC.
Dave Love <fx@gnu.org>
parents:
25888
diff
changeset
|
502 (setq value (purecopy value))) |
17334 | 503 (cond ((eq keyword :group) |
504 (custom-add-to-group value symbol type)) | |
20445
20ff88ac8cc2
(custom-add-version): New function.
Karl Heuer <kwzh@gnu.org>
parents:
19535
diff
changeset
|
505 ((eq keyword :version) |
20ff88ac8cc2
(custom-add-version): New function.
Karl Heuer <kwzh@gnu.org>
parents:
19535
diff
changeset
|
506 (custom-add-version symbol value)) |
69922
dc1f0ab7e276
* custom.el (defcustom, custom-handle-keyword): Add :package-version
Bill Wohler <wohler@newt.com>
parents:
69624
diff
changeset
|
507 ((eq keyword :package-version) |
dc1f0ab7e276
* custom.el (defcustom, custom-handle-keyword): Add :package-version
Bill Wohler <wohler@newt.com>
parents:
69624
diff
changeset
|
508 (custom-add-package-version symbol value)) |
17334 | 509 ((eq keyword :link) |
510 (custom-add-link symbol value)) | |
511 ((eq keyword :load) | |
512 (custom-add-load symbol value)) | |
513 ((eq keyword :tag) | |
514 (put symbol 'custom-tag value)) | |
26831
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
515 ((eq keyword :set-after) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
516 (custom-add-dependencies symbol value)) |
17334 | 517 (t |
24872
9db8a7ed814e
(custom-handle-keyword): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents:
24438
diff
changeset
|
518 (error "Unknown keyword %s" keyword)))) |
17334 | 519 |
26831
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
520 (defun custom-add-dependencies (symbol value) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
521 "To the custom option SYMBOL, add dependencies specified by VALUE. |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
522 VALUE should be a list of symbols. For each symbol in that list, |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
523 this specifies that SYMBOL should be set after the specified symbol, if |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
524 both appear in constructs like `custom-set-variables'." |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
525 (unless (listp value) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
526 (error "Invalid custom dependency `%s'" value)) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
527 (let* ((deps (get symbol 'custom-dependencies)) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
528 (new-deps deps)) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
529 (while value |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
530 (let ((dep (car value))) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
531 (unless (symbolp dep) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
532 (error "Invalid custom dependency `%s'" dep)) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
533 (unless (memq dep new-deps) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
534 (setq new-deps (cons dep new-deps))) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
535 (setq value (cdr value)))) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
536 (unless (eq deps new-deps) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
537 (put symbol 'custom-dependencies new-deps)))) |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
538 |
17334 | 539 (defun custom-add-option (symbol option) |
540 "To the variable SYMBOL add OPTION. | |
541 | |
63932
bbf23e50d797
(custom-add-option): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
63927
diff
changeset
|
542 If SYMBOL's custom type is a hook, OPTION should be a hook member. |
bbf23e50d797
(custom-add-option): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
63927
diff
changeset
|
543 If SYMBOL's custom type is an alist, OPTION specifies a symbol |
bbf23e50d797
(custom-add-option): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
63927
diff
changeset
|
544 to offer to the user as a possible key in the alist. |
bbf23e50d797
(custom-add-option): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
63927
diff
changeset
|
545 For other custom types, this has no effect." |
17334 | 546 (let ((options (get symbol 'custom-options))) |
547 (unless (member option options) | |
548 (put symbol 'custom-options (cons option options))))) | |
74861
7054ae4948fb
(custom-add-frequent-value): Alias for custom-add-option.
Chong Yidong <cyd@stupidchicken.com>
parents:
73180
diff
changeset
|
549 (defalias 'custom-add-frequent-value 'custom-add-option) |
17334 | 550 |
551 (defun custom-add-link (symbol widget) | |
552 "To the custom option SYMBOL add the link WIDGET." | |
553 (let ((links (get symbol 'custom-links))) | |
554 (unless (member widget links) | |
26582
fbd1f4d3000d
(custom-declare-group): Purecopy DOC.
Dave Love <fx@gnu.org>
parents:
25888
diff
changeset
|
555 (put symbol 'custom-links (cons (purecopy widget) links))))) |
17334 | 556 |
20445
20ff88ac8cc2
(custom-add-version): New function.
Karl Heuer <kwzh@gnu.org>
parents:
19535
diff
changeset
|
557 (defun custom-add-version (symbol version) |
20ff88ac8cc2
(custom-add-version): New function.
Karl Heuer <kwzh@gnu.org>
parents:
19535
diff
changeset
|
558 "To the custom option SYMBOL add the version VERSION." |
26582
fbd1f4d3000d
(custom-declare-group): Purecopy DOC.
Dave Love <fx@gnu.org>
parents:
25888
diff
changeset
|
559 (put symbol 'custom-version (purecopy version))) |
20445
20ff88ac8cc2
(custom-add-version): New function.
Karl Heuer <kwzh@gnu.org>
parents:
19535
diff
changeset
|
560 |
69922
dc1f0ab7e276
* custom.el (defcustom, custom-handle-keyword): Add :package-version
Bill Wohler <wohler@newt.com>
parents:
69624
diff
changeset
|
561 (defun custom-add-package-version (symbol version) |
dc1f0ab7e276
* custom.el (defcustom, custom-handle-keyword): Add :package-version
Bill Wohler <wohler@newt.com>
parents:
69624
diff
changeset
|
562 "To the custom option SYMBOL add the package version VERSION." |
dc1f0ab7e276
* custom.el (defcustom, custom-handle-keyword): Add :package-version
Bill Wohler <wohler@newt.com>
parents:
69624
diff
changeset
|
563 (put symbol 'custom-package-version (purecopy version))) |
dc1f0ab7e276
* custom.el (defcustom, custom-handle-keyword): Add :package-version
Bill Wohler <wohler@newt.com>
parents:
69624
diff
changeset
|
564 |
17334 | 565 (defun custom-add-load (symbol load) |
566 "To the custom option SYMBOL add the dependency LOAD. | |
567 LOAD should be either a library file name, or a feature name." | |
568 (let ((loads (get symbol 'custom-loads))) | |
569 (unless (member load loads) | |
26582
fbd1f4d3000d
(custom-declare-group): Purecopy DOC.
Dave Love <fx@gnu.org>
parents:
25888
diff
changeset
|
570 (put symbol 'custom-loads (cons (purecopy load) loads))))) |
17334 | 571 |
71954
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
572 (defun custom-autoload (symbol load &optional noset) |
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
573 "Mark SYMBOL as autoloaded custom variable and add dependency LOAD. |
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
574 If NOSET is non-nil, don't bother autoloading LOAD when setting the variable." |
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
575 (put symbol 'custom-autoload (if noset 'noset t)) |
49099
04672e32e3b0
(custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
48951
diff
changeset
|
576 (custom-add-load symbol load)) |
04672e32e3b0
(custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
48951
diff
changeset
|
577 |
04672e32e3b0
(custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
48951
diff
changeset
|
578 ;; This test is also in the C code of `user-variable-p'. |
04672e32e3b0
(custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
48951
diff
changeset
|
579 (defun custom-variable-p (variable) |
64149
8633ed45b13c
(custom-variable-p): Make it recursively follow aliases. Mention that
Luc Teirlinck <teirllm@auburn.edu>
parents:
64091
diff
changeset
|
580 "Return non-nil if VARIABLE is a custom variable. |
8633ed45b13c
(custom-variable-p): Make it recursively follow aliases. Mention that
Luc Teirlinck <teirllm@auburn.edu>
parents:
64091
diff
changeset
|
581 This recursively follows aliases." |
8633ed45b13c
(custom-variable-p): Make it recursively follow aliases. Mention that
Luc Teirlinck <teirllm@auburn.edu>
parents:
64091
diff
changeset
|
582 (setq variable (indirect-variable variable)) |
49099
04672e32e3b0
(custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
48951
diff
changeset
|
583 (or (get variable 'standard-value) |
04672e32e3b0
(custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
48951
diff
changeset
|
584 (get variable 'custom-autoload))) |
04672e32e3b0
(custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
48951
diff
changeset
|
585 |
85653
58abbc936e8f
(custom-note-var-changed): New function.
Richard M. Stallman <rms@gnu.org>
parents:
85618
diff
changeset
|
586 (defun custom-note-var-changed (variable) |
58abbc936e8f
(custom-note-var-changed): New function.
Richard M. Stallman <rms@gnu.org>
parents:
85618
diff
changeset
|
587 "Inform Custom that VARIABLE has been set (changed). |
58abbc936e8f
(custom-note-var-changed): New function.
Richard M. Stallman <rms@gnu.org>
parents:
85618
diff
changeset
|
588 VARIABLE is a symbol that names a user option. |
58abbc936e8f
(custom-note-var-changed): New function.
Richard M. Stallman <rms@gnu.org>
parents:
85618
diff
changeset
|
589 The result is that the change is treated as having been made through Custom." |
58abbc936e8f
(custom-note-var-changed): New function.
Richard M. Stallman <rms@gnu.org>
parents:
85618
diff
changeset
|
590 (put variable 'customized-value (list (custom-quote (eval variable))))) |
86028
cdd09d6acfdc
(custom-note-var-changed): Remove the `interactive'
Juri Linkov <juri@jurta.org>
parents:
85653
diff
changeset
|
591 |
cdd09d6acfdc
(custom-note-var-changed): Remove the `interactive'
Juri Linkov <juri@jurta.org>
parents:
85653
diff
changeset
|
592 |
cdd09d6acfdc
(custom-note-var-changed): Remove the `interactive'
Juri Linkov <juri@jurta.org>
parents:
85653
diff
changeset
|
593 ;;; Custom Themes |
85653
58abbc936e8f
(custom-note-var-changed): New function.
Richard M. Stallman <rms@gnu.org>
parents:
85618
diff
changeset
|
594 |
44911
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
595 ;;; Loading files needed to customize a symbol. |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
596 ;;; This is in custom.el because menu-bar.el needs it for toggle cmds. |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
597 |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
598 (defvar custom-load-recursion nil |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
599 "Hack to avoid recursive dependencies.") |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
600 |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
601 (defun custom-load-symbol (symbol) |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
602 "Load all dependencies for SYMBOL." |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
603 (unless custom-load-recursion |
47822
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
604 (let ((custom-load-recursion t)) |
52207
c26f56efcd5d
(custom-load-symbol): Load cus-load and cus-start first.
Richard M. Stallman <rms@gnu.org>
parents:
50123
diff
changeset
|
605 ;; Load these files if not already done, |
c26f56efcd5d
(custom-load-symbol): Load cus-load and cus-start first.
Richard M. Stallman <rms@gnu.org>
parents:
50123
diff
changeset
|
606 ;; to make sure we know all the dependencies of SYMBOL. |
c26f56efcd5d
(custom-load-symbol): Load cus-load and cus-start first.
Richard M. Stallman <rms@gnu.org>
parents:
50123
diff
changeset
|
607 (condition-case nil |
c26f56efcd5d
(custom-load-symbol): Load cus-load and cus-start first.
Richard M. Stallman <rms@gnu.org>
parents:
50123
diff
changeset
|
608 (require 'cus-load) |
c26f56efcd5d
(custom-load-symbol): Load cus-load and cus-start first.
Richard M. Stallman <rms@gnu.org>
parents:
50123
diff
changeset
|
609 (error nil)) |
c26f56efcd5d
(custom-load-symbol): Load cus-load and cus-start first.
Richard M. Stallman <rms@gnu.org>
parents:
50123
diff
changeset
|
610 (condition-case nil |
c26f56efcd5d
(custom-load-symbol): Load cus-load and cus-start first.
Richard M. Stallman <rms@gnu.org>
parents:
50123
diff
changeset
|
611 (require 'cus-start) |
c26f56efcd5d
(custom-load-symbol): Load cus-load and cus-start first.
Richard M. Stallman <rms@gnu.org>
parents:
50123
diff
changeset
|
612 (error nil)) |
47822
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
613 (dolist (load (get symbol 'custom-loads)) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
614 (cond ((symbolp load) (condition-case nil (require load) (error nil))) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
615 ;; This is subsumed by the test below, but it's much faster. |
44911
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
616 ((assoc load load-history)) |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
617 ;; This was just (assoc (locate-library load) load-history) |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
618 ;; but has been optimized not to load locate-library |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
619 ;; if not necessary. |
47822
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
620 ((let ((regexp (concat "\\(\\`\\|/\\)" (regexp-quote load) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
621 "\\(\\'\\|\\.\\)")) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
622 (found nil)) |
44911
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
623 (dolist (loaded load-history) |
45366
c9338efa3fd9
(custom-load-symbol): Verify that LOADED is a string.
Richard M. Stallman <rms@gnu.org>
parents:
44911
diff
changeset
|
624 (and (stringp (car loaded)) |
c9338efa3fd9
(custom-load-symbol): Verify that LOADED is a string.
Richard M. Stallman <rms@gnu.org>
parents:
44911
diff
changeset
|
625 (string-match regexp (car loaded)) |
44911
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
626 (setq found t))) |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
627 found)) |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
628 ;; Without this, we would load cus-edit recursively. |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
629 ;; We are still loading it when we call this, |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
630 ;; and it is not in load-history yet. |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
631 ((equal load "cus-edit")) |
47822
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
632 (t (condition-case nil (load load) (error nil)))))))) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
633 |
67978
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
634 (defvar custom-local-buffer nil |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
635 "Non-nil, in a Customization buffer, means customize a specific buffer. |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
636 If this variable is non-nil, it should be a buffer, |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
637 and it means customize the local bindings of that buffer. |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
638 This variable is a permanent local, and it normally has a local binding |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
639 in every Customization buffer.") |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
640 (put 'custom-local-buffer 'permanent-local t) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
641 |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
642 (defun custom-set-default (variable value) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
643 "Default :set function for a customizable variable. |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
644 Normally, this sets the default value of VARIABLE to VALUE, |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
645 but if `custom-local-buffer' is non-nil, |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
646 this sets the local binding in that buffer instead." |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
647 (if custom-local-buffer |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
648 (with-current-buffer custom-local-buffer |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
649 (set variable value)) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
650 (set-default variable value))) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
651 |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
652 (defun custom-set-minor-mode (variable value) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
653 ":set function for minor mode variables. |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
654 Normally, this sets the default value of VARIABLE to nil if VALUE |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
655 is nil and to t otherwise, |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
656 but if `custom-local-buffer' is non-nil, |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
657 this sets the local binding in that buffer instead." |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
658 (if custom-local-buffer |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
659 (with-current-buffer custom-local-buffer |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
660 (funcall variable (if value 1 0))) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
661 (funcall variable (if value 1 0)))) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
662 |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
663 (defun custom-quote (sexp) |
78492
7c8949dbfa0d
Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents:
78236
diff
changeset
|
664 "Quote SEXP if it is not self quoting." |
67978
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
665 (if (or (memq sexp '(t nil)) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
666 (keywordp sexp) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
667 (and (listp sexp) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
668 (memq (car sexp) '(lambda))) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
669 (stringp sexp) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
670 (numberp sexp) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
671 (vectorp sexp) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
672 ;;; (and (fboundp 'characterp) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
673 ;;; (characterp sexp)) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
674 ) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
675 sexp |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
676 (list 'quote sexp))) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
677 |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
678 (defun customize-mark-to-save (symbol) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
679 "Mark SYMBOL for later saving. |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
680 |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
681 If the default value of SYMBOL is different from the standard value, |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
682 set the `saved-value' property to a list whose car evaluates to the |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
683 default value. Otherwise, set it to nil. |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
684 |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
685 To actually save the value, call `custom-save-all'. |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
686 |
78492
7c8949dbfa0d
Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents:
78236
diff
changeset
|
687 Return non-nil if the `saved-value' property actually changed." |
69037
2e60323be52d
* custom.el (customize-mark-to-save, customize-mark-as-set): Load
Chong Yidong <cyd@stupidchicken.com>
parents:
69006
diff
changeset
|
688 (custom-load-symbol symbol) |
67978
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
689 (let* ((get (or (get symbol 'custom-get) 'default-value)) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
690 (value (funcall get symbol)) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
691 (saved (get symbol 'saved-value)) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
692 (standard (get symbol 'standard-value)) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
693 (comment (get symbol 'customized-variable-comment))) |
78492
7c8949dbfa0d
Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents:
78236
diff
changeset
|
694 ;; Save default value if different from standard value. |
67978
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
695 (if (or (null standard) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
696 (not (equal value (condition-case nil |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
697 (eval (car standard)) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
698 (error nil))))) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
699 (put symbol 'saved-value (list (custom-quote value))) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
700 (put symbol 'saved-value nil)) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
701 ;; Clear customized information (set, but not saved). |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
702 (put symbol 'customized-value nil) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
703 ;; Save any comment that might have been set. |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
704 (when comment |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
705 (put symbol 'saved-variable-comment comment)) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
706 (not (equal saved (get symbol 'saved-value))))) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
707 |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
708 (defun customize-mark-as-set (symbol) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
709 "Mark current value of SYMBOL as being set from customize. |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
710 |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
711 If the default value of SYMBOL is different from the saved value if any, |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
712 or else if it is different from the standard value, set the |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
713 `customized-value' property to a list whose car evaluates to the |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
714 default value. Otherwise, set it to nil. |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
715 |
78492
7c8949dbfa0d
Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents:
78236
diff
changeset
|
716 Return non-nil if the `customized-value' property actually changed." |
69037
2e60323be52d
* custom.el (customize-mark-to-save, customize-mark-as-set): Load
Chong Yidong <cyd@stupidchicken.com>
parents:
69006
diff
changeset
|
717 (custom-load-symbol symbol) |
67978
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
718 (let* ((get (or (get symbol 'custom-get) 'default-value)) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
719 (value (funcall get symbol)) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
720 (customized (get symbol 'customized-value)) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
721 (old (or (get symbol 'saved-value) (get symbol 'standard-value)))) |
78492
7c8949dbfa0d
Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents:
78236
diff
changeset
|
722 ;; Mark default value as set if different from old value. |
71954
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
723 (if (not (and old |
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
724 (equal value (condition-case nil |
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
725 (eval (car old)) |
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
726 (error nil))))) |
69006
e4d97c1f1377
* custom.el (customize-mark-as-set): Push to `user' theme.
Chong Yidong <cyd@stupidchicken.com>
parents:
69005
diff
changeset
|
727 (progn (put symbol 'customized-value (list (custom-quote value))) |
e4d97c1f1377
* custom.el (customize-mark-as-set): Push to `user' theme.
Chong Yidong <cyd@stupidchicken.com>
parents:
69005
diff
changeset
|
728 (custom-push-theme 'theme-value symbol 'user 'set |
e4d97c1f1377
* custom.el (customize-mark-as-set): Push to `user' theme.
Chong Yidong <cyd@stupidchicken.com>
parents:
69005
diff
changeset
|
729 (custom-quote value))) |
67978
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
730 (put symbol 'customized-value nil)) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
731 ;; Changed? |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
732 (not (equal customized (get symbol 'customized-value))))) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
733 |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
734 (defun custom-reevaluate-setting (symbol) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
735 "Reset the value of SYMBOL by re-evaluating its saved or standard value. |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
736 Use the :set function to do so. This is useful for customizable options |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
737 that are defined before their standard value can really be computed. |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
738 E.g. dumped variables whose default depends on run-time information." |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
739 (funcall (or (get symbol 'custom-set) 'set-default) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
740 symbol |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
741 (eval (car (or (get symbol 'saved-value) (get symbol 'standard-value)))))) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
742 |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
743 |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
744 ;;; Custom Themes |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
745 |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
746 ;; Custom themes are collections of settings that can be enabled or |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
747 ;; disabled as a unit. |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
748 |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
749 ;; Each Custom theme is defined by a symbol, called the theme name. |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
750 ;; The `theme-settings' property of the theme name records the |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
751 ;; variable and face settings of the theme. This property is a list |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
752 ;; of elements, each of the form |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
753 ;; |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
754 ;; (PROP SYMBOL THEME VALUE) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
755 ;; |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
756 ;; - PROP is either `theme-value' or `theme-face' |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
757 ;; - SYMBOL is the face or variable name |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
758 ;; - THEME is the theme name (redundant, but simplifies the code) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
759 ;; - VALUE is an expression that gives the theme's setting for SYMBOL. |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
760 ;; |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
761 ;; The theme name also has a `theme-feature' property, whose value is |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
762 ;; specified when the theme is defined (see `custom-declare-theme'). |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
763 ;; Usually, this is just a symbol named THEME-theme. This lets |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
764 ;; external libraries call (require 'foo-theme). |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
765 |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
766 ;; In addition, each symbol (either a variable or a face) affected by |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
767 ;; an *enabled* theme has a `theme-value' or `theme-face' property, |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
768 ;; which is a list of elements each of the form |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
769 ;; |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
770 ;; (THEME VALUE) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
771 ;; |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
772 ;; which have the same meanings as in `theme-settings'. |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
773 ;; |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
774 ;; The `theme-value' and `theme-face' lists are ordered by decreasing |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
775 ;; theme precedence. Thus, the first element is always the one that |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
776 ;; is in effect. |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
777 |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
778 ;; Each theme is stored in a theme file, with filename THEME-theme.el. |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
779 ;; Loading a theme basically involves calling (load "THEME-theme") |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
780 ;; This is done by the function `load-theme'. Loading a theme |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
781 ;; automatically enables it. |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
782 ;; |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
783 ;; When a theme is enabled, the `theme-value' and `theme-face' |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
784 ;; properties for the affected symbols are set. When a theme is |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
785 ;; disabled, its settings are removed from the `theme-value' and |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
786 ;; `theme-face' properties, but the theme's own `theme-settings' |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
787 ;; property remains unchanged. |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
788 |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
789 (defvar custom-known-themes '(user changed) |
63927
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
790 "Themes that have been defined with `deftheme'. |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
791 The default value is the list (user changed). The theme `changed' |
65341
6990826a916f
Custom Theme bugfixes.
Chong Yidong <cyd@stupidchicken.com>
parents:
65334
diff
changeset
|
792 contains the settings before custom themes are applied. The |
64441
d0cd5eb4d042
(custom-known-themes): Delete duplicate words.
Juri Linkov <juri@jurta.org>
parents:
64303
diff
changeset
|
793 theme `user' contains all the settings the user customized and saved. |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
794 Additional themes declared with the `deftheme' macro will be added to |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
795 the front of this list.") |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
796 |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
797 (defsubst custom-theme-p (theme) |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
798 "Non-nil when THEME has been defined." |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
799 (memq theme custom-known-themes)) |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
800 |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
801 (defsubst custom-check-theme (theme) |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
802 "Check whether THEME is valid, and signal an error if it is not." |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
803 (unless (custom-theme-p theme) |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
804 (error "Unknown theme `%s'" theme))) |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
805 |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
806 (defun custom-push-theme (prop symbol theme mode &optional value) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
807 "Record VALUE for face or variable SYMBOL in custom theme THEME. |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
808 PROP is `theme-face' for a face, `theme-value' for a variable. |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
809 |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
810 MODE can be either the symbol `set' or the symbol `reset'. If it is the |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
811 symbol `set', then VALUE is the value to use. If it is the symbol |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
812 `reset', then SYMBOL will be removed from THEME (VALUE is ignored). |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
813 |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
814 See `custom-known-themes' for a list of known themes." |
67962
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
815 (unless (memq prop '(theme-value theme-face)) |
67783
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
816 (error "Unknown theme property")) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
817 (let* ((old (get symbol prop)) |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
818 (setting (assq theme old)) ; '(theme value) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
819 (theme-settings ; '(prop symbol theme value) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
820 (get theme 'theme-settings))) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
821 (if (eq mode 'reset) |
67783
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
822 ;; Remove a setting. |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
823 (when setting |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
824 (let (res) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
825 (dolist (theme-setting theme-settings) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
826 (if (and (eq (car theme-setting) prop) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
827 (eq (cadr theme-setting) symbol)) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
828 (setq res theme-setting))) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
829 (put theme 'theme-settings (delq res theme-settings))) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
830 (put symbol prop (delq setting old))) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
831 (if setting |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
832 ;; Alter an existing setting. |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
833 (let (res) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
834 (dolist (theme-setting theme-settings) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
835 (if (and (eq (car theme-setting) prop) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
836 (eq (cadr theme-setting) symbol)) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
837 (setq res theme-setting))) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
838 (put theme 'theme-settings |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
839 (cons (list prop symbol theme value) |
67783
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
840 (delq res theme-settings))) |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
841 (setcar (cdr setting) value)) |
67783
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
842 ;; Add a new setting. |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
843 ;; If the user changed the value outside of Customize, we |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
844 ;; first save the current value to a fake theme, `changed'. |
67783
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
845 ;; This ensures that the user-set value comes back if the |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
846 ;; theme is later disabled. |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
847 (if (null old) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
848 (if (and (eq prop 'theme-value) |
70646
af9f1a83e3cf
* custom.el (custom-push-theme): Load the variable before checking
Chong Yidong <cyd@stupidchicken.com>
parents:
70021
diff
changeset
|
849 (boundp symbol)) |
af9f1a83e3cf
* custom.el (custom-push-theme): Load the variable before checking
Chong Yidong <cyd@stupidchicken.com>
parents:
70021
diff
changeset
|
850 (let ((sv (get symbol 'standard-value))) |
71954
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
851 (unless (and sv |
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
852 (equal (eval (car sv)) (symbol-value symbol))) |
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
853 (setq old (list (list 'changed (symbol-value symbol)))))) |
69624
efd1add5bedf
* cus-edit.el (custom-face-set): Call custom-push-theme before
Chong Yidong <cyd@stupidchicken.com>
parents:
69037
diff
changeset
|
854 (if (and (facep symbol) |
efd1add5bedf
* cus-edit.el (custom-face-set): Call custom-push-theme before
Chong Yidong <cyd@stupidchicken.com>
parents:
69037
diff
changeset
|
855 (not (face-spec-match-p symbol (get symbol 'face-defface-spec)))) |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
856 (setq old (list (list 'changed (list |
67783
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
857 (append '(t) (custom-face-attributes-get symbol nil))))))))) |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
858 (put symbol prop (cons (list theme value) old)) |
67783
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
859 (put theme 'theme-settings |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
860 (cons (list prop symbol theme value) |
67783
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
861 theme-settings)))))) |
67978
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
862 |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
863 |
17334 | 864 (defun custom-set-variables (&rest args) |
59385
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
865 "Install user customizations of variable values specified in ARGS. |
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
866 These settings are registered as theme `user'. |
48821
d886606b4f3a
(defcustom, custom-set-variables): Doc fix.
Dave Love <fx@gnu.org>
parents:
48476
diff
changeset
|
867 The arguments should each be a list of the form: |
17334 | 868 |
59385
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
869 (SYMBOL EXP [NOW [REQUEST [COMMENT]]]) |
17334 | 870 |
59385
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
871 This stores EXP (without evaluating it) as the saved value for SYMBOL. |
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
872 If NOW is present and non-nil, then also evaluate EXP and set |
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
873 the default value for the SYMBOL to the value of EXP. |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
874 |
59385
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
875 REQUEST is a list of features we must require in order to |
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
876 handle SYMBOL properly. |
25683 | 877 COMMENT is a comment string about SYMBOL." |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
878 (apply 'custom-theme-set-variables 'user args)) |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
879 |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
880 (defun custom-theme-set-variables (theme &rest args) |
59385
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
881 "Initialize variables for theme THEME according to settings in ARGS. |
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
882 Each of the arguments in ARGS should be a list of this form: |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
883 |
59385
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
884 (SYMBOL EXP [NOW [REQUEST [COMMENT]]]) |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
885 |
59385
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
886 This stores EXP (without evaluating it) as the saved value for SYMBOL. |
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
887 If NOW is present and non-nil, then also evaluate EXP and set |
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
888 the default value for the SYMBOL to the value of EXP. |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
889 |
59385
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
890 REQUEST is a list of features we must require in order to |
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
891 handle SYMBOL properly. |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
892 COMMENT is a comment string about SYMBOL. |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
893 |
59385
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
894 EXP itself is saved unevaluated as SYMBOL property `saved-value' and |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
895 in SYMBOL's list property `theme-value' \(using `custom-push-theme')." |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
896 (custom-check-theme theme) |
72580
2da08bd76792
(custom-theme-set-variables): Autoload packages before sorting the variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71954
diff
changeset
|
897 |
2da08bd76792
(custom-theme-set-variables): Autoload packages before sorting the variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71954
diff
changeset
|
898 ;; Process all the needed autoloads before anything else, so that the |
2da08bd76792
(custom-theme-set-variables): Autoload packages before sorting the variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71954
diff
changeset
|
899 ;; subsequent code has all the info it needs (e.g. which var corresponds |
2da08bd76792
(custom-theme-set-variables): Autoload packages before sorting the variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71954
diff
changeset
|
900 ;; to a minor mode), regardless of the ordering of the variables. |
2da08bd76792
(custom-theme-set-variables): Autoload packages before sorting the variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71954
diff
changeset
|
901 (dolist (entry args) |
2da08bd76792
(custom-theme-set-variables): Autoload packages before sorting the variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71954
diff
changeset
|
902 (let* ((symbol (indirect-variable (nth 0 entry)))) |
2da08bd76792
(custom-theme-set-variables): Autoload packages before sorting the variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71954
diff
changeset
|
903 (unless (or (get symbol 'standard-value) |
2da08bd76792
(custom-theme-set-variables): Autoload packages before sorting the variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71954
diff
changeset
|
904 (memq (get symbol 'custom-autoload) '(nil noset))) |
2da08bd76792
(custom-theme-set-variables): Autoload packages before sorting the variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71954
diff
changeset
|
905 ;; This symbol needs to be autoloaded, even just for a `set'. |
2da08bd76792
(custom-theme-set-variables): Autoload packages before sorting the variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71954
diff
changeset
|
906 (custom-load-symbol symbol)))) |
80075
23de7844a977
(custom-theme-set-variables): Sort symbols that are
Glenn Morris <rgm@gnu.org>
parents:
79721
diff
changeset
|
907 |
72580
2da08bd76792
(custom-theme-set-variables): Autoload packages before sorting the variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71954
diff
changeset
|
908 ;; Move minor modes and variables with explicit requires to the end. |
60413
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
909 (setq args |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
910 (sort args |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
911 (lambda (a1 a2) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
912 (let* ((sym1 (car a1)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
913 (sym2 (car a2)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
914 (1-then-2 (memq sym1 (get sym2 'custom-dependencies))) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
915 (2-then-1 (memq sym2 (get sym1 'custom-dependencies)))) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
916 (cond ((and 1-then-2 2-then-1) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
917 (error "Circular custom dependency between `%s' and `%s'" |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
918 sym1 sym2)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
919 (2-then-1 nil) |
80075
23de7844a977
(custom-theme-set-variables): Sort symbols that are
Glenn Morris <rgm@gnu.org>
parents:
79721
diff
changeset
|
920 ;; 1 is a dependency of 2, so needs to be set first. |
23de7844a977
(custom-theme-set-variables): Sort symbols that are
Glenn Morris <rgm@gnu.org>
parents:
79721
diff
changeset
|
921 (1-then-2) |
65093
1aae62fd4a80
(custom-theme-set-variables): Sort minor modes last.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
922 ;; Put minor modes and symbols with :require last. |
1aae62fd4a80
(custom-theme-set-variables): Sort minor modes last.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
923 ;; Putting minor modes last ensures that the mode |
1aae62fd4a80
(custom-theme-set-variables): Sort minor modes last.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
924 ;; function will see other customized values rather |
1aae62fd4a80
(custom-theme-set-variables): Sort minor modes last.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
925 ;; than default values. |
1aae62fd4a80
(custom-theme-set-variables): Sort minor modes last.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
926 (t (or (nth 3 a2) |
1aae62fd4a80
(custom-theme-set-variables): Sort minor modes last.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
927 (eq (get sym2 'custom-set) |
1aae62fd4a80
(custom-theme-set-variables): Sort minor modes last.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
928 'custom-set-minor-mode)))))))) |
60413
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
929 (while args |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
930 (let ((entry (car args))) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
931 (if (listp entry) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
932 (let* ((symbol (indirect-variable (nth 0 entry))) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
933 (value (nth 1 entry)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
934 (now (nth 2 entry)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
935 (requests (nth 3 entry)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
936 (comment (nth 4 entry)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
937 set) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
938 (when requests |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
939 (put symbol 'custom-requests requests) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
940 (mapc 'require requests)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
941 (setq set (or (get symbol 'custom-set) 'custom-set-default)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
942 (put symbol 'saved-value (list value)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
943 (put symbol 'saved-variable-comment comment) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
944 (custom-push-theme 'theme-value symbol theme 'set value) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
945 ;; Allow for errors in the case where the setter has |
31362
652b5c65769a
(custom-set-variables): Print message about errors in
Dave Love <fx@gnu.org>
parents:
29761
diff
changeset
|
946 ;; changed between versions, say, but let the user know. |
652b5c65769a
(custom-set-variables): Print message about errors in
Dave Love <fx@gnu.org>
parents:
29761
diff
changeset
|
947 (condition-case data |
24438
4a78f6354310
(custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents:
23354
diff
changeset
|
948 (cond (now |
4a78f6354310
(custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents:
23354
diff
changeset
|
949 ;; Rogue variable, set it now. |
4a78f6354310
(custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents:
23354
diff
changeset
|
950 (put symbol 'force-value t) |
4a78f6354310
(custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents:
23354
diff
changeset
|
951 (funcall set symbol (eval value))) |
4a78f6354310
(custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents:
23354
diff
changeset
|
952 ((default-boundp symbol) |
4a78f6354310
(custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents:
23354
diff
changeset
|
953 ;; Something already set this, overwrite it. |
4a78f6354310
(custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents:
23354
diff
changeset
|
954 (funcall set symbol (eval value)))) |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49522
diff
changeset
|
955 (error |
31362
652b5c65769a
(custom-set-variables): Print message about errors in
Dave Love <fx@gnu.org>
parents:
29761
diff
changeset
|
956 (message "Error setting %s: %s" symbol data))) |
60413
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
957 (setq args (cdr args)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
958 (and (or now (default-boundp symbol)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
959 (put symbol 'variable-comment comment))) |
71954
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
960 ;; I believe this is dead-code, because the `sort' code above would |
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
961 ;; have burped before we could get here. --Stef |
60413
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
962 ;; Old format, a plist of SYMBOL VALUE pairs. |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
963 (message "Warning: old format `custom-set-variables'") |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
964 (ding) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
965 (sit-for 2) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
966 (let ((symbol (indirect-variable (nth 0 args))) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
967 (value (nth 1 args))) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
968 (put symbol 'saved-value (list value)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
969 (custom-push-theme 'theme-value symbol theme 'set value)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
970 (setq args (cdr (cdr args))))))) |
17334 | 971 |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
972 |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
973 ;;; Defining themes. |
44683
17031c88f781
(customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents:
42556
diff
changeset
|
974 |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
975 ;; A theme file should be named `THEME-theme.el' (where THEME is the theme |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
976 ;; name), and found in either `custom-theme-directory' or the load path. |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
977 ;; It has the following format: |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
978 ;; |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
979 ;; (deftheme THEME |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
980 ;; DOCSTRING) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
981 ;; |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
982 ;; (custom-theme-set-variables |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
983 ;; 'THEME |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
984 ;; [THEME-VARIABLES]) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
985 ;; |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
986 ;; (custom-theme-set-faces |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
987 ;; 'THEME |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
988 ;; [THEME-FACES]) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
989 ;; |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
990 ;; (provide-theme 'THEME) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
991 |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
992 |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
993 ;; The IGNORED arguments to deftheme come from the XEmacs theme code, where |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
994 ;; they were used to supply keyword-value pairs like `:immediate', |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
995 ;; `:variable-reset-string', etc. We don't use any of these, so ignore them. |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
996 |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
997 (defmacro deftheme (theme &optional doc &rest ignored) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
998 "Declare THEME to be a Custom theme. |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
999 The optional argument DOC is a doc string describing the theme. |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1000 |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1001 Any theme `foo' should be defined in a file called `foo-theme.el'; |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1002 see `custom-make-theme-feature' for more information." |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1003 (let ((feature (custom-make-theme-feature theme))) |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1004 ;; It is better not to use backquote in this file, |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1005 ;; because that makes a bootstrapping problem |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1006 ;; if you need to recompile all the Lisp files using interpreted code. |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1007 (list 'custom-declare-theme (list 'quote theme) (list 'quote feature) doc))) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1008 |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1009 (defun custom-declare-theme (theme feature &optional doc &rest ignored) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1010 "Like `deftheme', but THEME is evaluated as a normal argument. |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1011 FEATURE is the feature this theme provides. Normally, this is a symbol |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1012 created from THEME by `custom-make-theme-feature'." |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1013 (if (memq theme '(user changed)) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1014 (error "Custom theme cannot be named %S" theme)) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1015 (add-to-list 'custom-known-themes theme) |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1016 (put theme 'theme-feature feature) |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1017 (when doc (put theme 'theme-documentation doc))) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1018 |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1019 (defun custom-make-theme-feature (theme) |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1020 "Given a symbol THEME, create a new symbol by appending \"-theme\". |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1021 Store this symbol in the `theme-feature' property of THEME. |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1022 Calling `provide-theme' to provide THEME actually puts `THEME-theme' |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1023 into `features'. |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1024 |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1025 This allows for a file-name convention for autoloading themes: |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1026 Every theme X has a property `provide-theme' whose value is \"X-theme\". |
65334
2c6c9fd9d86b
*** empty log message ***
Chong Yidong <cyd@stupidchicken.com>
parents:
65093
diff
changeset
|
1027 \(load-theme X) then attempts to load the file `X-theme.el'." |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1028 (intern (concat (symbol-name theme) "-theme"))) |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1029 |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1030 ;;; Loading themes. |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1031 |
63927
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
1032 (defcustom custom-theme-directory |
81342
cabb2521cfd3
(custom-theme-directory): Use user-emacs-directory.
Chong Yidong <cyd@stupidchicken.com>
parents:
77487
diff
changeset
|
1033 user-emacs-directory |
63927
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
1034 "Directory in which Custom theme files should be written. |
65334
2c6c9fd9d86b
*** empty log message ***
Chong Yidong <cyd@stupidchicken.com>
parents:
65093
diff
changeset
|
1035 `load-theme' searches this directory in addition to load-path. |
63927
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
1036 The command `customize-create-theme' writes the files it produces |
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
1037 into this directory." |
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
1038 :type 'string |
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
1039 :group 'customize |
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
1040 :version "22.1") |
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
1041 |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1042 (defun provide-theme (theme) |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1043 "Indicate that this file provides THEME. |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1044 This calls `provide' to provide the feature name stored in THEME's |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1045 property `theme-feature' (which is usually a symbol created by |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1046 `custom-make-theme-feature')." |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1047 (if (memq theme '(user changed)) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1048 (error "Custom theme cannot be named %S" theme)) |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1049 (custom-check-theme theme) |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1050 (provide (get theme 'theme-feature)) |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1051 ;; Loading a theme also enables it. |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1052 (push theme custom-enabled-themes) |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1053 ;; `user' must always be the highest-precedence enabled theme. |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1054 ;; Make that remain true. (This has the effect of making user settings |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1055 ;; override the ones just loaded, too.) |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1056 (let ((custom-enabling-themes t)) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1057 (enable-theme 'user))) |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1058 |
65334
2c6c9fd9d86b
*** empty log message ***
Chong Yidong <cyd@stupidchicken.com>
parents:
65093
diff
changeset
|
1059 (defun load-theme (theme) |
68020
d8acae190ef7
* cus-edit.el (custom-reset-menu, custom-reset, Custom-mode-menu)
Chong Yidong <cyd@stupidchicken.com>
parents:
67980
diff
changeset
|
1060 "Load a theme's settings from its file. |
65334
2c6c9fd9d86b
*** empty log message ***
Chong Yidong <cyd@stupidchicken.com>
parents:
65093
diff
changeset
|
1061 This also enables the theme; use `disable-theme' to disable it." |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1062 ;; Note we do no check for validity of the theme here. |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1063 ;; This allows to pull in themes by a file-name convention |
65334
2c6c9fd9d86b
*** empty log message ***
Chong Yidong <cyd@stupidchicken.com>
parents:
65093
diff
changeset
|
1064 (interactive "SCustom theme name: ") |
68020
d8acae190ef7
* cus-edit.el (custom-reset-menu, custom-reset, Custom-mode-menu)
Chong Yidong <cyd@stupidchicken.com>
parents:
67980
diff
changeset
|
1065 ;; If reloading, clear out the old theme settings. |
d8acae190ef7
* cus-edit.el (custom-reset-menu, custom-reset, Custom-mode-menu)
Chong Yidong <cyd@stupidchicken.com>
parents:
67980
diff
changeset
|
1066 (when (custom-theme-p theme) |
d8acae190ef7
* cus-edit.el (custom-reset-menu, custom-reset, Custom-mode-menu)
Chong Yidong <cyd@stupidchicken.com>
parents:
67980
diff
changeset
|
1067 (disable-theme theme) |
d8acae190ef7
* cus-edit.el (custom-reset-menu, custom-reset, Custom-mode-menu)
Chong Yidong <cyd@stupidchicken.com>
parents:
67980
diff
changeset
|
1068 (put theme 'theme-settings nil) |
d8acae190ef7
* cus-edit.el (custom-reset-menu, custom-reset, Custom-mode-menu)
Chong Yidong <cyd@stupidchicken.com>
parents:
67980
diff
changeset
|
1069 (put theme 'theme-feature nil) |
d8acae190ef7
* cus-edit.el (custom-reset-menu, custom-reset, Custom-mode-menu)
Chong Yidong <cyd@stupidchicken.com>
parents:
67980
diff
changeset
|
1070 (put theme 'theme-documentation nil)) |
63927
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
1071 (let ((load-path (if (file-directory-p custom-theme-directory) |
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
1072 (cons custom-theme-directory load-path) |
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
1073 load-path))) |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1074 (load (symbol-name (custom-make-theme-feature theme))))) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1075 |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1076 ;;; Enabling and disabling loaded themes. |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1077 |
67962
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1078 (defvar custom-enabling-themes nil) |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1079 |
65334
2c6c9fd9d86b
*** empty log message ***
Chong Yidong <cyd@stupidchicken.com>
parents:
65093
diff
changeset
|
1080 (defun enable-theme (theme) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1081 "Reenable all variable and face settings defined by THEME. |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1082 The newly enabled theme gets the highest precedence (after `user'). |
67123
6e41569f62c8
* custom.el (enable-theme): Signal error if argument is not a
Chong Yidong <cyd@stupidchicken.com>
parents:
67064
diff
changeset
|
1083 If it is already enabled, just give it highest precedence (after `user'). |
6e41569f62c8
* custom.el (enable-theme): Signal error if argument is not a
Chong Yidong <cyd@stupidchicken.com>
parents:
67064
diff
changeset
|
1084 |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1085 If THEME does not specify any theme settings, this tries to load |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1086 the theme from its theme file, by calling `load-theme'." |
65334
2c6c9fd9d86b
*** empty log message ***
Chong Yidong <cyd@stupidchicken.com>
parents:
65093
diff
changeset
|
1087 (interactive "SEnable Custom theme: ") |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1088 (if (not (custom-theme-p theme)) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1089 (load-theme theme) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1090 ;; This could use a bit of optimization -- cyd |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1091 (let ((settings (get theme 'theme-settings))) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1092 (dolist (s settings) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1093 (let* ((prop (car s)) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1094 (symbol (cadr s)) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1095 (spec-list (get symbol prop))) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1096 (put symbol prop (cons (cddr s) (assq-delete-all theme spec-list))) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1097 (if (eq prop 'theme-value) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1098 (custom-theme-recalc-variable symbol) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1099 (custom-theme-recalc-face symbol))))) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1100 (unless (eq theme 'user) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1101 (setq custom-enabled-themes |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1102 (cons theme (delq theme custom-enabled-themes))) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1103 (unless custom-enabling-themes |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1104 (enable-theme 'user))))) |
67962
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1105 |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1106 (defcustom custom-enabled-themes nil |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1107 "List of enabled Custom Themes, highest precedence first. |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1108 |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1109 This does not include the `user' theme, which is set by Customize, |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1110 and always takes precedence over other Custom Themes." |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1111 :group 'customize |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1112 :type '(repeat symbol) |
80075
23de7844a977
(custom-theme-set-variables): Sort symbols that are
Glenn Morris <rgm@gnu.org>
parents:
79721
diff
changeset
|
1113 :set-after '(custom-theme-directory) ; so we can find the themes |
67962
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1114 :set (lambda (symbol themes) |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1115 ;; Avoid an infinite loop when custom-enabled-themes is |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1116 ;; defined in a theme (e.g. `user'). Enabling the theme sets |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1117 ;; custom-enabled-themes, which enables the theme... |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1118 (unless custom-enabling-themes |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1119 (let ((custom-enabling-themes t) failures) |
67962
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1120 (setq themes (delq 'user (delete-dups themes))) |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1121 (if (boundp symbol) |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1122 (dolist (theme (symbol-value symbol)) |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1123 (if (not (memq theme themes)) |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1124 (disable-theme theme)))) |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1125 (dolist (theme (reverse themes)) |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1126 (condition-case nil |
67962
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1127 (enable-theme theme) |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1128 (error (progn (push theme failures) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1129 (setq themes (delq theme themes)))))) |
67962
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1130 (enable-theme 'user) |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1131 (custom-set-default symbol themes) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1132 (if failures |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1133 (message "Failed to enable themes: %s" |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1134 (mapconcat 'symbol-name failures " "))))))) |
67962
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1135 |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1136 (defsubst custom-theme-enabled-p (theme) |
67962
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1137 "Return non-nil if THEME is enabled." |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1138 (memq theme custom-enabled-themes)) |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1139 |
65334
2c6c9fd9d86b
*** empty log message ***
Chong Yidong <cyd@stupidchicken.com>
parents:
65093
diff
changeset
|
1140 (defun disable-theme (theme) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1141 "Disable all variable and face settings defined by THEME. |
67962
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1142 See `custom-enabled-themes' for a list of enabled themes." |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1143 (interactive (list (intern |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1144 (completing-read |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1145 "Disable Custom theme: " |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1146 (mapcar 'symbol-name custom-enabled-themes) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1147 nil t)))) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1148 (when (custom-theme-enabled-p theme) |
67943
6130ad6751ca
(custom-load-themes): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents:
67798
diff
changeset
|
1149 (let ((settings (get theme 'theme-settings))) |
6130ad6751ca
(custom-load-themes): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents:
67798
diff
changeset
|
1150 (dolist (s settings) |
6130ad6751ca
(custom-load-themes): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents:
67798
diff
changeset
|
1151 (let* ((prop (car s)) |
6130ad6751ca
(custom-load-themes): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents:
67798
diff
changeset
|
1152 (symbol (cadr s)) |
6130ad6751ca
(custom-load-themes): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents:
67798
diff
changeset
|
1153 (spec-list (get symbol prop))) |
6130ad6751ca
(custom-load-themes): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents:
67798
diff
changeset
|
1154 (put symbol prop (assq-delete-all theme spec-list)) |
6130ad6751ca
(custom-load-themes): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents:
67798
diff
changeset
|
1155 (if (eq prop 'theme-value) |
6130ad6751ca
(custom-load-themes): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents:
67798
diff
changeset
|
1156 (custom-theme-recalc-variable symbol) |
67962
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1157 (custom-theme-recalc-face symbol))))) |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1158 (setq custom-enabled-themes |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1159 (delq theme custom-enabled-themes)))) |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1160 |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1161 (defun custom-variable-theme-value (variable) |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1162 "Return (list VALUE) indicating the custom theme value of VARIABLE. |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1163 That is to say, it specifies what the value should be according to |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1164 currently enabled custom themes. |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1165 |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1166 This function returns nil if no custom theme specifies a value for VARIABLE." |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1167 (let* ((theme-value (get variable 'theme-value))) |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1168 (if theme-value |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1169 (cdr (car theme-value))))) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1170 |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1171 (defun custom-theme-recalc-variable (variable) |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1172 "Set VARIABLE according to currently enabled custom themes." |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1173 (let ((valspec (custom-variable-theme-value variable))) |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1174 (if valspec |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1175 (put variable 'saved-value valspec) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1176 (setq valspec (get variable 'standard-value))) |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1177 (if (and valspec |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1178 (or (get variable 'force-value) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1179 (default-boundp variable))) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1180 (funcall (or (get variable 'custom-set) 'set-default) variable |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1181 (eval (car valspec)))))) |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1182 |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1183 (defun custom-theme-recalc-face (face) |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1184 "Set FACE according to currently enabled custom themes." |
67962
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1185 (if (facep face) |
87820
b0b5bf68e061
Richard Stallman <rms at gnu.org>
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
1186 (face-spec-set face |
b0b5bf68e061
Richard Stallman <rms at gnu.org>
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
1187 (get (or (get face 'face-alias) face) |
b0b5bf68e061
Richard Stallman <rms at gnu.org>
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
1188 'face-override-spec)))) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1189 |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1190 ;;; XEmacs compability functions |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1191 |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1192 ;; In XEmacs, when you reset a Custom Theme, you have to specify the |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1193 ;; theme to reset it to. We just apply the next available theme, so |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1194 ;; just ignore the IGNORED arguments. |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1195 |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1196 (defun custom-theme-reset-variables (theme &rest args) |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1197 "Reset some variable settings in THEME to their values in other themes. |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1198 Each of the arguments ARGS has this form: |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1199 |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1200 (VARIABLE IGNORED) |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1201 |
67980 | 1202 This means reset VARIABLE. (The argument IGNORED is ignored)." |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1203 (custom-check-theme theme) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1204 (dolist (arg args) |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1205 (custom-push-theme 'theme-value (car arg) theme 'reset))) |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1206 |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1207 (defun custom-reset-variables (&rest args) |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1208 "Reset the specs of some variables to their values in other themes. |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1209 This creates settings in the `user' theme. |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1210 |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1211 Each of the arguments ARGS has this form: |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1212 |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1213 (VARIABLE IGNORED) |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1214 |
67980 | 1215 This means reset VARIABLE. (The argument IGNORED is ignored)." |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1216 (apply 'custom-theme-reset-variables 'user args)) |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1217 |
17334 | 1218 ;;; The End. |
1219 | |
18882
539611251037
(custom-declare-variable-list): Process already-declared
Richard M. Stallman <rms@gnu.org>
parents:
18033
diff
changeset
|
1220 ;; Process the defcustoms for variables loaded before this file. |
539611251037
(custom-declare-variable-list): Process already-declared
Richard M. Stallman <rms@gnu.org>
parents:
18033
diff
changeset
|
1221 (while custom-declare-variable-list |
539611251037
(custom-declare-variable-list): Process already-declared
Richard M. Stallman <rms@gnu.org>
parents:
18033
diff
changeset
|
1222 (apply 'custom-declare-variable (car custom-declare-variable-list)) |
539611251037
(custom-declare-variable-list): Process already-declared
Richard M. Stallman <rms@gnu.org>
parents:
18033
diff
changeset
|
1223 (setq custom-declare-variable-list (cdr custom-declare-variable-list))) |
539611251037
(custom-declare-variable-list): Process already-declared
Richard M. Stallman <rms@gnu.org>
parents:
18033
diff
changeset
|
1224 |
17334 | 1225 (provide 'custom) |
1226 | |
60413
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
1227 ;; arch-tag: 041b6116-aabe-4f9a-902d-74092bc3dab2 |
25683 | 1228 ;;; custom.el ends here |