annotate lisp/custom.el @ 51151:fe11e703042b

Summary: MIME support added for e-mail processing that skips encoded regions. Allow user to skip saving Fcc messages with large attachments. Fixed region skipping bug with multi-line comments - e.g. tex $ regions spanning multiple lines. Added support for postscript and uuencoded regions. Redundant dictionary file names purged. Dictionary definition field name changed from "Character Set" to "Coding System". Fixed bug in reloading dictionaries. Modified headers to reflect new version. XEmacs menu now adds customize item. (ispell-check-version): No longer an aliased function. Returns library path if not called interactively. Variable `temporary-file-directory' protected if not loaded. (check-ispell-version): Now the alias for `ispell-check-version'. (ispell-message-fcc-skip): New variable that determines if and when to query about saving Fcc copy of message if an attachment is large. (ispell-skip-html): Declared buffer-local. (ispell-local-dictionary-alist): Docstring expanded. Tag name changed from "Character Set" to "Coding System". (ispell-dictionary-alist-1): Removed redundant command-line option to load brasileiro, british, and castellano dictionary files. (ispell-dictionary-alist-2): Removed redundant command-line option to load czech dictionary file. (ispell-dictionary-alist-3): Moved francais-tex here. (ispell-dictionary-alist-4): Removed german and german8 dictionaries. The deutsch ones are the correct definitions. `nederlands' and `nederlands8' dictionaries moved here. (ispell-dictionary-alist-5): `polish' and `portugues' dictionaries moved here. Removed redundant command-line option to `norsk' and `portugues'. (ispell-dictionary-alist-6): Removed redundant command-line option to load `russian' and `slovak' dictionary files. (ispell-dictionary-alist): Tag name changed from "Character Set" to "Coding System". (ispell-version): Updated to 3.6. (ispell-library-directory): Calls non-deprecated function. (ispell-valid-dictionary-list): New function returning all valid dictionaries on machine. (ispell-checking-message): Documentation string improved. (ispell-skip-region-alist): Added uuencoded and postscript region skipping. Improved http/e-mail/file regexp to not match `/.\w'. (ispell-html-skip-alists): New variable for html region support. (ispell-send-string): Removed redundant xemacs check. (ispell-word): Fix spelling error in documentation string, added extent information to support highlighting in ispell-minor-mode. (ispell-command-loop): Disable horizontal scrollbar in XEmacs choices buffer. (ispell-show-choices): Directly select `choices-window'. (ispell-help): Use default buffer size for electric help. (ispell-adjusted-window-height): Correct for xemacs detection. (ispell-start-process): Don't double specify dictionary file name. (ispell-init-process): Set `ispell-library-path' each call. (ispell-change-dictionary): Now only completes valid dictionaries. (ispell-region): Add support for MIME region skipping and Fcc message query for large attachments. (ispell-begin-skip-region-regexp): Add documentation string. Added message support and cleaned up code for generic and html regions. (ispell-begin-skip-region): Function is now requires alist argument. (ispell-begin-tex-skip-regexp): Added comments and support improved html and message regions. (ispell-skip-region-list): New function for MIME and region skipping. (ispell-tex-arg-end): Add documentation string. (ispell-ignore-fcc): New function to query saving Fcc message. (ispell-skip-region): Calculate alist for key match dynamically, html skipping pushed to alists. (ispell-get-line): Add support for multi-line comment regions. (ispell): Check that variables to continue spelling are bound. (ispell-message-text-end): Postscript and uuencoded regions now supported as MIME regions, rather than as end-of-message region. (ispell-mime-multipartp): New function supporting MIME. (ispell-mime-skip-part): New function supporting MIME. (ispell-message): Add MIME support. (ispell-buffer-local-parsing): Variable `ispell-skip-html' now local. (ispell-buffer-local-dict): Fixed bug for detecting and reloading new dictionary.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Thu, 22 May 2003 21:34:00 +0000
parents 7c924263658d
children c26f56efcd5d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
2 ;;
42503
e95910976840 (defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents: 41821
diff changeset
3 ;; Copyright (C) 1996, 1997, 1999, 2001, 2002 Free Software Foundation, Inc.
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
4 ;;
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
5 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
26582
fbd1f4d3000d (custom-declare-group): Purecopy DOC.
Dave Love <fx@gnu.org>
parents: 25888
diff changeset
6 ;; Maintainer: FSF
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
7 ;; Keywords: help, faces
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
8
17520
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17442
diff changeset
9 ;; This file is part of GNU Emacs.
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17442
diff changeset
10
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17442
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17442
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17442
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17442
diff changeset
14 ;; any later version.
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17442
diff changeset
15
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17442
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17442
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17442
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17442
diff changeset
19 ;; GNU General Public License for more details.
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17442
diff changeset
20
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17442
diff changeset
21 ;; You should have received a copy of the GNU General Public License
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17442
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17442
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17442
diff changeset
24 ;; Boston, MA 02111-1307, USA.
f33d7729b6a1 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17442
diff changeset
25
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
26 ;;; Commentary:
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
27 ;;
48238
b6f8e90bc592 Fix typos in Commentary section.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 47822
diff changeset
28 ;; This file only contains the code needed to declare and initialize
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
29 ;; user options. The code to customize options is autoloaded from
25683
d1179efb4e87 Don't define-widget-keywords.
Dave Love <fx@gnu.org>
parents: 24986
diff changeset
30 ;; `cus-edit.el' and is documented in the Emacs Lisp Reference manual.
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
31
48238
b6f8e90bc592 Fix typos in Commentary section.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 47822
diff changeset
32 ;; The code implementing face declarations is in `cus-face.el'.
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
33
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
34 ;;; Code:
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
35
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
36 (require 'widget)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
37
17415
30a567b89fb6 Sync with 1.84.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17374
diff changeset
38 (defvar custom-define-hook nil
30a567b89fb6 Sync with 1.84.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17374
diff changeset
39 ;; Customize information for this option is in `cus-edit.el'.
30a567b89fb6 Sync with 1.84.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17374
diff changeset
40 "Hook called after defining each customize option.")
30a567b89fb6 Sync with 1.84.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17374
diff changeset
41
47570
b65cc673fb00 (custom-dont-initialize): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 45366
diff changeset
42 (defvar custom-dont-initialize nil
b65cc673fb00 (custom-dont-initialize): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 45366
diff changeset
43 "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
44 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
45 Users should not set it.")
b65cc673fb00 (custom-dont-initialize): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 45366
diff changeset
46
41224
fc0e6d3f905d (custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39981
diff changeset
47 (defvar custom-current-group-alist nil
fc0e6d3f905d (custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39981
diff changeset
48 "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
49
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
50 ;;; The `defcustom' Macro.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
51
17550
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
52 (defun custom-initialize-default (symbol value)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
53 "Initialize SYMBOL with VALUE.
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
54 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
55 Otherwise, if symbol has a `saved-value' property, it will evaluate
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
56 the car of that and used as the default binding for symbol.
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
57 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
58 symbol."
17415
30a567b89fb6 Sync with 1.84.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17374
diff changeset
59 (unless (default-boundp symbol)
18033
bccd356a3b7c Synched with version 1.9900.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17949
diff changeset
60 ;; Use the saved value if it exists, otherwise the standard setting.
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
61 (set-default symbol (if (get symbol 'saved-value)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
62 (eval (car (get symbol 'saved-value)))
17550
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
63 (eval value)))))
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
64
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
65 (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
66 "Initialize SYMBOL based on VALUE.
e9d8fcec9843 (custom-declare-variable): Use custom-initialize-reset
Richard M. Stallman <rms@gnu.org>
parents: 19516
diff changeset
67 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
68 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
69 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
70 if any, or VALUE."
17550
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
71 (unless (default-boundp symbol)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
72 (funcall (or (get symbol 'custom-set) 'set-default)
25683
d1179efb4e87 Don't define-widget-keywords.
Dave Love <fx@gnu.org>
parents: 24986
diff changeset
73 symbol
17550
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
74 (if (get symbol 'saved-value)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
75 (eval (car (get symbol 'saved-value)))
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
76 (eval value)))))
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
77
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
78 (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
79 "Initialize SYMBOL based on VALUE.
e9d8fcec9843 (custom-declare-variable): Use custom-initialize-reset
Richard M. Stallman <rms@gnu.org>
parents: 19516
diff changeset
80 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
81 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
82 \(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
83 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
84 or (last of all) VALUE."
17550
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
85 (funcall (or (get symbol 'custom-set) 'set-default)
25683
d1179efb4e87 Don't define-widget-keywords.
Dave Love <fx@gnu.org>
parents: 24986
diff changeset
86 symbol
17550
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
87 (cond ((default-boundp symbol)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
88 (funcall (or (get symbol 'custom-get) 'default-value)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
89 symbol))
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
90 ((get symbol 'saved-value)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
91 (eval (car (get symbol 'saved-value))))
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
92 (t
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
93 (eval value)))))
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
94
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
95 (defun custom-initialize-changed (symbol value)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
96 "Initialize SYMBOL with VALUE.
36269
9a470a7db563 (custom-initialize-changed, defcustom): Doc fix.
Dave Love <fx@gnu.org>
parents: 33027
diff changeset
97 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
98 not using the standard setting.
36269
9a470a7db563 (custom-initialize-changed, defcustom): Doc fix.
Dave Love <fx@gnu.org>
parents: 33027
diff changeset
99 For the standard setting, use `set-default'."
17550
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
100 (cond ((default-boundp symbol)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
101 (funcall (or (get symbol 'custom-set) 'set-default)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
102 symbol
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
103 (funcall (or (get symbol 'custom-get) 'default-value)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
104 symbol)))
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
105 ((get symbol 'saved-value)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
106 (funcall (or (get symbol 'custom-set) 'set-default)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
107 symbol
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
108 (eval (car (get symbol 'saved-value)))))
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
109 (t
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
110 (set-default symbol (eval value)))))
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
111
19516
6591f294b265 (custom-declare-variable): Rename 2nd arg to DEFAULT.
Richard M. Stallman <rms@gnu.org>
parents: 18882
diff changeset
112 (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
113 "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
114 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
115 not the default value itself.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
116
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
117 DEFAULT is stored as SYMBOL's value in the standard theme. See
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
118 `custom-known-themes' for a list of known themes. For backwards
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
119 compatibility, DEFAULT is also stored in SYMBOL's property
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
120 `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
121 set to nil, as the value is no longer rogue."
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
122 ;; Remember the standard setting. The value should be in the standard
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
123 ;; theme, not in this property. However, his would require changeing
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
124 ;; the C source of defvar and others as well...
19516
6591f294b265 (custom-declare-variable): Rename 2nd arg to DEFAULT.
Richard M. Stallman <rms@gnu.org>
parents: 18882
diff changeset
125 (put symbol 'standard-value (list default))
17415
30a567b89fb6 Sync with 1.84.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17374
diff changeset
126 ;; Maybe this option was rogue in an earlier version. It no longer is.
30a567b89fb6 Sync with 1.84.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17374
diff changeset
127 (when (get symbol 'force-value)
30a567b89fb6 Sync with 1.84.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17374
diff changeset
128 (put symbol 'force-value nil))
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
129 (when doc
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
130 (put symbol 'variable-documentation doc))
19535
e9d8fcec9843 (custom-declare-variable): Use custom-initialize-reset
Richard M. Stallman <rms@gnu.org>
parents: 19516
diff changeset
131 (let ((initialize 'custom-initialize-reset)
17550
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
132 (requests nil))
41224
fc0e6d3f905d (custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39981
diff changeset
133 (unless (memq :group args)
fc0e6d3f905d (custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39981
diff changeset
134 (custom-add-to-group (custom-current-group) symbol 'custom-variable))
25683
d1179efb4e87 Don't define-widget-keywords.
Dave Love <fx@gnu.org>
parents: 24986
diff changeset
135 (while args
17550
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
136 (let ((arg (car args)))
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
137 (setq args (cdr args))
17550
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
138 (unless (symbolp arg)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
139 (error "Junk in args %S" args))
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
140 (let ((keyword arg)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
141 (value (car args)))
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
142 (unless args
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
143 (error "Keyword %s is missing an argument" keyword))
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
144 (setq args (cdr args))
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
145 (cond ((eq keyword :initialize)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
146 (setq initialize value))
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
147 ((eq keyword :set)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
148 (put symbol 'custom-set value))
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
149 ((eq keyword :get)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
150 (put symbol 'custom-get value))
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
151 ((eq keyword :require)
48476
29e63846608d (custom-declare-variable): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48334
diff changeset
152 (push value requests))
17550
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
153 ((eq keyword :type)
26928
755f54893c1f (custom-declare-variable): Purecopy value.
Dave Love <fx@gnu.org>
parents: 26831
diff changeset
154 (put symbol 'custom-type (purecopy value)))
17550
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
155 ((eq keyword :options)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
156 (if (get symbol 'custom-options)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
157 ;; 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
158 (mapc (lambda (option)
15a7324321bb (custom-declare-variable, custom-set-variables): Use mapc.
Dave Love <fx@gnu.org>
parents: 31362
diff changeset
159 (custom-add-option symbol option))
48476
29e63846608d (custom-declare-variable): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48334
diff changeset
160 value)
17550
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
161 ;; Fast code for the common case.
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
162 (put symbol 'custom-options (copy-sequence value))))
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
163 (t
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
164 (custom-handle-keyword symbol keyword value
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
165 'custom-variable))))))
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
166 (put symbol 'custom-requests requests)
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
167 ;; Do the actual initialization.
47570
b65cc673fb00 (custom-dont-initialize): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 45366
diff changeset
168 (unless custom-dont-initialize
b65cc673fb00 (custom-dont-initialize): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 45366
diff changeset
169 (funcall initialize symbol default)))
48476
29e63846608d (custom-declare-variable): Use push.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 48334
diff changeset
170 (push (cons 'defvar symbol) current-load-list)
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
171 (run-hooks 'custom-define-hook)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
172 symbol)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
173
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
174 (defmacro defcustom (symbol value doc &rest args)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
175 "Declare SYMBOL as a customizable variable that defaults to VALUE.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
176 DOC is the variable documentation.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
177
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
178 Neither SYMBOL nor VALUE needs to be quoted.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
179 If SYMBOL is not already bound, initialize it to VALUE.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
180 The remaining arguments should have the form
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
181
25683
d1179efb4e87 Don't define-widget-keywords.
Dave Love <fx@gnu.org>
parents: 24986
diff changeset
182 [KEYWORD VALUE]...
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
183
22141
8ddb49eb4814 (defcustom): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 21703
diff changeset
184 The following keywords are meaningful:
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
185
47677
8ed8d9b28086 (defcustom): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 47570
diff changeset
186 :type VALUE should be a widget type for editing the symbol's value.
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
187 :options VALUE should be a list of valid members of the widget type.
25683
d1179efb4e87 Don't define-widget-keywords.
Dave Love <fx@gnu.org>
parents: 24986
diff changeset
188 :group VALUE should be a customization group.
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
189 Add SYMBOL to that group.
42508
37d771fc6685 (defcustom): Fix syntax of previous change.
Richard M. Stallman <rms@gnu.org>
parents: 42503
diff changeset
190 :link LINK-DATA
42503
e95910976840 (defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents: 41821
diff changeset
191 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
192 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
193 references some other documentation.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49522
diff changeset
194
42503
e95910976840 (defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents: 41821
diff changeset
195 There are three alternatives you can use for LINK-DATA:
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49522
diff changeset
196
42508
37d771fc6685 (defcustom): Fix syntax of previous change.
Richard M. Stallman <rms@gnu.org>
parents: 42503
diff changeset
197 (custom-manual INFO-NODE)
42503
e95910976840 (defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents: 41821
diff changeset
198 Link to an Info node; INFO-NODE is a string which specifies
42508
37d771fc6685 (defcustom): Fix syntax of previous change.
Richard M. Stallman <rms@gnu.org>
parents: 42503
diff changeset
199 the node name, as in \"(emacs)Top\". The link appears as
42503
e95910976840 (defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents: 41821
diff changeset
200 `[manual]' in the customization buffer.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49522
diff changeset
201
42508
37d771fc6685 (defcustom): Fix syntax of previous change.
Richard M. Stallman <rms@gnu.org>
parents: 42503
diff changeset
202 (info-link INFO-NODE)
42503
e95910976840 (defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents: 41821
diff changeset
203 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
204 customization buffer with the Info node name.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49522
diff changeset
205
42508
37d771fc6685 (defcustom): Fix syntax of previous change.
Richard M. Stallman <rms@gnu.org>
parents: 42503
diff changeset
206 (url-link URL)
42503
e95910976840 (defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents: 41821
diff changeset
207 Link to a web page; URL is a string which specifies the URL.
e95910976840 (defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents: 41821
diff changeset
208 The link appears in the customization buffer as URL.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49522
diff changeset
209
42503
e95910976840 (defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents: 41821
diff changeset
210 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
211 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
212 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
213 Emacs manual which appears in the buffer as `foo'.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49522
diff changeset
214
42503
e95910976840 (defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents: 41821
diff changeset
215 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
216 have none at all.
22141
8ddb49eb4814 (defcustom): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 21703
diff changeset
217 :initialize
8ddb49eb4814 (defcustom): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 21703
diff changeset
218 VALUE should be a function used to initialize the
17550
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
219 variable. It takes two arguments, the symbol and value
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
220 given in the `defcustom' call. The default is
41821
ad017e26a4db Doc fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41224
diff changeset
221 `custom-initialize-reset'.
25683
d1179efb4e87 Don't define-widget-keywords.
Dave Love <fx@gnu.org>
parents: 24986
diff changeset
222 :set VALUE should be a function to set the value of the symbol.
17550
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
223 It takes two arguments, the symbol to set and the value to
22606
36171df7d571 (custom-set-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22499
diff changeset
224 give it. The default choice of function is `custom-set-default'.
17550
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
225 :get VALUE should be a function to extract the value of symbol.
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
226 The function takes one argument, a symbol, and should return
22141
8ddb49eb4814 (defcustom): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 21703
diff changeset
227 the current value for that symbol. The default choice of function
25683
d1179efb4e87 Don't define-widget-keywords.
Dave Love <fx@gnu.org>
parents: 24986
diff changeset
228 is `custom-default-value'.
22141
8ddb49eb4814 (defcustom): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 21703
diff changeset
229 :require
8ddb49eb4814 (defcustom): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 21703
diff changeset
230 VALUE should be a feature symbol. If you save a value
8ddb49eb4814 (defcustom): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 21703
diff changeset
231 for this option, then when your `.emacs' file loads the value,
8ddb49eb4814 (defcustom): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 21703
diff changeset
232 it does (require VALUE) first.
29761
00dcb25bfffd (defcustom, defgroup): Doc fix.
Dave Love <fx@gnu.org>
parents: 28171
diff changeset
233 :version
00dcb25bfffd (defcustom, defgroup): Doc fix.
Dave Love <fx@gnu.org>
parents: 28171
diff changeset
234 VALUE should be a string specifying that the variable was
00dcb25bfffd (defcustom, defgroup): Doc fix.
Dave Love <fx@gnu.org>
parents: 28171
diff changeset
235 first introduced, or its default value was changed, in Emacs
00dcb25bfffd (defcustom, defgroup): Doc fix.
Dave Love <fx@gnu.org>
parents: 28171
diff changeset
236 version VERSION.
42503
e95910976840 (defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents: 41821
diff changeset
237 :tag LABEL
e95910976840 (defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents: 41821
diff changeset
238 Use LABEL, a string, instead of the item's name, to label the item
42556
fc69700db2a3 Fix typo.
Pavel Janík <Pavel@Janik.cz>
parents: 42508
diff changeset
239 in customization menus and buffers.
42503
e95910976840 (defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents: 41821
diff changeset
240 :load FILE
e95910976840 (defcustom): Documented :tag, :link and :load.
Eli Zaretskii <eliz@gnu.org>
parents: 41821
diff changeset
241 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
242 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
243 not already loaded.
48821
d886606b4f3a (defcustom, custom-set-variables): Doc fix.
Dave Love <fx@gnu.org>
parents: 48476
diff changeset
244 :set-after VARIABLES
d886606b4f3a (defcustom, custom-set-variables): Doc fix.
Dave Love <fx@gnu.org>
parents: 48476
diff changeset
245 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
246 VARIABLES when both have been customized.
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
247
17442
eb87aef64274 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
248 Read the section about customization in the Emacs Lisp manual for more
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
249 information."
21703
aea35bf72489 (defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents: 20599
diff changeset
250 ;; 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
251 ;; because that makes a bootstrapping problem
aea35bf72489 (defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents: 20599
diff changeset
252 ;; 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
253 (nconc (list 'custom-declare-variable
aea35bf72489 (defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents: 20599
diff changeset
254 (list 'quote symbol)
aea35bf72489 (defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents: 20599
diff changeset
255 (list 'quote value)
aea35bf72489 (defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents: 20599
diff changeset
256 doc)
aea35bf72489 (defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents: 20599
diff changeset
257 args))
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
258
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
259 ;;; The `defface' Macro.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
260
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
261 (defmacro defface (face spec doc &rest args)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
262 "Declare FACE as a customizable face that defaults to SPEC.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
263 FACE does not need to be quoted.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
264
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
265 Third argument DOC is the face documentation.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
266
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
267 If FACE has been set with `custom-set-face', set the face attributes
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
268 as specified by that function, otherwise set the face attributes
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
269 according to SPEC.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
270
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
271 The remaining arguments should have the form
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
272
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
273 [KEYWORD VALUE]...
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
274
17949
3b0f71e1661d (defface): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17921
diff changeset
275 The following KEYWORDs are defined:
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
276
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
277 :group VALUE should be a customization group.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
278 Add FACE to that group.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
279
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
280 SPEC should be an alist of the form ((DISPLAY ATTS)...).
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
281
17949
3b0f71e1661d (defface): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17921
diff changeset
282 The first element of SPEC where the DISPLAY matches the frame
3b0f71e1661d (defface): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17921
diff changeset
283 is the one that takes effect in that frame. The ATTRs in this
3b0f71e1661d (defface): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17921
diff changeset
284 element take effect; the other elements are ignored, on that frame.
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
285
17949
3b0f71e1661d (defface): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17921
diff changeset
286 ATTS is a list of face attributes followed by their values:
3b0f71e1661d (defface): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17921
diff changeset
287 (ATTR VALUE ATTR VALUE...)
24986
cf6d86af7374 (defface): Extend documentation to include new
Gerd Moellmann <gerd@gnu.org>
parents: 24872
diff changeset
288
cf6d86af7374 (defface): Extend documentation to include new
Gerd Moellmann <gerd@gnu.org>
parents: 24872
diff changeset
289 The possible attributes are `:family', `:width', `:height', `:weight',
cf6d86af7374 (defface): Extend documentation to include new
Gerd Moellmann <gerd@gnu.org>
parents: 24872
diff changeset
290 `:slant', `:underline', `:overline', `:strike-through', `:box',
39981
c576f3427825 (defface): Mention `:inherit' in doc-string.
Miles Bader <miles@gnu.org>
parents: 38857
diff changeset
291 `:foreground', `:background', `:stipple', `:inverse-video', and `:inherit'.
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
292
17949
3b0f71e1661d (defface): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17921
diff changeset
293 DISPLAY can either be the symbol t, which will match all frames, or an
3b0f71e1661d (defface): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17921
diff changeset
294 alist of the form \((REQ ITEM...)...). For the DISPLAY to match a
3b0f71e1661d (defface): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17921
diff changeset
295 FRAME, the REQ property of the frame must match one of the ITEM. The
3b0f71e1661d (defface): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 17921
diff changeset
296 following REQ are defined:
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
297
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
298 `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
299 Under X, in addition to the values `window-system' can take,
7144668076c7 (defface): Extend documentation for new values of `type'.
Gerd Moellmann <gerd@gnu.org>
parents: 25683
diff changeset
300 `motif', `lucid' and `x-toolkit' are allowed, and match when
7144668076c7 (defface): Extend documentation for new values of `type'.
Gerd Moellmann <gerd@gnu.org>
parents: 25683
diff changeset
301 the Motif toolkit, Lucid toolkit, or any X toolkit is in use.
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
302
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
303 `class' (the frame's color support)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
304 Should be one of `color', `grayscale', or `mono'.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
305
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
306 `background' (what color is used for the background text)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
307 Should be one of `light' or `dark'.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
308
17442
eb87aef64274 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
309 Read the section about customization in the Emacs Lisp manual for more
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
310 information."
21703
aea35bf72489 (defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents: 20599
diff changeset
311 ;; 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
312 ;; because that makes a bootstrapping problem
aea35bf72489 (defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents: 20599
diff changeset
313 ;; 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
314 (nconc (list 'custom-declare-face (list 'quote face) spec doc) args))
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
315
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
316 ;;; The `defgroup' Macro.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
317
41224
fc0e6d3f905d (custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39981
diff changeset
318 (defun custom-current-group ()
fc0e6d3f905d (custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39981
diff changeset
319 (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
320
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
321 (defun custom-declare-group (symbol members doc &rest args)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
322 "Like `defgroup', but SYMBOL is evaluated as a normal argument."
25683
d1179efb4e87 Don't define-widget-keywords.
Dave Love <fx@gnu.org>
parents: 24986
diff changeset
323 (while members
17550
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
324 (apply 'custom-add-to-group symbol (car members))
d6545cfb6c5a Synched with custom 1.90.
Per Abrahamsen <abraham@dina.kvl.dk>
parents: 17529
diff changeset
325 (setq members (cdr members)))
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
326 (when doc
26582
fbd1f4d3000d (custom-declare-group): Purecopy DOC.
Dave Love <fx@gnu.org>
parents: 25888
diff changeset
327 ;; This text doesn't get into DOC.
fbd1f4d3000d (custom-declare-group): Purecopy DOC.
Dave Love <fx@gnu.org>
parents: 25888
diff changeset
328 (put symbol 'group-documentation (purecopy doc)))
25683
d1179efb4e87 Don't define-widget-keywords.
Dave Love <fx@gnu.org>
parents: 24986
diff changeset
329 (while args
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
330 (let ((arg (car args)))
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
331 (setq args (cdr args))
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
332 (unless (symbolp arg)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
333 (error "Junk in args %S" args))
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
334 (let ((keyword arg)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
335 (value (car args)))
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
336 (unless args
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
337 (error "Keyword %s is missing an argument" keyword))
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
338 (setq args (cdr args))
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
339 (cond ((eq keyword :prefix)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
340 (put symbol 'custom-prefix value))
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
341 (t
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
342 (custom-handle-keyword symbol keyword value
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
343 'custom-group))))))
41224
fc0e6d3f905d (custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39981
diff changeset
344 ;; Record the group on the `current' list.
fc0e6d3f905d (custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39981
diff changeset
345 (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
346 (if elt (setcdr elt symbol)
fc0e6d3f905d (custom-current-group-alist): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39981
diff changeset
347 (push (cons load-file-name symbol) custom-current-group-alist)))
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
348 (run-hooks 'custom-define-hook)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
349 symbol)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
350
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
351 (defmacro defgroup (symbol members doc &rest args)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
352 "Declare SYMBOL as a customization group containing MEMBERS.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
353 SYMBOL does not need to be quoted.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
354
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
355 Third arg DOC is the group documentation.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
356
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
357 MEMBERS should be an alist of the form ((NAME WIDGET)...) where
20599
a529e09b1fe2 (defgroup): Doc fix.
Andreas Schwab <schwab@suse.de>
parents: 20445
diff changeset
358 NAME is a symbol and WIDGET is a widget for editing that symbol.
a529e09b1fe2 (defgroup): Doc fix.
Andreas Schwab <schwab@suse.de>
parents: 20445
diff changeset
359 Useful widgets are `custom-variable' for editing variables,
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
360 `custom-face' for edit faces, and `custom-group' for editing groups.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
361
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
362 The remaining arguments should have the form
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
363
25683
d1179efb4e87 Don't define-widget-keywords.
Dave Love <fx@gnu.org>
parents: 24986
diff changeset
364 [KEYWORD VALUE]...
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
365
29761
00dcb25bfffd (defcustom, defgroup): Doc fix.
Dave Love <fx@gnu.org>
parents: 28171
diff changeset
366 The following KEYWORDs are defined:
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
367
29761
00dcb25bfffd (defcustom, defgroup): Doc fix.
Dave Love <fx@gnu.org>
parents: 28171
diff changeset
368 :group VALUE should be a customization group.
00dcb25bfffd (defcustom, defgroup): Doc fix.
Dave Love <fx@gnu.org>
parents: 28171
diff changeset
369 Add SYMBOL to that group.
00dcb25bfffd (defcustom, defgroup): Doc fix.
Dave Love <fx@gnu.org>
parents: 28171
diff changeset
370
00dcb25bfffd (defcustom, defgroup): Doc fix.
Dave Love <fx@gnu.org>
parents: 28171
diff changeset
371 :version VALUE should be a string specifying that the group was introduced
00dcb25bfffd (defcustom, defgroup): Doc fix.
Dave Love <fx@gnu.org>
parents: 28171
diff changeset
372 in Emacs version VERSION.
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
373
17442
eb87aef64274 Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 17415
diff changeset
374 Read the section about customization in the Emacs Lisp manual for more
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
375 information."
21703
aea35bf72489 (defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents: 20599
diff changeset
376 ;; 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
377 ;; because that makes a bootstrapping problem
aea35bf72489 (defcustom, defgroup, defface): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents: 20599
diff changeset
378 ;; 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
379 (nconc (list 'custom-declare-group (list 'quote symbol) members doc) args))
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
380
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
381 (defun custom-add-to-group (group option widget)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
382 "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
383 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
384 (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
385 (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
386 (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
387 (put group 'custom-group (nconc members (list entry))))))
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
388
47822
46f8bf0fc7b4 (custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47677
diff changeset
389 (defun custom-group-of-mode (mode)
46f8bf0fc7b4 (custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47677
diff changeset
390 "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
391 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
392 (or (get mode 'custom-mode-group)
46f8bf0fc7b4 (custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47677
diff changeset
393 (if (or (get mode 'custom-group)
46f8bf0fc7b4 (custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47677
diff changeset
394 (and (string-match "-mode\\'" (symbol-name mode))
46f8bf0fc7b4 (custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47677
diff changeset
395 (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
396 0 (match-beginning 0))))
46f8bf0fc7b4 (custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47677
diff changeset
397 'custom-group)))
46f8bf0fc7b4 (custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47677
diff changeset
398 mode)))
46f8bf0fc7b4 (custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47677
diff changeset
399
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
400 ;;; Properties.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
401
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
402 (defun custom-handle-all-keywords (symbol args type)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
403 "For customization option SYMBOL, handle keyword arguments ARGS.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
404 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
405 (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
406 (custom-add-to-group (custom-current-group) symbol type))
25683
d1179efb4e87 Don't define-widget-keywords.
Dave Love <fx@gnu.org>
parents: 24986
diff changeset
407 (while args
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
408 (let ((arg (car args)))
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
409 (setq args (cdr args))
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
410 (unless (symbolp arg)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
411 (error "Junk in args %S" args))
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
412 (let ((keyword arg)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
413 (value (car args)))
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
414 (unless args
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
415 (error "Keyword %s is missing an argument" keyword))
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
416 (setq args (cdr args))
25683
d1179efb4e87 Don't define-widget-keywords.
Dave Love <fx@gnu.org>
parents: 24986
diff changeset
417 (custom-handle-keyword symbol keyword value type)))))
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
418
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
419 (defun custom-handle-keyword (symbol keyword value type)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
420 "For customization option SYMBOL, handle KEYWORD with VALUE.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
421 Fourth argument TYPE is the custom option type."
26582
fbd1f4d3000d (custom-declare-group): Purecopy DOC.
Dave Love <fx@gnu.org>
parents: 25888
diff changeset
422 (if purify-flag
fbd1f4d3000d (custom-declare-group): Purecopy DOC.
Dave Love <fx@gnu.org>
parents: 25888
diff changeset
423 (setq value (purecopy value)))
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
424 (cond ((eq keyword :group)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
425 (custom-add-to-group value symbol type))
20445
20ff88ac8cc2 (custom-add-version): New function.
Karl Heuer <kwzh@gnu.org>
parents: 19535
diff changeset
426 ((eq keyword :version)
20ff88ac8cc2 (custom-add-version): New function.
Karl Heuer <kwzh@gnu.org>
parents: 19535
diff changeset
427 (custom-add-version symbol value))
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
428 ((eq keyword :link)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
429 (custom-add-link symbol value))
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
430 ((eq keyword :load)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
431 (custom-add-load symbol value))
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
432 ((eq keyword :tag)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
433 (put symbol 'custom-tag value))
26831
ddaafb816c3e (custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents: 26582
diff changeset
434 ((eq keyword :set-after)
ddaafb816c3e (custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents: 26582
diff changeset
435 (custom-add-dependencies symbol value))
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
436 (t
24872
9db8a7ed814e (custom-handle-keyword): Fix error message.
Karl Heuer <kwzh@gnu.org>
parents: 24438
diff changeset
437 (error "Unknown keyword %s" keyword))))
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
438
26831
ddaafb816c3e (custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents: 26582
diff changeset
439 (defun custom-add-dependencies (symbol value)
ddaafb816c3e (custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents: 26582
diff changeset
440 "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
441 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
442 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
443 both appear in constructs like `custom-set-variables'."
ddaafb816c3e (custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents: 26582
diff changeset
444 (unless (listp value)
ddaafb816c3e (custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents: 26582
diff changeset
445 (error "Invalid custom dependency `%s'" value))
ddaafb816c3e (custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents: 26582
diff changeset
446 (let* ((deps (get symbol 'custom-dependencies))
ddaafb816c3e (custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents: 26582
diff changeset
447 (new-deps deps))
ddaafb816c3e (custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents: 26582
diff changeset
448 (while value
ddaafb816c3e (custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents: 26582
diff changeset
449 (let ((dep (car value)))
ddaafb816c3e (custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents: 26582
diff changeset
450 (unless (symbolp dep)
ddaafb816c3e (custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents: 26582
diff changeset
451 (error "Invalid custom dependency `%s'" dep))
ddaafb816c3e (custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents: 26582
diff changeset
452 (unless (memq dep new-deps)
ddaafb816c3e (custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents: 26582
diff changeset
453 (setq new-deps (cons dep new-deps)))
ddaafb816c3e (custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents: 26582
diff changeset
454 (setq value (cdr value))))
ddaafb816c3e (custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents: 26582
diff changeset
455 (unless (eq deps new-deps)
ddaafb816c3e (custom-handle-keyword): Add :set-after.
Gerd Moellmann <gerd@gnu.org>
parents: 26582
diff changeset
456 (put symbol 'custom-dependencies new-deps))))
48951
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
457
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
458 (defun custom-add-option (symbol option)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
459 "To the variable SYMBOL add OPTION.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
460
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
461 If SYMBOL is a hook variable, OPTION should be a hook member.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
462 For other types variables, the effect is undefined."
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
463 (let ((options (get symbol 'custom-options)))
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
464 (unless (member option options)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
465 (put symbol 'custom-options (cons option options)))))
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
466
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
467 (defun custom-add-link (symbol widget)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
468 "To the custom option SYMBOL add the link WIDGET."
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
469 (let ((links (get symbol 'custom-links)))
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
470 (unless (member widget links)
26582
fbd1f4d3000d (custom-declare-group): Purecopy DOC.
Dave Love <fx@gnu.org>
parents: 25888
diff changeset
471 (put symbol 'custom-links (cons (purecopy widget) links)))))
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
472
20445
20ff88ac8cc2 (custom-add-version): New function.
Karl Heuer <kwzh@gnu.org>
parents: 19535
diff changeset
473 (defun custom-add-version (symbol version)
20ff88ac8cc2 (custom-add-version): New function.
Karl Heuer <kwzh@gnu.org>
parents: 19535
diff changeset
474 "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
475 (put symbol 'custom-version (purecopy version)))
20445
20ff88ac8cc2 (custom-add-version): New function.
Karl Heuer <kwzh@gnu.org>
parents: 19535
diff changeset
476
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
477 (defun custom-add-load (symbol load)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
478 "To the custom option SYMBOL add the dependency LOAD.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
479 LOAD should be either a library file name, or a feature name."
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
480 (let ((loads (get symbol 'custom-loads)))
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
481 (unless (member load loads)
26582
fbd1f4d3000d (custom-declare-group): Purecopy DOC.
Dave Love <fx@gnu.org>
parents: 25888
diff changeset
482 (put symbol 'custom-loads (cons (purecopy load) loads)))))
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
483
49099
04672e32e3b0 (custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 48951
diff changeset
484 (defun custom-autoload (symbol load)
04672e32e3b0 (custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 48951
diff changeset
485 "Mark SYMBOL as autoloaded custom variable and add dependency LOAD."
04672e32e3b0 (custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 48951
diff changeset
486 (put symbol 'custom-autoload t)
04672e32e3b0 (custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 48951
diff changeset
487 (custom-add-load symbol load))
04672e32e3b0 (custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 48951
diff changeset
488
04672e32e3b0 (custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 48951
diff changeset
489 ;; 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
490 (defun custom-variable-p (variable)
04672e32e3b0 (custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 48951
diff changeset
491 "Return non-nil if VARIABLE is a custom variable."
04672e32e3b0 (custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 48951
diff changeset
492 (or (get variable 'standard-value)
04672e32e3b0 (custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 48951
diff changeset
493 (get variable 'custom-autoload)))
04672e32e3b0 (custom-autoload, custom-variable-p): New functions.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 48951
diff changeset
494
44911
0edc2b27187b (custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents: 44683
diff changeset
495 ;;; 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
496 ;;; 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
497
0edc2b27187b (custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents: 44683
diff changeset
498 (defvar custom-load-recursion nil
0edc2b27187b (custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents: 44683
diff changeset
499 "Hack to avoid recursive dependencies.")
0edc2b27187b (custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents: 44683
diff changeset
500
0edc2b27187b (custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents: 44683
diff changeset
501 (defun custom-load-symbol (symbol)
0edc2b27187b (custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents: 44683
diff changeset
502 "Load all dependencies for SYMBOL."
0edc2b27187b (custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents: 44683
diff changeset
503 (unless custom-load-recursion
47822
46f8bf0fc7b4 (custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47677
diff changeset
504 (let ((custom-load-recursion t))
46f8bf0fc7b4 (custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47677
diff changeset
505 (dolist (load (get symbol 'custom-loads))
46f8bf0fc7b4 (custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47677
diff changeset
506 (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
507 ;; 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
508 ((assoc load load-history))
0edc2b27187b (custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents: 44683
diff changeset
509 ;; 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
510 ;; 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
511 ;; if not necessary.
47822
46f8bf0fc7b4 (custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47677
diff changeset
512 ((let ((regexp (concat "\\(\\`\\|/\\)" (regexp-quote load)
46f8bf0fc7b4 (custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47677
diff changeset
513 "\\(\\'\\|\\.\\)"))
46f8bf0fc7b4 (custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47677
diff changeset
514 (found nil))
44911
0edc2b27187b (custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents: 44683
diff changeset
515 (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
516 (and (stringp (car loaded))
c9338efa3fd9 (custom-load-symbol): Verify that LOADED is a string.
Richard M. Stallman <rms@gnu.org>
parents: 44911
diff changeset
517 (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
518 (setq found t)))
0edc2b27187b (custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents: 44683
diff changeset
519 found))
0edc2b27187b (custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents: 44683
diff changeset
520 ;; 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
521 ;; 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
522 ;; 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
523 ((equal load "cus-edit"))
47822
46f8bf0fc7b4 (custom-group-of-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 47677
diff changeset
524 (t (condition-case nil (load load) (error nil))))))))
44911
0edc2b27187b (custom-load-symbol): Moved from cus-edit.el.
Richard M. Stallman <rms@gnu.org>
parents: 44683
diff changeset
525
48951
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
526 (defvar custom-known-themes '(user standard)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
527 "Themes that have been define with `deftheme'.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
528 The default value is the list (user standard). The theme `standard'
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
529 contains the Emacs standard settings from the original Lisp files. The
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
530 theme `user' contains all the the settings the user customized and saved.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
531 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
532 the front of this list.")
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
533
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
534 (defun custom-declare-theme (theme feature &optional doc &rest args)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
535 "Like `deftheme', but THEME is evaluated as a normal argument.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
536 FEATURE is the feature this theme provides. This symbol is created
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
537 from THEME by `custom-make-theme-feature'."
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
538 (add-to-list 'custom-known-themes theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
539 (put theme 'theme-feature feature)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
540 (when doc
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
541 (put theme 'theme-documentation doc))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
542 (while args
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
543 (let ((arg (car args)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
544 (setq args (cdr args))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
545 (unless (symbolp arg)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
546 (error "Junk in args %S" args))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
547 (let ((keyword arg)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
548 (value (car args)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
549 (unless args
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
550 (error "Keyword %s is missing an argument" keyword))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
551 (setq args (cdr args))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
552 (cond ((eq keyword :short-description)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
553 (put theme 'theme-short-description short-description))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
554 ((eq keyword :immediate)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
555 (put theme 'theme-immediate immediate))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
556 ((eq keyword :variable-set-string)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
557 (put theme 'theme-variable-set-string variable-set-string))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
558 ((eq keyword :variable-reset-string)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
559 (put theme 'theme-variable-reset-string variable-reset-string))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
560 ((eq keyword :face-set-string)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
561 (put theme 'theme-face-set-string face-set-string))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
562 ((eq keyword :face-reset-string)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
563 (put theme 'theme-face-reset-string face-reset-string)))))))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
564
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
565 (defmacro deftheme (theme &optional doc &rest args)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
566 "Declare custom theme THEME.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
567 The optional argument DOC is a doc string describing the theme.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
568 The remaining arguments should have the form
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
569
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
570 [KEYWORD VALUE]...
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
571
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
572 The following KEYWORD's are defined:
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
573
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
574 :short-description
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
575 VALUE is a short (one line) description of the theme. If not
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
576 given, DOC is used.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
577 :immediate
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
578 If VALUE is non-nil, variables specified in this theme are set
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
579 immediately when loading the theme.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
580 :variable-set-string
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
581 VALUE is a string used to indicate that a variable takes its
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
582 setting from this theme. It is passed to FORMAT with the name
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
583 of the theme as an additional argument. If not given, a
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
584 generic description is used.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
585 :variable-reset-string
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
586 VALUE is a string used in the case a variable has been forced
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
587 to its value in this theme. It is passed to FORMAT with the
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
588 name of the theme as an additional argument. If not given, a
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
589 generic description is used.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
590 :face-set-string
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
591 VALUE is a string used to indicate that a face takes its
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
592 setting from this theme. It is passed to FORMAT with the name
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
593 of the theme as an additional argument. If not given, a
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
594 generic description is used.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
595 :face-reset-string
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
596 VALUE is a string used in the case a face has been forced to
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
597 its value in this theme. It is passed to FORMAT with the name
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
598 of the theme as an additional argument. If not given, a
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
599 generic description is used.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
600
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
601 Any theme `foo' should be defined in a file called `foo-theme.el';
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
602 see `custom-make-theme-feature' for more information."
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
603 (let ((feature (custom-make-theme-feature theme)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
604 ;; It is better not to use backquote in this file,
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
605 ;; because that makes a bootstrapping problem
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
606 ;; if you need to recompile all the Lisp files using interpreted code.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
607 (nconc (list 'custom-declare-theme
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
608 (list 'quote theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
609 (list 'quote feature)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
610 doc) args)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
611
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
612 (defun custom-make-theme-feature (theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
613 "Given a symbol THEME, create a new symbol by appending \"-theme\".
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
614 Store this symbol in the `theme-feature' property of THEME.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
615 Calling `provide-theme' to provide THEME actually puts `THEME-theme'
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
616 into `features'.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
617
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
618 This allows for a file-name convention for autoloading themes:
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
619 Every theme X has a property `provide-theme' whose value is \"X-theme\".
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
620 \(require-theme X) then attempts to load the file `X-theme.el'."
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
621 (intern (concat (symbol-name theme) "-theme")))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
622
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
623 (defsubst custom-theme-p (theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
624 "Non-nil when THEME has been defined."
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
625 (memq theme custom-known-themes))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
626
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
627 (defsubst custom-check-theme (theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
628 "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
629 (unless (custom-theme-p theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
630 (error "Unknown theme `%s'" theme)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
631
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
632 ;;; Initializing.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
633
48951
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
634 (defun custom-push-theme (prop symbol theme mode value)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
635 "Add (THEME MODE VALUE) to the list in property PROP of SYMBOL.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
636 If the first element in that list is already (THEME ...),
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
637 discard it first.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
638
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
639 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
640 symbol `set', then VALUE is the value to use. If it is the symbol
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
641 `reset', then VALUE is the mode to query instead.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
642
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
643 In the following example for the variable `goto-address-url-face', the
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
644 theme `subtle-hacker' uses the same value for the variable as the theme
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
645 `gnome2':
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
646
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
647 \((standard set bold)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
648 \(gnome2 set info-xref)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
649 \(jonadab set underline)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
650 \(subtle-hacker reset gnome2))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
651
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
652
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
653 If a value has been stored for themes A B and C, and a new value
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
654 is to be stored for theme C, then the old value of C is discarded.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
655 If a new value is to be stored for theme B, however, the old value
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
656 of B is not discarded because B is not the car of the list.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
657
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
658 For variables, list property PROP is `theme-value'.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
659 For faces, list property PROP is `theme-face'.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
660 This is used in `custom-do-theme-reset', for example.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
661
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
662 The list looks the same in any case; the examples shows a possible
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
663 value of the `theme-face' property for the face `region':
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
664
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
665 \((gnome2 set ((t (:foreground \"cyan\" :background \"dark cyan\"))))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
666 \(standard set ((((class color) (background dark))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
667 \(:background \"blue\"))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
668 \(t (:background \"gray\")))))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
669
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
670 This records values for the `standard' and the `gnome2' themes.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
671 The user has not customized the face; had he done that,
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
672 the list would contain an entry for the `user' theme, too.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
673 See `custom-known-themes' for a list of known themes."
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
674 (let ((old (get symbol prop)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
675 (if (eq (car-safe (car-safe old)) theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
676 (setq old (cdr old)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
677 (put symbol prop (cons (list theme mode value) old))))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
678
22606
36171df7d571 (custom-set-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22499
diff changeset
679 (defvar custom-local-buffer nil
36171df7d571 (custom-set-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22499
diff changeset
680 "Non-nil, in a Customization buffer, means customize a specific buffer.
36171df7d571 (custom-set-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22499
diff changeset
681 If this variable is non-nil, it should be a buffer,
36171df7d571 (custom-set-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22499
diff changeset
682 and it means customize the local bindings of that buffer.
36171df7d571 (custom-set-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22499
diff changeset
683 This variable is a permanent local, and it normally has a local binding
36171df7d571 (custom-set-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22499
diff changeset
684 in every Customization buffer.")
36171df7d571 (custom-set-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22499
diff changeset
685 (put 'custom-local-buffer 'permanent-local t)
36171df7d571 (custom-set-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22499
diff changeset
686
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
687 (defun custom-set-variables (&rest args)
25683
d1179efb4e87 Don't define-widget-keywords.
Dave Love <fx@gnu.org>
parents: 24986
diff changeset
688 "Initialize variables according to user preferences.
48951
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
689 The settings are registered as theme `user'.
48821
d886606b4f3a (defcustom, custom-set-variables): Doc fix.
Dave Love <fx@gnu.org>
parents: 48476
diff changeset
690 The arguments should each be a list of the form:
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
691
25683
d1179efb4e87 Don't define-widget-keywords.
Dave Love <fx@gnu.org>
parents: 24986
diff changeset
692 (SYMBOL VALUE [NOW [REQUEST [COMMENT]]])
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
693
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
694 The unevaluated VALUE is stored as the saved value for SYMBOL.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
695 If NOW is present and non-nil, VALUE is also evaluated and bound as
25683
d1179efb4e87 Don't define-widget-keywords.
Dave Love <fx@gnu.org>
parents: 24986
diff changeset
696 the default value for the SYMBOL.
48951
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
697
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
698 REQUEST is a list of features we must 'require for SYMBOL.
25683
d1179efb4e87 Don't define-widget-keywords.
Dave Love <fx@gnu.org>
parents: 24986
diff changeset
699 COMMENT is a comment string about SYMBOL."
48951
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
700 (apply 'custom-theme-set-variables 'user args))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
701
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
702 (defun custom-theme-set-variables (theme &rest args)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
703 "Initialize variables according to settings specified by args.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
704 Records the settings as belonging to THEME.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
705
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
706 The arguments should be a list where each entry has the form:
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
707
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
708 (SYMBOL VALUE [NOW [REQUEST [COMMENT]]])
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
709
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
710 The unevaluated VALUE is stored as the saved value for SYMBOL.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
711 If NOW is present and non-nil, VALUE is also evaluated and bound as
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
712 the default value for the SYMBOL.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
713 REQUEST is a list of features we must 'require for SYMBOL.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
714 COMMENT is a comment string about SYMBOL.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
715
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
716 Several properties of THEME and SYMBOL are used in the process:
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
717
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
718 If THEME property `theme-immediate' is non-nil, this is equivalent of
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
719 providing the NOW argument to all symbols in the argument list: SYMBOL
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
720 is bound to the evaluated VALUE. The only difference is SYMBOL property
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
721 `force-value': if NOW is non-nil, SYMBOL's property `force-value' is set to
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
722 the symbol `rogue', else if THEME's property `theme-immediate' is non-nil,
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
723 FACE's property `force-face' is set to the symbol `immediate'.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
724
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
725 VALUE itself is saved unevaluated as SYMBOL property `saved-value' and
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
726 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
727 (custom-check-theme theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
728 (let ((immediate (get theme 'theme-immediate)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
729 (setq args
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
730 (sort args
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
731 (lambda (a1 a2)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
732 (let* ((sym1 (car a1))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
733 (sym2 (car a2))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
734 (1-then-2 (memq sym1 (get sym2 'custom-dependencies)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
735 (2-then-1 (memq sym2 (get sym1 'custom-dependencies))))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
736 (cond ((and 1-then-2 2-then-1)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
737 (error "Circular custom dependency between `%s' and `%s'"
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
738 sym1 sym2))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
739 (2-then-1 nil)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
740 ;; Put symbols with :require last. The macro
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
741 ;; define-minor-mode generates a defcustom
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
742 ;; with a :require and a :set, where the
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
743 ;; setter function calls the mode function.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
744 ;; Putting symbols with :require last ensures
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
745 ;; that the mode function will see other
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
746 ;; customized values rather than default
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
747 ;; values.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
748 (t (nth 3 a2)))))))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
749 (while args
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
750 (let ((entry (car args)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
751 (if (listp entry)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
752 (let* ((symbol (nth 0 entry))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
753 (value (nth 1 entry))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
754 (now (nth 2 entry))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
755 (requests (nth 3 entry))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
756 (comment (nth 4 entry))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
757 set)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
758 (when requests
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
759 (put symbol 'custom-requests requests)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
760 (mapc 'require requests))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
761 (setq set (or (get symbol 'custom-set) 'custom-set-default))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
762 (put symbol 'saved-value (list value))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
763 (put symbol 'saved-variable-comment comment)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
764 (custom-push-theme 'theme-value symbol theme 'set value)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
765 ;; 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
766 ;; 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
767 (condition-case data
24438
4a78f6354310 (custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents: 23354
diff changeset
768 (cond (now
4a78f6354310 (custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents: 23354
diff changeset
769 ;; Rogue variable, set it now.
4a78f6354310 (custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents: 23354
diff changeset
770 (put symbol 'force-value t)
4a78f6354310 (custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents: 23354
diff changeset
771 (funcall set symbol (eval value)))
4a78f6354310 (custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents: 23354
diff changeset
772 ((default-boundp symbol)
4a78f6354310 (custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents: 23354
diff changeset
773 ;; Something already set this, overwrite it.
4a78f6354310 (custom-set-variables): Protect against setter errors.
Dave Love <fx@gnu.org>
parents: 23354
diff changeset
774 (funcall set symbol (eval value))))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49522
diff changeset
775 (error
31362
652b5c65769a (custom-set-variables): Print message about errors in
Dave Love <fx@gnu.org>
parents: 29761
diff changeset
776 (message "Error setting %s: %s" symbol data)))
48951
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
777 (setq args (cdr args))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
778 (and (or now (default-boundp symbol))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
779 (put symbol 'variable-comment comment)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
780 ;; Old format, a plist of SYMBOL VALUE pairs.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
781 (message "Warning: old format `custom-set-variables'")
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
782 (ding)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
783 (sit-for 2)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
784 (let ((symbol (nth 0 args))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
785 (value (nth 1 args)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
786 (put symbol 'saved-value (list value))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
787 (custom-push-theme 'theme-value symbol theme 'set value))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
788 (setq args (cdr (cdr args))))))))
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
789
22606
36171df7d571 (custom-set-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22499
diff changeset
790 (defun custom-set-default (variable value)
36171df7d571 (custom-set-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22499
diff changeset
791 "Default :set function for a customizable variable.
36171df7d571 (custom-set-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22499
diff changeset
792 Normally, this sets the default value of VARIABLE to VALUE,
36171df7d571 (custom-set-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22499
diff changeset
793 but if `custom-local-buffer' is non-nil,
36171df7d571 (custom-set-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22499
diff changeset
794 this sets the local binding in that buffer instead."
36171df7d571 (custom-set-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22499
diff changeset
795 (if custom-local-buffer
36171df7d571 (custom-set-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22499
diff changeset
796 (with-current-buffer custom-local-buffer
36171df7d571 (custom-set-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22499
diff changeset
797 (set variable value))
36171df7d571 (custom-set-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22499
diff changeset
798 (set-default variable value)))
36171df7d571 (custom-set-default): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22499
diff changeset
799
50123
7c924263658d (custom-set-minor-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49588
diff changeset
800 (defun custom-set-minor-mode (variable value)
7c924263658d (custom-set-minor-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49588
diff changeset
801 ":set function for minor mode variables.
7c924263658d (custom-set-minor-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49588
diff changeset
802 Normally, this sets the default value of VARIABLE to nil if VALUE
7c924263658d (custom-set-minor-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49588
diff changeset
803 is nil and to t otherwise,
7c924263658d (custom-set-minor-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49588
diff changeset
804 but if `custom-local-buffer' is non-nil,
7c924263658d (custom-set-minor-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49588
diff changeset
805 this sets the local binding in that buffer instead."
7c924263658d (custom-set-minor-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49588
diff changeset
806 (if custom-local-buffer
7c924263658d (custom-set-minor-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49588
diff changeset
807 (with-current-buffer custom-local-buffer
7c924263658d (custom-set-minor-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49588
diff changeset
808 (funcall variable (or value 0)))
7c924263658d (custom-set-minor-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49588
diff changeset
809 (funcall variable (or value 0))))
7c924263658d (custom-set-minor-mode): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 49588
diff changeset
810
44683
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
811 (defun custom-quote (sexp)
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
812 "Quote SEXP iff it is not self quoting."
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
813 (if (or (memq sexp '(t nil))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
814 (keywordp sexp)
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
815 (and (listp sexp)
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
816 (memq (car sexp) '(lambda)))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
817 (stringp sexp)
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
818 (numberp sexp)
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
819 (vectorp sexp)
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
820 ;;; (and (fboundp 'characterp)
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
821 ;;; (characterp sexp))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
822 )
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
823 sexp
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
824 (list 'quote sexp)))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
825
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
826 (defun customize-mark-to-save (symbol)
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
827 "Mark SYMBOL for later saving.
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
828
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49522
diff changeset
829 If the default value of SYMBOL is different from the standard value,
44683
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
830 set the `saved-value' property to a list whose car evaluates to the
49522
4dd5da1ea3dc * font-lock.el (lisp-font-lock-keywords-1): Match `deftheme'.
John Paul Wallington <jpw@pobox.com>
parents: 49099
diff changeset
831 default value. Otherwise, set it to nil.
44683
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
832
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
833 To actually save the value, call `custom-save-all'.
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
834
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
835 Return non-nil iff the `saved-value' property actually changed."
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
836 (let* ((get (or (get symbol 'custom-get) 'default-value))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
837 (value (funcall get symbol))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
838 (saved (get symbol 'saved-value))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
839 (standard (get symbol 'standard-value))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
840 (comment (get symbol 'customized-variable-comment)))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
841 ;; Save default value iff different from standard value.
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
842 (if (or (null standard)
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
843 (not (equal value (condition-case nil
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
844 (eval (car standard))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
845 (error nil)))))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
846 (put symbol 'saved-value (list (custom-quote value)))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
847 (put symbol 'saved-value nil))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
848 ;; Clear customized information (set, but not saved).
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
849 (put symbol 'customized-value nil)
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
850 ;; Save any comment that might have been set.
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
851 (when comment
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
852 (put symbol 'saved-variable-comment comment))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
853 (not (equal saved (get symbol 'saved-value)))))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
854
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
855 (defun customize-mark-as-set (symbol)
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
856 "Mark current value of SYMBOL as being set from customize.
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
857
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49522
diff changeset
858 If the default value of SYMBOL is different from the saved value if any,
44683
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
859 or else if it is different from the standard value, set the
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49522
diff changeset
860 `customized-value' property to a list whose car evaluates to the
49522
4dd5da1ea3dc * font-lock.el (lisp-font-lock-keywords-1): Match `deftheme'.
John Paul Wallington <jpw@pobox.com>
parents: 49099
diff changeset
861 default value. Otherwise, set it to nil.
44683
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
862
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
863 Return non-nil iff the `customized-value' property actually changed."
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
864 (let* ((get (or (get symbol 'custom-get) 'default-value))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
865 (value (funcall get symbol))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
866 (customized (get symbol 'customized-value))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
867 (old (or (get symbol 'saved-value) (get symbol 'standard-value))))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
868 ;; Mark default value as set iff different from old value.
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
869 (if (or (null old)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 49522
diff changeset
870 (not (equal value (condition-case nil
44683
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
871 (eval (car old))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
872 (error nil)))))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
873 (put symbol 'customized-value (list (custom-quote value)))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
874 (put symbol 'customized-value nil))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
875 ;; Changed?
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
876 (not (equal customized (get symbol 'customized-value)))))
17031c88f781 (customize-mark-to-save, customize-mark-as-set)
Miles Bader <miles@gnu.org>
parents: 42556
diff changeset
877
48951
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
878 ;;; Theme Manipulation
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
879
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
880 (defvar custom-loaded-themes nil
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
881 "Themes in the order they are loaded.")
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
882
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
883 (defun custom-theme-loaded-p (theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
884 "Return non-nil when THEME has been loaded."
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
885 (memq theme custom-loaded-themes))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
886
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
887 (defun provide-theme (theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
888 "Indicate that this file provides THEME.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
889 Add THEME to `custom-loaded-themes' and `provide' whatever
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
890 is stored in THEME's property `theme-feature'.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
891
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
892 Usually the theme-feature property contains a symbol created
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
893 by `custom-make-theme-feature'."
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
894 (custom-check-theme theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
895 (provide (get theme 'theme-feature))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
896 (setq custom-loaded-themes (nconc (list theme) custom-loaded-themes)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
897
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
898 (defun require-theme (theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
899 "Try to load a theme by requiring its feature.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
900 THEME's feature is stored in THEME's `theme-feature' property.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
901
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
902 Usually the `theme-feature' property contains a symbol created
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
903 by `custom-make-theme-feature'."
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
904 ;; 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
905 ;; This allows to pull in themes by a file-name convention
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
906 (require (or (get theme 'theme-feature)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
907 (custom-make-theme-feature theme))))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
908
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
909 (defun custom-remove-theme (spec-alist theme)
49522
4dd5da1ea3dc * font-lock.el (lisp-font-lock-keywords-1): Match `deftheme'.
John Paul Wallington <jpw@pobox.com>
parents: 49099
diff changeset
910 "Delete all elements from SPEC-ALIST whose car is THEME."
48951
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
911 (let ((elt (assoc theme spec-alist)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
912 (while elt
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
913 (setq spec-alist (delete elt spec-alist)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
914 elt (assoc theme spec-alist))))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
915 spec-alist)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
916
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
917 (defun custom-do-theme-reset (theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
918 "Undo all settings defined by THEME.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
919
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
920 A variable remains unchanged if its property `theme-value' does not
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
921 contain a value for THEME. A face remains unchanged if its property
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
922 `theme-face' does not contain a value for THEME. In either case, all
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
923 settings for THEME are removed from the property and the variable or
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
924 face is set to the `user' theme.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
925
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
926 See `custom-known-themes' for a list of known themes."
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
927 (let (spec-list)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
928 (mapatoms (lambda (symbol)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
929 ;; This works even if symbol is both a variable and a
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
930 ;; face.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
931 (setq spec-list (get symbol 'theme-value))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
932 (when spec-list
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
933 (put symbol 'theme-value (custom-remove-theme spec-list theme))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
934 (custom-theme-reset-internal symbol 'user))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
935 (setq spec-list (get symbol 'theme-face))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
936 (when spec-list
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
937 (put symbol 'theme-face (custom-remove-theme spec-list theme))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
938 (custom-theme-reset-internal-face symbol 'user))))))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
939
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
940 (defun custom-theme-load-themes (by-theme &rest body)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
941 "Load the themes specified by BODY.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
942 Record them as required by theme BY-THEME. BODY is a sequence of either
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
943
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
944 THEME
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
945 BY-THEME requires THEME
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
946 \(reset THEME)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
947 Undo all the settings made by THEME
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
948 \(hidden THEME)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
949 Require THEME but hide it from the user
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
950
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
951 All the themes loaded for BY-THEME are recorded in BY-THEME's property
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
952 `theme-loads-themes'. Any theme loaded with the hidden predicate will
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
953 be given the property `theme-hidden' unless it has been loaded before.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
954 Whether a theme has been loaded before is determined by the function
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
955 `custom-theme-loaded-p'."
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
956 (custom-check-theme by-theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
957 (let ((theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
958 (themes-loaded (get by-theme 'theme-loads-themes)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
959 (while theme
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
960 (setq theme (car body)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
961 body (cdr body))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
962 (cond ((and (consp theme) (eq (car theme) 'reset))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
963 (custom-do-theme-reset (cadr theme)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
964 ((and (consp theme) (eq (car theme) 'hidden))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
965 (require-theme (cadr theme))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
966 (unless (custom-theme-loaded-p (cadr theme))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
967 (put (cadr theme) 'theme-hidden t)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
968 (t
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
969 (require-theme theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
970 (put theme 'theme-hidden nil)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
971 (setq themes-loaded (nconc (list theme) themes-loaded)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
972 (put by-theme 'theme-loads-themes themes-loaded)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
973
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
974 (defun custom-load-themes (&rest body)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
975 "Load themes for the USER theme as specified by BODY.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
976
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
977 See `custom-theme-load-themes' for more information on BODY."
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
978 (apply 'custom-theme-load-themes 'user body))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
979
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
980 ; (defsubst copy-upto-last (elt list)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
981 ; "Copy all the elements of the list upto the last occurence of elt"
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
982 ; ;; Is it faster to do more work in C than to do less in elisp?
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
983 ; (nreverse (cdr (member elt (reverse list)))))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
984
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
985 (defun custom-theme-value (theme theme-spec-list)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
986 "Determine the value for THEME defined by THEME-SPEC-LIST.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
987 Returns a list with the original value if found; nil otherwise.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
988
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
989 THEME-SPEC-LIST is an alist with themes as its key. As new themes are
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
990 installed, these are added to the front of THEME-SPEC-LIST.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
991 Each element has the form
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
992
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
993 \(THEME MODE VALUE)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
994
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
995 MODE is either the symbol `set' or the symbol `reset'. See
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
996 `custom-push-theme' for more information on the format of
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
997 THEME-SPEC-LIST."
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
998 ;; Note we do _NOT_ signal an error if the theme is unknown
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
999 ;; it might have gone away without the user knowing.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1000 (let ((value (cdr (assoc theme theme-spec-list))))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1001 (if value
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1002 (if (eq (car value) 'set)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1003 (cdr value)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1004 (custom-theme-value (cadr value) theme-spec-list)))))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1005
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1006 (defun custom-theme-variable-value (variable theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1007 "Return (list value) indicating value of VARIABLE in THEME.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1008 If THEME does not define a value for VARIABLE, return nil. The value
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1009 definitions per theme are stored in VARIABLE's property `theme-value'.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1010 The actual work is done by function `custom-theme-value', which see.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1011 See `custom-push-theme' for more information on how these definitions
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1012 are stored."
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1013 (custom-theme-value theme (get variable 'theme-value)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1014
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1015 (defun custom-theme-reset-internal (symbol to-theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1016 "Reset SYMBOL to the value defined by TO-THEME.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1017 If SYMBOL is not defined in TO-THEME, reset SYMBOL to the standard
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1018 value. See `custom-theme-variable-value'. The standard value is
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1019 stored in SYMBOL's property `standard-value'."
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1020 (let ((value (custom-theme-variable-value symbol to-theme))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1021 was-in-theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1022 (setq was-in-theme value)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1023 (setq value (or value (get symbol 'standard-value)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1024 (when value
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1025 (put symbol 'saved-value was-in-theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1026 (if (or (get 'force-value symbol) (default-boundp symbol))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1027 (funcall (or (get symbol 'custom-set) 'set-default) symbol
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1028 (eval (car value)))))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1029 value))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1030
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1031 (defun custom-theme-reset-variables (theme &rest args)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1032 "Reset the value of the variables to values previously defined.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1033 Associate this setting with THEME.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1034
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1035 ARGS is a list of lists of the form
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1036
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1037 (VARIABLE TO-THEME)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1038
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1039 This means reset VARIABLE to its value in TO-THEME."
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1040 (custom-check-theme theme)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1041 (mapcar '(lambda (arg)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1042 (apply 'custom-theme-reset-internal arg)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1043 (custom-push-theme 'theme-value (car arg) theme 'reset (cadr arg)))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1044 args))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1045
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1046 (defun custom-reset-variables (&rest args)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1047 "Reset the value of the variables to values previously saved.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1048 This is the setting associated the `user' theme.
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1049
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1050 ARGS is a list of lists of the form
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1051
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1052 (VARIABLE TO-THEME)
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1053
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1054 This means reset VARIABLE to its value in TO-THEME."
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1055 (apply 'custom-theme-reset-variables 'user args))
d77bc55dd27b (custom-known-themes): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 48821
diff changeset
1056
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
1057 ;;; The End.
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
1058
18882
539611251037 (custom-declare-variable-list): Process already-declared
Richard M. Stallman <rms@gnu.org>
parents: 18033
diff changeset
1059 ;; 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
1060 (while custom-declare-variable-list
539611251037 (custom-declare-variable-list): Process already-declared
Richard M. Stallman <rms@gnu.org>
parents: 18033
diff changeset
1061 (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
1062 (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
1063
17334
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
1064 (provide 'custom)
1effe507ea85 Initial revision
Per Abrahamsen <abraham@dina.kvl.dk>
parents:
diff changeset
1065
25683
d1179efb4e87 Don't define-widget-keywords.
Dave Love <fx@gnu.org>
parents: 24986
diff changeset
1066 ;;; custom.el ends here