*** empty log message ***
[bpt/emacs.git] / lisp / custom.el
index a724d49..f8ffaea 100644 (file)
@@ -1,6 +1,6 @@
 ;;; custom.el -- Tools for declaring and initializing options.
 ;;
-;; Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
 ;; Maintainer: FSF
@@ -86,9 +86,9 @@ or (last of all) VALUE."
 
 (defun custom-initialize-changed (symbol value)
   "Initialize SYMBOL with VALUE.
-Like `custom-initialize-reset', but only use the `:set' function if the
+Like `custom-initialize-reset', but only use the `:set' function if
 not using the standard setting.
-For the standard setting, use the `set-default'."
+For the standard setting, use `set-default'."
   (cond ((default-boundp symbol)
         (funcall (or (get symbol 'custom-set) 'set-default)
                  symbol
@@ -137,8 +137,8 @@ not the default value itself."
                ((eq keyword :options)
                 (if (get symbol 'custom-options)
                     ;; Slow safe code to avoid duplicates.
-                    (mapcar (lambda (option)
-                              (custom-add-option symbol option))
+                    (mapc (lambda (option)
+                            (custom-add-option symbol option))
                             value)
                   ;; Fast code for the common case.
                   (put symbol 'custom-options (copy-sequence value))))
@@ -165,7 +165,6 @@ The remaining arguments should have the form
 The following keywords are meaningful:
 
 :type  VALUE should be a widget type for editing the symbols value.
-       The default is `sexp'.
 :options VALUE should be a list of valid members of the widget type.
 :group  VALUE should be a customization group.
         Add SYMBOL to that group.
@@ -319,12 +318,11 @@ information."
 
 (defun custom-add-to-group (group option widget)
   "To existing GROUP add a new OPTION of type WIDGET.
-If there already is an entry for that option, overwrite it."
-  (let* ((members (get group 'custom-group))
-        (old (assq option members)))
-    (if old
-       (setcar (cdr old) widget)
-      (put group 'custom-group (nconc members (list (list option widget)))))))
+If there already is an entry for OPTION and WIDGET, nothing is done."
+  (let ((members (get group 'custom-group))
+       (entry (list option widget)))
+    (unless (member entry members)
+      (put group 'custom-group (nconc members (list entry))))))
 
 ;;; Properties.
 
@@ -440,8 +438,8 @@ COMMENT is a comment string about SYMBOL."
                  (cond ((and 1-then-2 2-then-1)
                         (error "Circular custom dependency between `%s' and `%s'"
                                sym1 sym2))
-                       (2-then-1 nil)
-                       (t t))))))
+                       (1-then-2 t)
+                       (t nil))))))
   (while args
     (let ((entry (car args)))
       (if (listp entry)
@@ -453,13 +451,13 @@ COMMENT is a comment string about SYMBOL."
                 set)
            (when requests
              (put symbol 'custom-requests requests)
-             (mapcar 'require requests))
+             (mapc 'require requests))
            (setq set (or (get symbol 'custom-set) 'custom-set-default))
            (put symbol 'saved-value (list value))
            (put symbol 'saved-variable-comment comment)
            ;; Allow for errors in the case where the setter has
-           ;; changed between versions, say.
-           (condition-case nil
+           ;; changed between versions, say, but let the user know.
+           (condition-case data
                (cond (now
                       ;; Rogue variable, set it now.
                       (put symbol 'force-value t)
@@ -467,7 +465,8 @@ COMMENT is a comment string about SYMBOL."
                      ((default-boundp symbol)
                       ;; Something already set this, overwrite it.
                       (funcall set symbol (eval value))))
-             (error nil))
+             (error 
+              (message "Error setting %s: %s" symbol data)))
            (setq args (cdr args))
            (and (or now (default-boundp symbol))
                 (put symbol 'variable-comment comment)))