]> code.delx.au - gnu-emacs/blobdiff - lisp/custom.el
*** empty log message ***
[gnu-emacs] / lisp / custom.el
index abf4c5356a5a4e09fa6bbeda2e53e2be7aceaac3..2ddd7ceb9435b57105c015bf2cbc97d2933a7668 100644 (file)
@@ -1,6 +1,7 @@
 ;;; 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
@@ -53,7 +54,7 @@ Users should not set it.")
   "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)
@@ -175,7 +176,7 @@ set to nil, as the value is no longer rogue."
   "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
 
@@ -191,27 +192,27 @@ The following keywords are meaningful:
         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
@@ -245,6 +246,13 @@ The following keywords are meaningful:
        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,
@@ -264,7 +272,7 @@ FACE does not need to be quoted.
 
 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.
 
@@ -297,8 +305,8 @@ following REQ are defined:
 
 `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'.
@@ -306,6 +314,15 @@ following REQ are defined:
 `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,
@@ -481,6 +498,17 @@ LOAD should be either a library file name, or a feature name."
     (unless (member load loads)
       (put symbol 'custom-loads (cons (purecopy load) loads)))))
 
+(defun custom-autoload (symbol load)
+  "Mark SYMBOL as autoloaded custom variable and add dependency LOAD."
+  (put symbol 'custom-autoload t)
+  (custom-add-load symbol load))
+
+;; This test is also in the C code of `user-variable-p'.
+(defun custom-variable-p (variable)
+  "Return non-nil if VARIABLE is a custom variable."
+  (or (get variable 'standard-value)
+      (get variable 'custom-autoload)))
+
 ;;; Loading files needed to customize a symbol.
 ;;; This is in custom.el because menu-bar.el needs it for toggle cmds.
 
@@ -491,6 +519,14 @@ LOAD should be either a library file name, or a feature name."
   "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.
@@ -539,17 +575,17 @@ from THEME by `custom-make-theme-feature'."
          (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.
@@ -761,7 +797,7 @@ in SYMBOL's list property `theme-value' \(using `custom-push-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))
@@ -786,6 +822,17 @@ this sets the local binding in that buffer instead."
        (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))
@@ -804,9 +851,9 @@ this sets the local binding in that buffer instead."
 (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'.
 
@@ -833,10 +880,10 @@ Return non-nil iff the `saved-value' property actually changed."
 (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))
@@ -845,7 +892,7 @@ Return non-nil iff the `customized-value' property actually changed."
         (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)))
@@ -885,7 +932,7 @@ by `custom-make-theme-feature'."
               (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)
@@ -1041,4 +1088,5 @@ This means reset VARIABLE to its value in TO-THEME."
 
 (provide 'custom)
 
+;;; arch-tag: 041b6116-aabe-4f9a-902d-74092bc3dab2
 ;;; custom.el ends here