;;; custom.el --- tools for declaring and initializing options
;;
-;; Copyright (C) 1996, 1997, 1999, 2001, 2002 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1999, 2001, 2002, 2004
+;; Free Software Foundation, Inc.
;;
;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
;; Maintainer: FSF
"Initialize SYMBOL with VALUE.
This will do nothing if symbol already has a default binding.
Otherwise, if symbol has a `saved-value' property, it will evaluate
-the car of that and used as the default binding for symbol.
+the car of that and use it as the default binding for symbol.
Otherwise, VALUE will be evaluated and used as the default binding for
symbol."
(unless (default-boundp symbol)
"Declare SYMBOL as a customizable variable that defaults to VALUE.
DOC is the variable documentation.
-Neither SYMBOL nor VALUE needs to be quoted.
+Neither SYMBOL nor VALUE need to be quoted.
If SYMBOL is not already bound, initialize it to VALUE.
The remaining arguments should have the form
Include an external link after the documentation string for this
item. This is a sentence containing an active field which
references some other documentation.
-
+
There are three alternatives you can use for LINK-DATA:
-
+
(custom-manual INFO-NODE)
Link to an Info node; INFO-NODE is a string which specifies
the node name, as in \"(emacs)Top\". The link appears as
`[manual]' in the customization buffer.
-
+
(info-link INFO-NODE)
Like `custom-manual' except that the link appears in the
customization buffer with the Info node name.
-
+
(url-link URL)
Link to a web page; URL is a string which specifies the URL.
The link appears in the customization buffer as URL.
-
+
You can specify the text to use in the customization buffer by
adding `:tag NAME' after the first element of the LINK-DATA; for
example, (info-link :tag \"foo\" \"(emacs)Top\") makes a link to the
Emacs manual which appears in the buffer as `foo'.
-
+
An item can have more than one external link; however, most items
have none at all.
:initialize
Specifies that SYMBOL should be set after the list of variables
VARIABLES when both have been customized.
+If SYMBOL has a local binding, then this form affects the local
+binding. This is normally not what you want. Thus, if you need
+to load a file defining variables with this form, or with
+`defvar' or `defconst', you should always load that file
+_outside_ any bindings for these variables. \(`defvar' and
+`defconst' behave similarly in this respect.)
+
Read the section about customization in the Emacs Lisp manual for more
information."
;; It is better not to use backquote in this file,
Third argument DOC is the face documentation.
-If FACE has been set with `custom-set-face', set the face attributes
+If FACE has been set with `custom-set-faces', set the face attributes
as specified by that function, otherwise set the face attributes
according to SPEC.
`type' (the value of `window-system')
Under X, in addition to the values `window-system' can take,
- `motif', `lucid' and `x-toolkit' are allowed, and match when
- the Motif toolkit, Lucid toolkit, or any X toolkit is in use.
+ `motif', `lucid', `gtk' and `x-toolkit' are allowed, and match when
+ the Motif toolkit, Lucid toolkit, GTK toolkit or any X toolkit is in use.
`class' (the frame's color support)
Should be one of `color', `grayscale', or `mono'.
`background' (what color is used for the background text)
Should be one of `light' or `dark'.
+`min-colors' (the minimum number of colors the frame should support)
+ Should be an integer, it is compared with the result of
+ `display-color-cells'.
+
+`supports' (only match frames that support the specified face attributes)
+ Should be a list of face attributes. See the documentation for
+ the function `display-supports-face-attributes-p' for more
+ information on exactly how testing is done.
+
Read the section about customization in the Emacs Lisp manual for more
information."
;; It is better not to use backquote in this file,
"Load all dependencies for SYMBOL."
(unless custom-load-recursion
(let ((custom-load-recursion t))
+ ;; Load these files if not already done,
+ ;; to make sure we know all the dependencies of SYMBOL.
+ (condition-case nil
+ (require 'cus-load)
+ (error nil))
+ (condition-case nil
+ (require 'cus-start)
+ (error nil))
(dolist (load (get symbol 'custom-loads))
(cond ((symbolp load) (condition-case nil (require load) (error nil)))
;; This is subsumed by the test below, but it's much faster.
(error "Keyword %s is missing an argument" keyword))
(setq args (cdr args))
(cond ((eq keyword :short-description)
- (put theme 'theme-short-description short-description))
+ (put theme 'theme-short-description value))
((eq keyword :immediate)
- (put theme 'theme-immediate immediate))
+ (put theme 'theme-immediate value))
((eq keyword :variable-set-string)
- (put theme 'theme-variable-set-string variable-set-string))
+ (put theme 'theme-variable-set-string value))
((eq keyword :variable-reset-string)
- (put theme 'theme-variable-reset-string variable-reset-string))
+ (put theme 'theme-variable-reset-string value))
((eq keyword :face-set-string)
- (put theme 'theme-face-set-string face-set-string))
+ (put theme 'theme-face-set-string value))
((eq keyword :face-reset-string)
- (put theme 'theme-face-reset-string face-reset-string)))))))
+ (put theme 'theme-face-reset-string value)))))))
(defmacro deftheme (theme &optional doc &rest args)
"Declare custom theme THEME.
((default-boundp symbol)
;; Something already set this, overwrite it.
(funcall set symbol (eval value))))
- (error
+ (error
(message "Error setting %s: %s" symbol data)))
(setq args (cdr args))
(and (or now (default-boundp symbol))
(set variable value))
(set-default variable value)))
+(defun custom-set-minor-mode (variable value)
+ ":set function for minor mode variables.
+Normally, this sets the default value of VARIABLE to nil if VALUE
+is nil and to t otherwise,
+but if `custom-local-buffer' is non-nil,
+this sets the local binding in that buffer instead."
+ (if custom-local-buffer
+ (with-current-buffer custom-local-buffer
+ (funcall variable (or value 0)))
+ (funcall variable (or value 0))))
+
(defun custom-quote (sexp)
"Quote SEXP iff it is not self quoting."
(if (or (memq sexp '(t nil))
(defun customize-mark-to-save (symbol)
"Mark SYMBOL for later saving.
-If the default value of SYMBOL is different from the standard value,
+If the default value of SYMBOL is different from the standard value,
set the `saved-value' property to a list whose car evaluates to the
-default value. Otherwise, set it til nil.
+default value. Otherwise, set it to nil.
To actually save the value, call `custom-save-all'.
(defun customize-mark-as-set (symbol)
"Mark current value of SYMBOL as being set from customize.
-If the default value of SYMBOL is different from the saved value if any,
+If the default value of SYMBOL is different from the saved value if any,
or else if it is different from the standard value, set the
-`customized-value' property to a list whose car evaluates to the
-default value. Otherwise, set it til nil.
+`customized-value' property to a list whose car evaluates to the
+default value. Otherwise, set it to nil.
Return non-nil iff the `customized-value' property actually changed."
(let* ((get (or (get symbol 'custom-get) 'default-value))
(old (or (get symbol 'saved-value) (get symbol 'standard-value))))
;; Mark default value as set iff different from old value.
(if (or (null old)
- (not (equal value (condition-case nil
+ (not (equal value (condition-case nil
(eval (car old))
(error nil)))))
(put symbol 'customized-value (list (custom-quote value)))
(custom-make-theme-feature theme))))
(defun custom-remove-theme (spec-alist theme)
- "Detelete all elements from SPEC-ALIST whose car is THEME."
+ "Delete all elements from SPEC-ALIST whose car is THEME."
(let ((elt (assoc theme spec-alist)))
(while elt
(setq spec-alist (delete elt spec-alist)
(provide 'custom)
+;;; arch-tag: 041b6116-aabe-4f9a-902d-74092bc3dab2
;;; custom.el ends here