Mercurial > emacs
annotate lisp/custom.el @ 92228:0d777f362195
*** empty log message ***
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Tue, 26 Feb 2008 04:31:30 +0000 |
parents | f991f10f15ec |
children | ee5932bf781d |
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, |
79721 | 4 ;; 2005, 2006, 2007, 2008 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 | |
12 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
13 ;; it under the terms of the GNU General Public License as published by | |
78236
9355f9b7bbff
Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents:
77487
diff
changeset
|
14 ;; the Free Software Foundation; either version 3, or (at your option) |
17520 | 15 ;; any later version. |
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 | |
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the | |
64091 | 24 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
25 ;; Boston, MA 02110-1301, USA. | |
17520 | 26 |
17334 | 27 ;;; Commentary: |
28 ;; | |
48238
b6f8e90bc592
Fix typos in Commentary section.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
47822
diff
changeset
|
29 ;; This file only contains the code needed to declare and initialize |
17334 | 30 ;; user options. The code to customize options is autoloaded from |
25683 | 31 ;; `cus-edit.el' and is documented in the Emacs Lisp Reference manual. |
17334 | 32 |
48238
b6f8e90bc592
Fix typos in Commentary section.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
47822
diff
changeset
|
33 ;; The code implementing face declarations is in `cus-face.el'. |
17334 | 34 |
35 ;;; Code: | |
36 | |
37 (require 'widget) | |
38 | |
17415 | 39 (defvar custom-define-hook nil |
40 ;; Customize information for this option is in `cus-edit.el'. | |
41 "Hook called after defining each customize option.") | |
42 | |
47570
b65cc673fb00
(custom-dont-initialize): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
45366
diff
changeset
|
43 (defvar custom-dont-initialize nil |
b65cc673fb00
(custom-dont-initialize): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
45366
diff
changeset
|
44 "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
|
45 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
|
46 Users should not set it.") |
b65cc673fb00
(custom-dont-initialize): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
45366
diff
changeset
|
47 |
41224
fc0e6d3f905d
(custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39981
diff
changeset
|
48 (defvar custom-current-group-alist nil |
fc0e6d3f905d
(custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39981
diff
changeset
|
49 "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
|
50 |
17334 | 51 ;;; The `defcustom' Macro. |
52 | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
53 (defun custom-initialize-default (symbol value) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
54 "Initialize SYMBOL with VALUE. |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
55 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
|
56 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
|
57 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
|
58 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
|
59 symbol." |
17415 | 60 (unless (default-boundp symbol) |
18033
bccd356a3b7c
Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17949
diff
changeset
|
61 ;; Use the saved value if it exists, otherwise the standard setting. |
17334 | 62 (set-default symbol (if (get symbol 'saved-value) |
63 (eval (car (get symbol 'saved-value))) | |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
64 (eval value))))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
65 |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
66 (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
|
67 "Initialize SYMBOL based on VALUE. |
e9d8fcec9843
(custom-declare-variable): Use custom-initialize-reset
Richard M. Stallman <rms@gnu.org>
parents:
19516
diff
changeset
|
68 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
|
69 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
|
70 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
|
71 if any, or VALUE." |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
72 (unless (default-boundp symbol) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
73 (funcall (or (get symbol 'custom-set) 'set-default) |
25683 | 74 symbol |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
75 (if (get symbol 'saved-value) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
76 (eval (car (get symbol 'saved-value))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
77 (eval value))))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
78 |
64200
25277c60733f
(custom-initialize-safe-set, custom-initialize-safe-default): New functions.
Luc Teirlinck <teirllm@auburn.edu>
parents:
64149
diff
changeset
|
79 (defun custom-initialize-safe-set (symbol value) |
25277c60733f
(custom-initialize-safe-set, custom-initialize-safe-default): New functions.
Luc Teirlinck <teirllm@auburn.edu>
parents:
64149
diff
changeset
|
80 "Like `custom-initialize-set', but catches errors. |
25277c60733f
(custom-initialize-safe-set, custom-initialize-safe-default): New functions.
Luc Teirlinck <teirllm@auburn.edu>
parents:
64149
diff
changeset
|
81 If an error occurs during initialization, SYMBOL is set to nil |
25277c60733f
(custom-initialize-safe-set, custom-initialize-safe-default): New functions.
Luc Teirlinck <teirllm@auburn.edu>
parents:
64149
diff
changeset
|
82 and no error is thrown. This is meant for use in pre-loaded files |
64302
8bf3ae544cd2
(custom-initialize-safe-set, custom-initialize-safe-default): Further doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
64299
diff
changeset
|
83 where some variables or functions used to compute VALUE may not yet |
64303 | 84 be defined. You can then re-evaluate VALUE in startup.el, for instance |
64299
840e01598f66
(custom-initialize-safe-set, custom-initialize-safe-default): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
64239
diff
changeset
|
85 using `custom-reevaluate-setting'." |
64200
25277c60733f
(custom-initialize-safe-set, custom-initialize-safe-default): New functions.
Luc Teirlinck <teirllm@auburn.edu>
parents:
64149
diff
changeset
|
86 (condition-case nil |
25277c60733f
(custom-initialize-safe-set, custom-initialize-safe-default): New functions.
Luc Teirlinck <teirllm@auburn.edu>
parents:
64149
diff
changeset
|
87 (custom-initialize-set symbol value) |
25277c60733f
(custom-initialize-safe-set, custom-initialize-safe-default): New functions.
Luc Teirlinck <teirllm@auburn.edu>
parents:
64149
diff
changeset
|
88 (error (set-default symbol nil)))) |
25277c60733f
(custom-initialize-safe-set, custom-initialize-safe-default): New functions.
Luc Teirlinck <teirllm@auburn.edu>
parents:
64149
diff
changeset
|
89 |
25277c60733f
(custom-initialize-safe-set, custom-initialize-safe-default): New functions.
Luc Teirlinck <teirllm@auburn.edu>
parents:
64149
diff
changeset
|
90 (defun custom-initialize-safe-default (symbol value) |
25277c60733f
(custom-initialize-safe-set, custom-initialize-safe-default): New functions.
Luc Teirlinck <teirllm@auburn.edu>
parents:
64149
diff
changeset
|
91 "Like `custom-initialize-default', but catches errors. |
25277c60733f
(custom-initialize-safe-set, custom-initialize-safe-default): New functions.
Luc Teirlinck <teirllm@auburn.edu>
parents:
64149
diff
changeset
|
92 If an error occurs during initialization, SYMBOL is set to nil |
25277c60733f
(custom-initialize-safe-set, custom-initialize-safe-default): New functions.
Luc Teirlinck <teirllm@auburn.edu>
parents:
64149
diff
changeset
|
93 and no error is thrown. This is meant for use in pre-loaded files |
64302
8bf3ae544cd2
(custom-initialize-safe-set, custom-initialize-safe-default): Further doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
64299
diff
changeset
|
94 where some variables or functions used to compute VALUE may not yet |
64303 | 95 be defined. You can then re-evaluate VALUE in startup.el, for instance |
64299
840e01598f66
(custom-initialize-safe-set, custom-initialize-safe-default): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
64239
diff
changeset
|
96 using `custom-reevaluate-setting'." |
64200
25277c60733f
(custom-initialize-safe-set, custom-initialize-safe-default): New functions.
Luc Teirlinck <teirllm@auburn.edu>
parents:
64149
diff
changeset
|
97 (condition-case nil |
25277c60733f
(custom-initialize-safe-set, custom-initialize-safe-default): New functions.
Luc Teirlinck <teirllm@auburn.edu>
parents:
64149
diff
changeset
|
98 (custom-initialize-default symbol value) |
25277c60733f
(custom-initialize-safe-set, custom-initialize-safe-default): New functions.
Luc Teirlinck <teirllm@auburn.edu>
parents:
64149
diff
changeset
|
99 (error (set-default symbol nil)))) |
25277c60733f
(custom-initialize-safe-set, custom-initialize-safe-default): New functions.
Luc Teirlinck <teirllm@auburn.edu>
parents:
64149
diff
changeset
|
100 |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
101 (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
|
102 "Initialize SYMBOL based on VALUE. |
e9d8fcec9843
(custom-declare-variable): Use custom-initialize-reset
Richard M. Stallman <rms@gnu.org>
parents:
19516
diff
changeset
|
103 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
|
104 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
|
105 \(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
|
106 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
|
107 or (last of all) VALUE." |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
108 (funcall (or (get symbol 'custom-set) 'set-default) |
25683 | 109 symbol |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
110 (cond ((default-boundp symbol) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
111 (funcall (or (get symbol 'custom-get) 'default-value) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
112 symbol)) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
113 ((get symbol 'saved-value) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
114 (eval (car (get symbol 'saved-value)))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
115 (t |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
116 (eval value))))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
117 |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
118 (defun custom-initialize-changed (symbol value) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
119 "Initialize SYMBOL with VALUE. |
36269
9a470a7db563
(custom-initialize-changed, defcustom): Doc fix.
Dave Love <fx@gnu.org>
parents:
33027
diff
changeset
|
120 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
|
121 not using the standard setting. |
36269
9a470a7db563
(custom-initialize-changed, defcustom): Doc fix.
Dave Love <fx@gnu.org>
parents:
33027
diff
changeset
|
122 For the standard setting, use `set-default'." |
17550
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
123 (cond ((default-boundp symbol) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
124 (funcall (or (get symbol 'custom-set) 'set-default) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
125 symbol |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
126 (funcall (or (get symbol 'custom-get) 'default-value) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
127 symbol))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
128 ((get symbol 'saved-value) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
129 (funcall (or (get symbol 'custom-set) 'set-default) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
130 symbol |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
131 (eval (car (get symbol 'saved-value))))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
132 (t |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
133 (set-default symbol (eval value))))) |
d6545cfb6c5a
Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
17529
diff
changeset
|
134 |
19516
6591f294b265
(custom-declare-variable): Rename 2nd arg to DEFAULT.
Richard M. Stallman <rms@gnu.org>
parents:
18882
diff
changeset
|
135 (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
|
136 "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
|
137 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
|
138 not the default value itself. |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
139 |
64226
278c7e4c078a
(custom-declare-variable): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
64221
diff
changeset
|
140 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
|
141 `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
|
142 set to nil, as the value is no longer rogue." |
19516
6591f294b265
(custom-declare-variable): Rename 2nd arg to DEFAULT.
Richard M. Stallman <rms@gnu.org>
parents:
18882
diff
changeset
|
143 (put symbol 'standard-value (list default)) |
17415 | 144 ;; Maybe this option was rogue in an earlier version. It no longer is. |
145 (when (get symbol 'force-value) | |
146 (put symbol 'force-value nil)) | |
17334 | 147 (when doc |
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." |
66399
65d160cfd8f2
(defface, defcustom): Add `doc-string' declaration.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
65480
diff
changeset
|
309 (declare (doc-string 3)) |
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) | |
419 (put symbol 'custom-prefix value)) | |
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) |
fc0e6d3f905d
(custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39981
diff
changeset
|
426 (push (cons load-file-name symbol) custom-current-group-alist))) |
17334 | 427 (run-hooks 'custom-define-hook) |
428 symbol) | |
429 | |
430 (defmacro defgroup (symbol members doc &rest args) | |
431 "Declare SYMBOL as a customization group containing MEMBERS. | |
432 SYMBOL does not need to be quoted. | |
433 | |
434 Third arg DOC is the group documentation. | |
435 | |
436 MEMBERS should be an alist of the form ((NAME WIDGET)...) where | |
20599 | 437 NAME is a symbol and WIDGET is a widget for editing that symbol. |
438 Useful widgets are `custom-variable' for editing variables, | |
17334 | 439 `custom-face' for edit faces, and `custom-group' for editing groups. |
440 | |
441 The remaining arguments should have the form | |
442 | |
25683 | 443 [KEYWORD VALUE]... |
17334 | 444 |
69925
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
445 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
|
446 `defcustom'. |
29761 | 447 |
69925
9319f873855b
(defcustom): Create Common Keywords section in docstring.
Bill Wohler <wohler@newt.com>
parents:
69922
diff
changeset
|
448 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
|
449 for more information." |
67058
65266d675973
(defgroup): Add doc-string-elt info.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66399
diff
changeset
|
450 (declare (doc-string 3)) |
21703
aea35bf72489
(defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
20599
diff
changeset
|
451 ;; 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
|
452 ;; because that makes a bootstrapping problem |
aea35bf72489
(defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
20599
diff
changeset
|
453 ;; 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
|
454 (nconc (list 'custom-declare-group (list 'quote symbol) members doc) args)) |
17334 | 455 |
456 (defun custom-add-to-group (group option widget) | |
457 "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
|
458 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
|
459 (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
|
460 (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
|
461 (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
|
462 (put group 'custom-group (nconc members (list entry)))))) |
17334 | 463 |
47822
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
464 (defun custom-group-of-mode (mode) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
465 "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
|
466 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
|
467 (or (get mode 'custom-mode-group) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
468 (if (or (get mode 'custom-group) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
469 (and (string-match "-mode\\'" (symbol-name mode)) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
470 (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
|
471 0 (match-beginning 0)))) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
472 'custom-group))) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
473 mode))) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
474 |
17334 | 475 ;;; Properties. |
476 | |
477 (defun custom-handle-all-keywords (symbol args type) | |
478 "For customization option SYMBOL, handle keyword arguments ARGS. | |
479 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
|
480 (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
|
481 (custom-add-to-group (custom-current-group) symbol type)) |
25683 | 482 (while args |
17334 | 483 (let ((arg (car args))) |
484 (setq args (cdr args)) | |
485 (unless (symbolp arg) | |
486 (error "Junk in args %S" args)) | |
487 (let ((keyword arg) | |
488 (value (car args))) | |
489 (unless args | |
490 (error "Keyword %s is missing an argument" keyword)) | |
491 (setq args (cdr args)) | |
25683 | 492 (custom-handle-keyword symbol keyword value type))))) |
17334 | 493 |
494 (defun custom-handle-keyword (symbol keyword value type) | |
495 "For customization option SYMBOL, handle KEYWORD with VALUE. | |
496 Fourth argument TYPE is the custom option type." | |
26582
fbd1f4d3000d
(custom-declare-group): Purecopy DOC.
Dave Love <fx@gnu.org>
parents:
25888
diff
changeset
|
497 (if purify-flag |
fbd1f4d3000d
(custom-declare-group): Purecopy DOC.
Dave Love <fx@gnu.org>
parents:
25888
diff
changeset
|
498 (setq value (purecopy value))) |
17334 | 499 (cond ((eq keyword :group) |
500 (custom-add-to-group value symbol type)) | |
20445
20ff88ac8cc2
(custom-add-version): New function.
Karl Heuer <kwzh@gnu.org>
parents:
19535
diff
changeset
|
501 ((eq keyword :version) |
20ff88ac8cc2
(custom-add-version): New function.
Karl Heuer <kwzh@gnu.org>
parents:
19535
diff
changeset
|
502 (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
|
503 ((eq keyword :package-version) |
dc1f0ab7e276
* custom.el (defcustom, custom-handle-keyword): Add :package-version
Bill Wohler <wohler@newt.com>
parents:
69624
diff
changeset
|
504 (custom-add-package-version symbol value)) |
17334 | 505 ((eq keyword :link) |
506 (custom-add-link symbol value)) | |
507 ((eq keyword :load) | |
508 (custom-add-load symbol value)) | |
509 ((eq keyword :tag) | |
510 (put symbol 'custom-tag value)) | |
26831
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
511 ((eq keyword :set-after) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
512 (custom-add-dependencies symbol value)) |
17334 | 513 (t |
24872
9db8a7ed814e
(custom-handle-keyword): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents:
24438
diff
changeset
|
514 (error "Unknown keyword %s" keyword)))) |
17334 | 515 |
26831
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
516 (defun custom-add-dependencies (symbol value) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
517 "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
|
518 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
|
519 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
|
520 both appear in constructs like `custom-set-variables'." |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
521 (unless (listp value) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
522 (error "Invalid custom dependency `%s'" value)) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
523 (let* ((deps (get symbol 'custom-dependencies)) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
524 (new-deps deps)) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
525 (while value |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
526 (let ((dep (car value))) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
527 (unless (symbolp dep) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
528 (error "Invalid custom dependency `%s'" dep)) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
529 (unless (memq dep new-deps) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
530 (setq new-deps (cons dep new-deps))) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
531 (setq value (cdr value)))) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
532 (unless (eq deps new-deps) |
ddaafb816c3e
(custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents:
26582
diff
changeset
|
533 (put symbol 'custom-dependencies new-deps)))) |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
534 |
17334 | 535 (defun custom-add-option (symbol option) |
536 "To the variable SYMBOL add OPTION. | |
537 | |
63932
bbf23e50d797
(custom-add-option): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
63927
diff
changeset
|
538 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
|
539 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
|
540 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
|
541 For other custom types, this has no effect." |
17334 | 542 (let ((options (get symbol 'custom-options))) |
543 (unless (member option options) | |
544 (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
|
545 (defalias 'custom-add-frequent-value 'custom-add-option) |
17334 | 546 |
547 (defun custom-add-link (symbol widget) | |
548 "To the custom option SYMBOL add the link WIDGET." | |
549 (let ((links (get symbol 'custom-links))) | |
550 (unless (member widget links) | |
26582
fbd1f4d3000d
(custom-declare-group): Purecopy DOC.
Dave Love <fx@gnu.org>
parents:
25888
diff
changeset
|
551 (put symbol 'custom-links (cons (purecopy widget) links))))) |
17334 | 552 |
20445
20ff88ac8cc2
(custom-add-version): New function.
Karl Heuer <kwzh@gnu.org>
parents:
19535
diff
changeset
|
553 (defun custom-add-version (symbol version) |
20ff88ac8cc2
(custom-add-version): New function.
Karl Heuer <kwzh@gnu.org>
parents:
19535
diff
changeset
|
554 "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
|
555 (put symbol 'custom-version (purecopy version))) |
20445
20ff88ac8cc2
(custom-add-version): New function.
Karl Heuer <kwzh@gnu.org>
parents:
19535
diff
changeset
|
556 |
69922
dc1f0ab7e276
* custom.el (defcustom, custom-handle-keyword): Add :package-version
Bill Wohler <wohler@newt.com>
parents:
69624
diff
changeset
|
557 (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
|
558 "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
|
559 (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
|
560 |
17334 | 561 (defun custom-add-load (symbol load) |
562 "To the custom option SYMBOL add the dependency LOAD. | |
563 LOAD should be either a library file name, or a feature name." | |
564 (let ((loads (get symbol 'custom-loads))) | |
565 (unless (member load loads) | |
26582
fbd1f4d3000d
(custom-declare-group): Purecopy DOC.
Dave Love <fx@gnu.org>
parents:
25888
diff
changeset
|
566 (put symbol 'custom-loads (cons (purecopy load) loads))))) |
17334 | 567 |
71954
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
568 (defun custom-autoload (symbol load &optional noset) |
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
569 "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
|
570 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
|
571 (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
|
572 (custom-add-load symbol load)) |
04672e32e3b0
(custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
48951
diff
changeset
|
573 |
04672e32e3b0
(custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
48951
diff
changeset
|
574 ;; 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
|
575 (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
|
576 "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
|
577 This recursively follows aliases." |
8633ed45b13c
(custom-variable-p): Make it recursively follow aliases. Mention that
Luc Teirlinck <teirllm@auburn.edu>
parents:
64091
diff
changeset
|
578 (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
|
579 (or (get variable 'standard-value) |
04672e32e3b0
(custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
48951
diff
changeset
|
580 (get variable 'custom-autoload))) |
04672e32e3b0
(custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
48951
diff
changeset
|
581 |
85653
58abbc936e8f
(custom-note-var-changed): New function.
Richard M. Stallman <rms@gnu.org>
parents:
85618
diff
changeset
|
582 (defun custom-note-var-changed (variable) |
58abbc936e8f
(custom-note-var-changed): New function.
Richard M. Stallman <rms@gnu.org>
parents:
85618
diff
changeset
|
583 "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
|
584 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
|
585 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
|
586 (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
|
587 |
cdd09d6acfdc
(custom-note-var-changed): Remove the `interactive'
Juri Linkov <juri@jurta.org>
parents:
85653
diff
changeset
|
588 |
cdd09d6acfdc
(custom-note-var-changed): Remove the `interactive'
Juri Linkov <juri@jurta.org>
parents:
85653
diff
changeset
|
589 ;;; Custom Themes |
85653
58abbc936e8f
(custom-note-var-changed): New function.
Richard M. Stallman <rms@gnu.org>
parents:
85618
diff
changeset
|
590 |
44911
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
591 ;;; 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
|
592 ;;; 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
|
593 |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
594 (defvar custom-load-recursion nil |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
595 "Hack to avoid recursive dependencies.") |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
596 |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
597 (defun custom-load-symbol (symbol) |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
598 "Load all dependencies for SYMBOL." |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
599 (unless custom-load-recursion |
47822
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
600 (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
|
601 ;; 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
|
602 ;; 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
|
603 (condition-case nil |
c26f56efcd5d
(custom-load-symbol): Load cus-load and cus-start first.
Richard M. Stallman <rms@gnu.org>
parents:
50123
diff
changeset
|
604 (require 'cus-load) |
c26f56efcd5d
(custom-load-symbol): Load cus-load and cus-start first.
Richard M. Stallman <rms@gnu.org>
parents:
50123
diff
changeset
|
605 (error nil)) |
c26f56efcd5d
(custom-load-symbol): Load cus-load and cus-start first.
Richard M. Stallman <rms@gnu.org>
parents:
50123
diff
changeset
|
606 (condition-case nil |
c26f56efcd5d
(custom-load-symbol): Load cus-load and cus-start first.
Richard M. Stallman <rms@gnu.org>
parents:
50123
diff
changeset
|
607 (require 'cus-start) |
c26f56efcd5d
(custom-load-symbol): Load cus-load and cus-start first.
Richard M. Stallman <rms@gnu.org>
parents:
50123
diff
changeset
|
608 (error nil)) |
47822
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
609 (dolist (load (get symbol 'custom-loads)) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
610 (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
|
611 ;; 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
|
612 ((assoc load load-history)) |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
613 ;; 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
|
614 ;; 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
|
615 ;; if not necessary. |
47822
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
616 ((let ((regexp (concat "\\(\\`\\|/\\)" (regexp-quote load) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
617 "\\(\\'\\|\\.\\)")) |
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
618 (found nil)) |
44911
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
619 (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
|
620 (and (stringp (car loaded)) |
c9338efa3fd9
(custom-load-symbol): Verify that LOADED is a string.
Richard M. Stallman <rms@gnu.org>
parents:
44911
diff
changeset
|
621 (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
|
622 (setq found t))) |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
623 found)) |
0edc2b27187b
(custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents:
44683
diff
changeset
|
624 ;; 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
|
625 ;; 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
|
626 ;; 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
|
627 ((equal load "cus-edit")) |
47822
46f8bf0fc7b4
(custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
47677
diff
changeset
|
628 (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
|
629 |
67978
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
630 (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
|
631 "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
|
632 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
|
633 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
|
634 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
|
635 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
|
636 (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
|
637 |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
638 (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
|
639 "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
|
640 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
|
641 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
|
642 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
|
643 (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
|
644 (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
|
645 (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
|
646 (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
|
647 |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
648 (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
|
649 ":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
|
650 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
|
651 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
|
652 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
|
653 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
|
654 (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
|
655 (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
|
656 (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
|
657 (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
|
658 |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
659 (defun custom-quote (sexp) |
78492
7c8949dbfa0d
Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents:
78236
diff
changeset
|
660 "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
|
661 (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
|
662 (keywordp sexp) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
663 (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
|
664 (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
|
665 (stringp sexp) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
666 (numberp sexp) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
667 (vectorp sexp) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
668 ;;; (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
|
669 ;;; (characterp sexp)) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
670 ) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
671 sexp |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
672 (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
|
673 |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
674 (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
|
675 "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
|
676 |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
677 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
|
678 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
|
679 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
|
680 |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
681 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
|
682 |
78492
7c8949dbfa0d
Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents:
78236
diff
changeset
|
683 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
|
684 (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
|
685 (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
|
686 (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
|
687 (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
|
688 (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
|
689 (comment (get symbol 'customized-variable-comment))) |
78492
7c8949dbfa0d
Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents:
78236
diff
changeset
|
690 ;; 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
|
691 (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
|
692 (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
|
693 (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
|
694 (error nil))))) |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
695 (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
|
696 (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
|
697 ;; 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
|
698 (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
|
699 ;; 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
|
700 (when comment |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
701 (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
|
702 (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
|
703 |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
704 (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
|
705 "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
|
706 |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
707 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
|
708 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
|
709 `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
|
710 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
|
711 |
78492
7c8949dbfa0d
Replace `iff' in doc-strings and comments.
Glenn Morris <rgm@gnu.org>
parents:
78236
diff
changeset
|
712 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
|
713 (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
|
714 (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
|
715 (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
|
716 (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
|
717 (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
|
718 ;; 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
|
719 (if (not (and old |
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
720 (equal value (condition-case nil |
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
721 (eval (car old)) |
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
722 (error nil))))) |
69006
e4d97c1f1377
* custom.el (customize-mark-as-set): Push to `user' theme.
Chong Yidong <cyd@stupidchicken.com>
parents:
69005
diff
changeset
|
723 (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
|
724 (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
|
725 (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
|
726 (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
|
727 ;; Changed? |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
728 (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
|
729 |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
730 (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
|
731 "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
|
732 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
|
733 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
|
734 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
|
735 (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
|
736 symbol |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
737 (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
|
738 |
f313a5c7323b
Change ordering so all the Custom Themes code is in one place.
Chong Yidong <cyd@stupidchicken.com>
parents:
67977
diff
changeset
|
739 |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
740 ;;; Custom Themes |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
741 |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
742 ;; 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
|
743 ;; 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
|
744 |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
745 ;; 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
|
746 ;; 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
|
747 ;; 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
|
748 ;; 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
|
749 ;; |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
750 ;; (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
|
751 ;; |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
752 ;; - 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
|
753 ;; - 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
|
754 ;; - 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
|
755 ;; - 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
|
756 ;; |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
757 ;; 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
|
758 ;; 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
|
759 ;; 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
|
760 ;; 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
|
761 |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
762 ;; 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
|
763 ;; 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
|
764 ;; 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
|
765 ;; |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
766 ;; (THEME VALUE) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
767 ;; |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
768 ;; 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
|
769 ;; |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
770 ;; 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
|
771 ;; 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
|
772 ;; is in effect. |
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 ;; 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
|
775 ;; 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
|
776 ;; 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
|
777 ;; automatically enables it. |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
778 ;; |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
779 ;; 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
|
780 ;; 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
|
781 ;; 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
|
782 ;; `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
|
783 ;; property remains unchanged. |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
784 |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
785 (defvar custom-known-themes '(user changed) |
63927
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
786 "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
|
787 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
|
788 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
|
789 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
|
790 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
|
791 the front of this list.") |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
792 |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
793 (defsubst custom-theme-p (theme) |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
794 "Non-nil when THEME has been defined." |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
795 (memq theme custom-known-themes)) |
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-check-theme (theme) |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
798 "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
|
799 (unless (custom-theme-p theme) |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
800 (error "Unknown theme `%s'" theme))) |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
801 |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
802 (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
|
803 "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
|
804 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
|
805 |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
806 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
|
807 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
|
808 `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
|
809 |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
810 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
|
811 (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
|
812 (error "Unknown theme property")) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
813 (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
|
814 (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
|
815 (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
|
816 (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
|
817 (if (eq mode 'reset) |
67783
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
818 ;; Remove a setting. |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
819 (when setting |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
820 (let (res) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
821 (dolist (theme-setting theme-settings) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
822 (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
|
823 (eq (cadr theme-setting) symbol)) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
824 (setq res theme-setting))) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
825 (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
|
826 (put symbol prop (delq setting old))) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
827 (if setting |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
828 ;; Alter an existing setting. |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
829 (let (res) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
830 (dolist (theme-setting theme-settings) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
831 (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
|
832 (eq (cadr theme-setting) symbol)) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
833 (setq res theme-setting))) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
834 (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
|
835 (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
|
836 (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
|
837 (setcar (cdr setting) value)) |
67783
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
838 ;; Add a new setting. |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
839 ;; 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
|
840 ;; 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
|
841 ;; 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
|
842 ;; theme is later disabled. |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
843 (if (null old) |
118df638c3ff
2005-12-23 Chong Yidong <cyd@stupidchicken.com>
Chong Yidong <cyd@stupidchicken.com>
parents:
67123
diff
changeset
|
844 (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
|
845 (boundp symbol)) |
af9f1a83e3cf
* custom.el (custom-push-theme): Load the variable before checking
Chong Yidong <cyd@stupidchicken.com>
parents:
70021
diff
changeset
|
846 (let ((sv (get symbol 'standard-value))) |
71954
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
847 (unless (and sv |
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
848 (equal (eval (car sv)) (symbol-value symbol))) |
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
849 (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
|
850 (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
|
851 (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
|
852 (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
|
853 (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
|
854 (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
|
855 (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
|
856 (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
|
857 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
|
858 |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
859 |
17334 | 860 (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
|
861 "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
|
862 These settings are registered as theme `user'. |
48821
d886606b4f3a
(defcustom, custom-set-variables): Doc fix.
Dave Love <fx@gnu.org>
parents:
48476
diff
changeset
|
863 The arguments should each be a list of the form: |
17334 | 864 |
59385
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
865 (SYMBOL EXP [NOW [REQUEST [COMMENT]]]) |
17334 | 866 |
59385
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
867 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
|
868 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
|
869 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
|
870 |
59385
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
871 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
|
872 handle SYMBOL properly. |
25683 | 873 COMMENT is a comment string about SYMBOL." |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
874 (apply 'custom-theme-set-variables 'user args)) |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
875 |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
876 (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
|
877 "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
|
878 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
|
879 |
59385
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
880 (SYMBOL EXP [NOW [REQUEST [COMMENT]]]) |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
881 |
59385
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
882 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
|
883 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
|
884 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
|
885 |
59385
24b54016dd51
(custom-set-variables, custom-theme-set-variables): Clarify documentation.
Richard M. Stallman <rms@gnu.org>
parents:
56558
diff
changeset
|
886 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
|
887 handle SYMBOL properly. |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
888 COMMENT is a comment string about SYMBOL. |
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 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
|
891 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
|
892 (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
|
893 |
2da08bd76792
(custom-theme-set-variables): Autoload packages before sorting the variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71954
diff
changeset
|
894 ;; 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
|
895 ;; 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
|
896 ;; 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
|
897 (dolist (entry args) |
2da08bd76792
(custom-theme-set-variables): Autoload packages before sorting the variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71954
diff
changeset
|
898 (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
|
899 (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
|
900 (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
|
901 ;; 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
|
902 (custom-load-symbol symbol)))) |
80075
23de7844a977
(custom-theme-set-variables): Sort symbols that are
Glenn Morris <rgm@gnu.org>
parents:
79721
diff
changeset
|
903 |
72580
2da08bd76792
(custom-theme-set-variables): Autoload packages before sorting the variables.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
71954
diff
changeset
|
904 ;; 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
|
905 (setq args |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
906 (sort args |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
907 (lambda (a1 a2) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
908 (let* ((sym1 (car a1)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
909 (sym2 (car a2)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
910 (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
|
911 (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
|
912 (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
|
913 (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
|
914 sym1 sym2)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
915 (2-then-1 nil) |
80075
23de7844a977
(custom-theme-set-variables): Sort symbols that are
Glenn Morris <rgm@gnu.org>
parents:
79721
diff
changeset
|
916 ;; 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
|
917 (1-then-2) |
65093
1aae62fd4a80
(custom-theme-set-variables): Sort minor modes last.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
918 ;; 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
|
919 ;; 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
|
920 ;; 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
|
921 ;; than default values. |
1aae62fd4a80
(custom-theme-set-variables): Sort minor modes last.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
922 (t (or (nth 3 a2) |
1aae62fd4a80
(custom-theme-set-variables): Sort minor modes last.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
923 (eq (get sym2 'custom-set) |
1aae62fd4a80
(custom-theme-set-variables): Sort minor modes last.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
924 'custom-set-minor-mode)))))))) |
60413
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
925 (while args |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
926 (let ((entry (car args))) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
927 (if (listp entry) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
928 (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
|
929 (value (nth 1 entry)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
930 (now (nth 2 entry)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
931 (requests (nth 3 entry)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
932 (comment (nth 4 entry)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
933 set) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
934 (when requests |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
935 (put symbol 'custom-requests requests) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
936 (mapc 'require requests)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
937 (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
|
938 (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
|
939 (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
|
940 (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
|
941 ;; 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
|
942 ;; 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
|
943 (condition-case data |
24438
4a78f6354310
(custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents:
23354
diff
changeset
|
944 (cond (now |
4a78f6354310
(custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents:
23354
diff
changeset
|
945 ;; Rogue variable, set it now. |
4a78f6354310
(custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents:
23354
diff
changeset
|
946 (put symbol 'force-value t) |
4a78f6354310
(custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents:
23354
diff
changeset
|
947 (funcall set symbol (eval value))) |
4a78f6354310
(custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents:
23354
diff
changeset
|
948 ((default-boundp symbol) |
4a78f6354310
(custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents:
23354
diff
changeset
|
949 ;; Something already set this, overwrite it. |
4a78f6354310
(custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents:
23354
diff
changeset
|
950 (funcall set symbol (eval value)))) |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49522
diff
changeset
|
951 (error |
31362
652b5c65769a
(custom-set-variables): Print message about errors in
Dave Love <fx@gnu.org>
parents:
29761
diff
changeset
|
952 (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
|
953 (setq args (cdr args)) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
954 (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
|
955 (put symbol 'variable-comment comment))) |
71954
628aeba24139
(custom-autoload): Add `noset' argument.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
70646
diff
changeset
|
956 ;; 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
|
957 ;; 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
|
958 ;; 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
|
959 (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
|
960 (ding) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
961 (sit-for 2) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
962 (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
|
963 (value (nth 1 args))) |
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
964 (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
|
965 (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
|
966 (setq args (cdr (cdr args))))))) |
17334 | 967 |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
968 |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
969 ;;; Defining themes. |
44683
17031c88f781
(customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents:
42556
diff
changeset
|
970 |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
971 ;; 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
|
972 ;; 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
|
973 ;; 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
|
974 ;; |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
975 ;; (deftheme THEME |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
976 ;; DOCSTRING) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
977 ;; |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
978 ;; (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
|
979 ;; 'THEME |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
980 ;; [THEME-VARIABLES]) |
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-faces |
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-FACES]) |
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 ;; (provide-theme 'THEME) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
987 |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
988 |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
989 ;; 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
|
990 ;; 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
|
991 ;; `: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
|
992 |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
993 (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
|
994 "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
|
995 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
|
996 |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
997 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
|
998 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
|
999 (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
|
1000 ;; 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
|
1001 ;; 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
|
1002 ;; 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
|
1003 (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
|
1004 |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1005 (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
|
1006 "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
|
1007 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
|
1008 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
|
1009 (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
|
1010 (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
|
1011 (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
|
1012 (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
|
1013 (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
|
1014 |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1015 (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
|
1016 "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
|
1017 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
|
1018 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
|
1019 into `features'. |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1020 |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1021 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
|
1022 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
|
1023 \(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
|
1024 (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
|
1025 |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1026 ;;; Loading themes. |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1027 |
63927
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
1028 (defcustom custom-theme-directory |
81342
cabb2521cfd3
(custom-theme-directory): Use user-emacs-directory.
Chong Yidong <cyd@stupidchicken.com>
parents:
77487
diff
changeset
|
1029 user-emacs-directory |
63927
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
1030 "Directory in which Custom theme files should be written. |
65334
2c6c9fd9d86b
*** empty log message ***
Chong Yidong <cyd@stupidchicken.com>
parents:
65093
diff
changeset
|
1031 `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
|
1032 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
|
1033 into this directory." |
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
1034 :type 'string |
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
1035 :group 'customize |
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
1036 :version "22.1") |
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
1037 |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1038 (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
|
1039 "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
|
1040 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
|
1041 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
|
1042 `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
|
1043 (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
|
1044 (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
|
1045 (custom-check-theme theme) |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1046 (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
|
1047 ;; 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
|
1048 (push theme custom-enabled-themes) |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1049 ;; `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
|
1050 ;; 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
|
1051 ;; 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
|
1052 (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
|
1053 (enable-theme 'user))) |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1054 |
65334
2c6c9fd9d86b
*** empty log message ***
Chong Yidong <cyd@stupidchicken.com>
parents:
65093
diff
changeset
|
1055 (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
|
1056 "Load a theme's settings from its file. |
65334
2c6c9fd9d86b
*** empty log message ***
Chong Yidong <cyd@stupidchicken.com>
parents:
65093
diff
changeset
|
1057 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
|
1058 ;; 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
|
1059 ;; 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
|
1060 (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
|
1061 ;; 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
|
1062 (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
|
1063 (disable-theme theme) |
d8acae190ef7
* cus-edit.el (custom-reset-menu, custom-reset, Custom-mode-menu)
Chong Yidong <cyd@stupidchicken.com>
parents:
67980
diff
changeset
|
1064 (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
|
1065 (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
|
1066 (put theme 'theme-documentation nil)) |
63927
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
1067 (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
|
1068 (cons custom-theme-directory load-path) |
7f7d0de05845
(custom-declare-variable): Fix typos in comment.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61530
diff
changeset
|
1069 load-path))) |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1070 (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
|
1071 |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1072 ;;; Enabling and disabling loaded themes. |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1073 |
67962
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1074 (defvar custom-enabling-themes nil) |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1075 |
65334
2c6c9fd9d86b
*** empty log message ***
Chong Yidong <cyd@stupidchicken.com>
parents:
65093
diff
changeset
|
1076 (defun enable-theme (theme) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1077 "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
|
1078 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
|
1079 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
|
1080 |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1081 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
|
1082 the theme from its theme file, by calling `load-theme'." |
65334
2c6c9fd9d86b
*** empty log message ***
Chong Yidong <cyd@stupidchicken.com>
parents:
65093
diff
changeset
|
1083 (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
|
1084 (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
|
1085 (load-theme theme) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1086 ;; 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
|
1087 (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
|
1088 (dolist (s settings) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1089 (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
|
1090 (symbol (cadr s)) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1091 (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
|
1092 (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
|
1093 (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
|
1094 (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
|
1095 (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
|
1096 (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
|
1097 (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
|
1098 (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
|
1099 (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
|
1100 (enable-theme 'user))))) |
67962
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1101 |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1102 (defcustom custom-enabled-themes nil |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1103 "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
|
1104 |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1105 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
|
1106 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
|
1107 :group 'customize |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1108 :type '(repeat symbol) |
80075
23de7844a977
(custom-theme-set-variables): Sort symbols that are
Glenn Morris <rgm@gnu.org>
parents:
79721
diff
changeset
|
1109 :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
|
1110 :set (lambda (symbol themes) |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1111 ;; 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
|
1112 ;; 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
|
1113 ;; 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
|
1114 (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
|
1115 (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
|
1116 (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
|
1117 (if (boundp symbol) |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1118 (dolist (theme (symbol-value symbol)) |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1119 (if (not (memq theme themes)) |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1120 (disable-theme theme)))) |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1121 (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
|
1122 (condition-case nil |
67962
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1123 (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
|
1124 (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
|
1125 (setq themes (delq theme themes)))))) |
67962
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1126 (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
|
1127 (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
|
1128 (if failures |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1129 (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
|
1130 (mapconcat 'symbol-name failures " "))))))) |
67962
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1131 |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1132 (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
|
1133 "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
|
1134 (memq theme custom-enabled-themes)) |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1135 |
65334
2c6c9fd9d86b
*** empty log message ***
Chong Yidong <cyd@stupidchicken.com>
parents:
65093
diff
changeset
|
1136 (defun disable-theme (theme) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1137 "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
|
1138 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
|
1139 (interactive (list (intern |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1140 (completing-read |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1141 "Disable Custom theme: " |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1142 (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
|
1143 nil t)))) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1144 (when (custom-theme-enabled-p theme) |
67943
6130ad6751ca
(custom-load-themes): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents:
67798
diff
changeset
|
1145 (let ((settings (get theme 'theme-settings))) |
6130ad6751ca
(custom-load-themes): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents:
67798
diff
changeset
|
1146 (dolist (s settings) |
6130ad6751ca
(custom-load-themes): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents:
67798
diff
changeset
|
1147 (let* ((prop (car s)) |
6130ad6751ca
(custom-load-themes): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents:
67798
diff
changeset
|
1148 (symbol (cadr s)) |
6130ad6751ca
(custom-load-themes): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents:
67798
diff
changeset
|
1149 (spec-list (get symbol prop))) |
6130ad6751ca
(custom-load-themes): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents:
67798
diff
changeset
|
1150 (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
|
1151 (if (eq prop 'theme-value) |
6130ad6751ca
(custom-load-themes): Function deleted.
Richard M. Stallman <rms@gnu.org>
parents:
67798
diff
changeset
|
1152 (custom-theme-recalc-variable symbol) |
67962
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1153 (custom-theme-recalc-face symbol))))) |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1154 (setq custom-enabled-themes |
48d2cc2834b4
* custom.el (provide-theme): Ban `user' theme name.
Chong Yidong <cyd@stupidchicken.com>
parents:
67944
diff
changeset
|
1155 (delq theme custom-enabled-themes)))) |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1156 |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1157 (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
|
1158 "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
|
1159 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
|
1160 currently enabled custom themes. |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1161 |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1162 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
|
1163 (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
|
1164 (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
|
1165 (cdr (car theme-value))))) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1166 |
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1167 (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
|
1168 "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
|
1169 (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
|
1170 (if valspec |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1171 (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
|
1172 (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
|
1173 (if (and valspec |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1174 (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
|
1175 (default-boundp variable))) |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1176 (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
|
1177 (eval (car valspec)))))) |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1178 |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1179 (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
|
1180 "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
|
1181 (if (facep face) |
87820
b0b5bf68e061
Richard Stallman <rms at gnu.org>
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
1182 (face-spec-set face |
b0b5bf68e061
Richard Stallman <rms at gnu.org>
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
1183 (get (or (get face 'face-alias) face) |
b0b5bf68e061
Richard Stallman <rms at gnu.org>
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
1184 'face-override-spec)))) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1185 |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1186 ;;; XEmacs compability functions |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1187 |
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1188 ;; 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
|
1189 ;; 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
|
1190 ;; 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
|
1191 |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1192 (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
|
1193 "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
|
1194 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
|
1195 |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1196 (VARIABLE IGNORED) |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1197 |
67980 | 1198 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
|
1199 (custom-check-theme theme) |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1200 (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
|
1201 (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
|
1202 |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1203 (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
|
1204 "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
|
1205 This creates settings in the `user' theme. |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1206 |
64220
38b6647b9ed4
(custom-push-theme): Maintain list of the settings
Richard M. Stallman <rms@gnu.org>
parents:
64200
diff
changeset
|
1207 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
|
1208 |
67977
03ee9bccbfeb
* custom.el: Move Custom Themes commentary to start of theme code.
Chong Yidong <cyd@stupidchicken.com>
parents:
67962
diff
changeset
|
1209 (VARIABLE IGNORED) |
48951
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1210 |
67980 | 1211 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
|
1212 (apply 'custom-theme-reset-variables 'user args)) |
d77bc55dd27b
(custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
48821
diff
changeset
|
1213 |
17334 | 1214 ;;; The End. |
1215 | |
18882
539611251037
(custom-declare-variable-list): Process already-declared
Richard M. Stallman <rms@gnu.org>
parents:
18033
diff
changeset
|
1216 ;; 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
|
1217 (while custom-declare-variable-list |
539611251037
(custom-declare-variable-list): Process already-declared
Richard M. Stallman <rms@gnu.org>
parents:
18033
diff
changeset
|
1218 (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
|
1219 (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
|
1220 |
17334 | 1221 (provide 'custom) |
1222 | |
60413
28b5c27160e8
(custom-reevaluate-setting): Simple function to handle variables
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60020
diff
changeset
|
1223 ;; arch-tag: 041b6116-aabe-4f9a-902d-74092bc3dab2 |
25683 | 1224 ;;; custom.el ends here |