diff lisp/cus-edit.el @ 412:697ef44129c6 r21-2-14

Import from CVS: tag r21-2-14
author cvs
date Mon, 13 Aug 2007 11:20:41 +0200
parents de805c49cfc1
children ebe98a74bd68
line wrap: on
line diff
--- a/lisp/cus-edit.el	Mon Aug 13 11:19:22 2007 +0200
+++ b/lisp/cus-edit.el	Mon Aug 13 11:20:41 2007 +0200
@@ -1,9 +1,9 @@
 ;;; cus-edit.el --- Tools for customizating Emacs and Lisp packages.
 ;;
-;; Copyright (C) 1996, 1997, 2000 Free Software Foundation, Inc.
+;; Copyright (C) 1996, 1997 Free Software Foundation, Inc.
 ;;
 ;; Author: Per Abrahamsen <abraham@dina.kvl.dk>
-;; Maintainer: Hrvoje Niksic <hniksic@xemacs.org>
+;; Maintainer: Hrvoje Niksic <hniksic@srce.hr>
 ;; Keywords: help, faces
 ;; Version: 1.9960-x
 ;; X-URL: http://www.dina.kvl.dk/~abraham/custom/
@@ -55,7 +55,6 @@
 
 (require 'cus-load)
 (require 'cus-start)
-(require 'cus-file)
 
 ;; Huh?  This looks dirty!
 (put 'custom-define-hook 'custom-type 'hook)
@@ -400,7 +399,7 @@
     (custom-unlispify-menu-entry symbol t)))
 
 (defun custom-prefix-add (symbol prefixes)
-  ;; Add SYMBOL to list of ignored PREFIXES.
+  ;; Addd SYMBOL to list of ignored PREFIXES.
   (cons (or (get symbol 'custom-prefix)
 	    (concat (symbol-name symbol) "-"))
 	prefixes))
@@ -618,7 +617,7 @@
 
 ;;; The Customize Commands
 
-(defun custom-prompt-variable (prompt-var prompt-val &optional comment)
+(defun custom-prompt-variable (prompt-var prompt-val)
   "Prompt for a variable and a value and return them as a list.
 PROMPT-VAR is the prompt for the variable, and PROMPT-VAL is the
 prompt for the value.  The %s escape in PROMPT-VAL is replaced with
@@ -628,13 +627,10 @@
 it were the arg to `interactive' (which see) to interactively read the value.
 
 If the variable has a `custom-type' property, it must be a widget and the
-`:prompt-value' property of that widget will be used for reading the value.
-
-If optional COMMENT argument is non nil, also prompt for a comment and return
-it as the third element in the list."
+`:prompt-value' property of that widget will be used for reading the value."
   (let* ((var (read-variable prompt-var))
-	 (minibuffer-help-form '(describe-variable var))
-	 (val
+	 (minibuffer-help-form '(describe-variable var)))
+    (list var
 	  (let ((prop (get var 'variable-interactive))
 		(type (get var 'custom-type))
 		(prompt (format prompt-val var)))
@@ -653,36 +649,24 @@
 					    (symbol-value var))
 					(not (boundp var))))
 		  (t
-		   (eval-minibuffer prompt))))))
-    (if comment
-	(list var val
-	      (read-string "Comment: " (get var 'variable-comment)))
-      (list var val))
-    ))
+		   (eval-minibuffer prompt)))))))
 
 ;;;###autoload
-(defun customize-set-value (var val &optional comment)
+(defun customize-set-value (var val)
   "Set VARIABLE to VALUE.  VALUE is a Lisp object.
 
 If VARIABLE has a `variable-interactive' property, that is used as if
 it were the arg to `interactive' (which see) to interactively read the value.
 
 If VARIABLE has a `custom-type' property, it must be a widget and the
-`:prompt-value' property of that widget will be used for reading the value.
-
-If given a prefix (or a COMMENT argument), also prompt for a comment."
+`:prompt-value' property of that widget will be used for reading the value."
   (interactive (custom-prompt-variable "Set variable: "
-				       "Set %s to value: "
-				       current-prefix-arg))
-
-  (set var val)
-  (cond ((string= comment "")
-	 (put var 'variable-comment nil))
-	(comment
-	 (put var 'variable-comment comment))))
+				       "Set %s to value: "))
+
+  (set var val))
 
 ;;;###autoload
-(defun customize-set-variable (var val &optional comment)
+(defun customize-set-variable (var val)
   "Set the default for VARIABLE to VALUE.  VALUE is a Lisp object.
 
 If VARIABLE has a `custom-set' property, that is used for setting
@@ -695,24 +679,14 @@
 it were the arg to `interactive' (which see) to interactively read the value.
 
 If VARIABLE has a `custom-type' property, it must be a widget and the
-`:prompt-value' property of that widget will be used for reading the value.
-
-If given a prefix (or a COMMENT argument), also prompt for a comment."
+`:prompt-value' property of that widget will be used for reading the value. "
   (interactive (custom-prompt-variable "Set variable: "
-				       "Set customized value for %s to: "
-				       current-prefix-arg))
+				       "Set customized value for %s to: "))
   (funcall (or (get var 'custom-set) 'set-default) var val)
-  (put var 'customized-value (list (custom-quote val)))
-  (cond ((string= comment "")
-	 (put var 'variable-comment nil)
-	 (put var 'customized-variable-comment nil))
-	(comment
-	 (put var 'variable-comment comment)
-	 (put var 'customized-variable-comment comment))))
-
+  (put var 'customized-value (list (custom-quote val))))
 
 ;;;###autoload
-(defun customize-save-variable (var val &optional comment)
+(defun customize-save-variable (var val)
   "Set the default for VARIABLE to VALUE, and save it for future sessions.
 If VARIABLE has a `custom-set' property, that is used for setting
 VARIABLE, otherwise `set-default' is used.
@@ -724,21 +698,11 @@
 it were the arg to `interactive' (which see) to interactively read the value.
 
 If VARIABLE has a `custom-type' property, it must be a widget and the
-`:prompt-value' property of that widget will be used for reading the value.
-
-If given a prefix (or a COMMENT argument), also prompt for a comment."
+`:prompt-value' property of that widget will be used for reading the value. "
   (interactive (custom-prompt-variable "Set and ave variable: "
-				       "Set and save value for %s as: "
-				       current-prefix-arg))
+				       "Set and save value for %s as: "))
   (funcall (or (get var 'custom-set) 'set-default) var val)
   (put var 'saved-value (list (custom-quote val)))
-  (custom-push-theme 'theme-value var 'user 'set (list (custom-quote val)))
-  (cond ((string= comment "")
-	 (put var 'variable-comment nil)
-	 (put var 'saved-variable-comment nil))
-	(comment
-	 (put var 'variable-comment comment)
-	 (put var 'saved-variable-comment comment)))
   (custom-save-all))
 
 ;;;###autoload
@@ -878,12 +842,10 @@
   (interactive)
   (let ((found nil))
     (mapatoms (lambda (symbol)
-		(and (or (get symbol 'customized-face)
-			 (get symbol 'customized-face-comment))
+		(and (get symbol 'customized-face)
 		     (find-face symbol)
 		     (push (list symbol 'custom-face) found))
-		(and (or (get symbol 'customized-value)
-			 (get symbol 'customized-variable-comment))
+		(and (get symbol 'customized-value)
 		     (boundp symbol)
 		     (push (list symbol 'custom-variable) found))))
     (if (not found)
@@ -897,12 +859,10 @@
   (interactive)
   (let ((found nil))
     (mapatoms (lambda (symbol)
-		(and (or (get symbol 'saved-face)
-			 (get symbol 'saved-face-comment))
+		(and (get symbol 'saved-face)
 		     (find-face symbol)
 		     (push (list symbol 'custom-face) found))
-		(and (or (get symbol 'saved-value)
-			 (get symbol 'saved-variable-comment))
+		(and (get symbol 'saved-value)
 		     (boundp symbol)
 		     (push (list symbol 'custom-variable) found))))
     (if (not found )
@@ -1034,6 +994,7 @@
   (widget-insert "\nOperate on everything in this buffer:\n ")
   (widget-create 'push-button
 		 :tag "Set"
+		 :tag-glyph '("set-up" "set-down")
 		 :help-echo "\
 Make your editing in this buffer take effect for this session"
 		 :action (lambda (widget &optional event)
@@ -1041,6 +1002,7 @@
   (widget-insert " ")
   (widget-create 'push-button
 		 :tag "Save"
+		 :tag-glyph '("save-up" "save-down")
 		 :help-echo "\
 Make your editing in this buffer take effect for future Emacs sessions"
 		 :action (lambda (widget &optional event)
@@ -1076,6 +1038,7 @@
   (widget-insert "  ")
   (widget-create 'push-button
 		 :tag "Done"
+		 :tag-glyph '("done-up" "done-down")
 		 :help-echo "Remove the buffer"
 		 :action (lambda (widget &optional event)
 			   (Custom-buffer-done)))
@@ -1248,7 +1211,7 @@
 
 (defun custom-browse-insert-prefix (prefix)
   "Insert PREFIX.  On XEmacs convert it to line graphics."
-  ;; #### Unfinished.
+  ;; ### Unfinished.
   (if nil ; (string-match "XEmacs" emacs-version)
       (progn
 	(insert "*")
@@ -1742,77 +1705,6 @@
       (delete-region start (point)))
     found))
 
-;;; The `custom-comment' Widget.
-
-;; like the editable field
-(defface custom-comment-face '((((class grayscale color)
-				 (background light))
-				(:background "gray85"))
-			       (((class grayscale color)
-				 (background dark))
-				(:background "dim gray"))
-			       (t
-				(:italic t)))
-  "Face used for comments on variables or faces"
-  :group 'custom-faces)
-
-;; like font-lock-comment-face
-(defface custom-comment-tag-face
-  '((((class color) (background dark)) (:foreground "gray80"))
-    (((class color) (background light)) (:foreground "blue4"))
-    (((class grayscale) (background light))
-     (:foreground "DimGray" :bold t :italic t))
-    (((class grayscale) (background dark))
-     (:foreground "LightGray" :bold t :italic t))
-    (t (:bold t)))
-  "Face used for variables or faces comment tags"
-  :group 'custom-faces)
-
-(define-widget 'custom-comment 'string
-  "User comment"
-  :tag "Comment"
-  :help-echo "Edit a comment here"
-  :sample-face 'custom-comment-tag-face
-  :value-face 'custom-comment-face
-  :value-set 'custom-comment-value-set
-  :create 'custom-comment-create
-  :delete 'custom-comment-delete)
-
-(defun custom-comment-create (widget)
-  (let (ext)
-    (widget-default-create widget)
-    (widget-put widget :comment-extent
-		(setq ext (make-extent (widget-get widget :from)
-				       (widget-get widget :to))))
-    (set-extent-property ext 'start-open t)
-    (when (equal (widget-get widget :value) "")
-      (set-extent-property ext 'invisible t))
-    ))
-
-(defun custom-comment-delete (widget)
-  (widget-default-delete widget)
-  (delete-extent (widget-get widget :comment-extent)))
-
-(defun custom-comment-value-set (widget value)
-  (widget-default-value-set widget value)
-  (if (equal value "")
-      (set-extent-property (widget-get widget :comment-extent)
-			   'invisible t)
-    (set-extent-property (widget-get widget :comment-extent)
-			 'invisible nil)))
-
-;; Those functions are for the menu. WIDGET is NOT the comment widget. It's
-;; the global custom one
-(defun custom-comment-show (widget)
-  (set-extent-property
-   (widget-get (widget-get widget :comment-widget) :comment-extent)
-   'invisible nil))
-
-(defun custom-comment-invisible-p (widget)
-  (extent-property
-   (widget-get (widget-get widget :comment-widget) :comment-extent)
-   'invisible))
-
 ;;; The `custom-variable' Widget.
 
 (defface custom-variable-tag-face '((((class color)
@@ -1978,40 +1870,23 @@
 		    :value value)
 		   children))))
     (unless (eq custom-buffer-style 'tree)
+      ;; Now update the state.
       (unless (eq (preceding-char) ?\n)
 	(widget-insert "\n"))
+      (if (eq state 'hidden)
+	  (widget-put widget :custom-state state)
+	(custom-variable-state-set widget))
       ;; Create the magic button.
       (let ((magic (widget-create-child-and-convert
 		    widget 'custom-magic nil)))
 	(widget-put widget :custom-magic magic)
 	(push magic buttons))
+      ;; Update properties.
+      (widget-put widget :custom-form form)
+      (widget-put widget :buttons buttons)
+      (widget-put widget :children children)
       ;; Insert documentation.
-      ;; #### NOTE: this is ugly!!!! I need to do update the :buttons property
-      ;; before the call to `widget-default-format-handler'. Otherwise, I
-      ;; loose my current `buttons'. This function shouldn't be called like
-      ;; this anyway. The doc string widget should be added like the others.
-      ;; --dv
-      (widget-put widget :buttons buttons)
       (widget-default-format-handler widget ?h)
-      ;; The comment field
-      (unless (eq state 'hidden)
-	(let* ((comment (get symbol 'variable-comment))
-	       (comment-widget
-		(widget-create-child-and-convert
-		 widget 'custom-comment
-		 :parent widget
-		 :value (or comment ""))))
-	  (widget-put widget :comment-widget comment-widget)
-	  ;; Don't push it !!! Custom assumes that the first child is the
-	  ;; value one.
-	  (setq children (append children (list comment-widget)))))
-      ;; Update the rest of the properties properties.
-      (widget-put widget :custom-form form)
-      (widget-put widget :children children)
-      ;; Now update the state.
-      (if (eq state 'hidden)
-	  (widget-put widget :custom-state state)
-	(custom-variable-state-set widget))
       ;; See also.
       (unless (eq state 'hidden)
 	(when (eq (widget-get widget :custom-level) 1)
@@ -2035,32 +1910,22 @@
 	 (value (if (default-boundp symbol)
 		    (funcall get symbol)
 		  (widget-get widget :value)))
-	 (comment (get symbol 'variable-comment))
 	 tmp
-	 temp
-	 (state (cond ((progn (setq tmp (get symbol 'customized-value))
-			      (setq temp
-				    (get symbol 'customized-variable-comment))
-			      (or tmp temp))
+	 (state (cond ((setq tmp (get symbol 'customized-value))
 		       (if (condition-case nil
-			       (and (equal value (eval (car tmp)))
-				    (equal comment temp))
+			       (equal value (eval (car tmp)))
 			     (error nil))
 			   'set
 			 'changed))
-		      ((progn (setq tmp (get symbol 'saved-value))
-			      (setq temp (get symbol 'saved-variable-comment))
-			      (or tmp temp))
+		      ((setq tmp (get symbol 'saved-value))
 		       (if (condition-case nil
-			       (and (equal value (eval (car tmp)))
-				    (equal comment temp))
+			       (equal value (eval (car tmp)))
 			     (error nil))
 			   'saved
 			 'changed))
 		      ((setq tmp (get symbol 'standard-value))
 		       (if (condition-case nil
-			       (and (equal value (eval (car tmp)))
-				    (equal comment nil))
+			       (equal value (eval (car tmp)))
 			     (error nil))
 			   'standard
 			 'changed))
@@ -2080,8 +1945,7 @@
 	    (memq (widget-get widget :custom-state) '(modified changed)))))
     ("Reset to Saved" custom-variable-reset-saved
      (lambda (widget)
-       (and (or (get (widget-value widget) 'saved-value)
-		(get (widget-value widget) 'saved-variable-comment))
+       (and (get (widget-value widget) 'saved-value)
 	    (memq (widget-get widget :custom-state)
 		  '(modified set changed rogue)))))
     ("Reset to Standard Settings" custom-variable-reset-standard
@@ -2090,8 +1954,6 @@
 	    (memq (widget-get widget :custom-state)
 		  '(modified set changed saved rogue)))))
     ("---" ignore ignore)
-    ("Add Comment" custom-comment-show custom-comment-invisible-p)
-    ("---" ignore ignore)
     ("Don't show as Lisp expression" custom-variable-edit
      (lambda (widget)
        (eq (widget-get widget :custom-form) 'lisp)))
@@ -2143,34 +2005,18 @@
 	 (child (car (widget-get widget :children)))
 	 (symbol (widget-value widget))
 	 (set (or (get symbol 'custom-set) 'set-default))
-	 (comment-widget (widget-get widget :comment-widget))
-	 (comment (widget-value comment-widget))
-	 val)
+	  val)
     (cond ((eq state 'hidden)
 	   (error "Cannot set hidden variable"))
 	  ((setq val (widget-apply child :validate))
 	   (goto-char (widget-get val :from))
 	   (error "%s" (widget-get val :error)))
 	  ((memq form '(lisp mismatch))
-	   (when (equal comment "")
-	     (setq comment nil)
-	     ;; Make the comment invisible by hand if it's empty
-	     (set-extent-property (widget-get comment-widget :comment-extent)
-				  'invisible t))
 	   (funcall set symbol (eval (setq val (widget-value child))))
-	   (put symbol 'customized-value (list val))
-	   (put symbol 'variable-comment comment)
-	   (put symbol 'customized-variable-comment comment))
+	   (put symbol 'customized-value (list val)))
 	  (t
-	   (when (equal comment "")
-	     (setq comment nil)
-	     ;; Make the comment invisible by hand if it's empty
-	     (set-extent-property (widget-get comment-widget :comment-extent)
-				  'invisible t))
 	   (funcall set symbol (setq val (widget-value child)))
-	   (put symbol 'customized-value (list (custom-quote val)))
-	   (put symbol 'variable-comment comment)
-	   (put symbol 'customized-variable-comment comment)))
+	   (put symbol 'customized-value (list (custom-quote val)))))
     (custom-variable-state-set widget)
     (custom-redraw-magic widget)))
 
@@ -2181,8 +2027,6 @@
 	 (child (car (widget-get widget :children)))
 	 (symbol (widget-value widget))
 	 (set (or (get symbol 'custom-set) 'set-default))
-	 (comment-widget (widget-get widget :comment-widget))
-	 (comment (widget-value comment-widget))
 	 val)
     (cond ((eq state 'hidden)
 	   (error "Cannot set hidden variable"))
@@ -2190,34 +2034,14 @@
 	   (goto-char (widget-get val :from))
 	   (error "%s" (widget-get val :error)))
 	  ((memq form '(lisp mismatch))
-	   (when (equal comment "")
-	     (setq comment nil)
-	     ;; Make the comment invisible by hand if it's empty
-	     (set-extent-property (widget-get comment-widget :comment-extent)
-				  'invisible t))
 	   (put symbol 'saved-value (list (widget-value child)))
-	   (custom-push-theme 'theme-value symbol 'user
-			      'set (list (widget-value child)))
-	   (funcall set symbol (eval (widget-value child)))
-	   (put symbol 'variable-comment comment)
-	   (put symbol 'saved-variable-comment comment))
+	   (funcall set symbol (eval (widget-value child))))
 	  (t
-	   (when (equal comment "")
-	     (setq comment nil)
-	     ;; Make the comment invisible by hand if it's empty
-	     (set-extent-property (widget-get comment-widget :comment-extent)
-				  'invisible t))
 	   (put symbol
 		'saved-value (list (custom-quote (widget-value
 						  child))))
-	   (custom-push-theme 'theme-value symbol 'user
-			      'set (list (custom-quote (widget-value
-						  child))))
-	   (funcall set symbol (widget-value child))
-	   (put symbol 'variable-comment comment)
-	   (put symbol 'saved-variable-comment comment)))
+	   (funcall set symbol (widget-value child))))
     (put symbol 'customized-value nil)
-    (put symbol 'customized-variable-comment nil)
     (custom-save-all)
     (custom-variable-state-set widget)
     (custom-redraw-magic widget)))
@@ -2225,20 +2049,14 @@
 (defun custom-variable-reset-saved (widget)
   "Restore the saved value for the variable being edited by WIDGET."
   (let* ((symbol (widget-value widget))
-	 (set (or (get symbol 'custom-set) 'set-default))
-	 (value (get symbol 'saved-value))
-	 (comment (get symbol 'saved-variable-comment)))
-    (cond ((or value comment)
-	   (put symbol 'variable-comment comment)
-	   (condition-case nil
-	       (funcall set symbol (eval (car value)))
-	     (error nil)))
-	  (t
-	   (signal 'error (list "No saved value for variable" symbol))))
+	 (set (or (get symbol 'custom-set) 'set-default)))
+    (if (get symbol 'saved-value)
+	(condition-case nil
+	    (funcall set symbol (eval (car (get symbol 'saved-value))))
+	  (error nil))
+      (signal 'error (list "No saved value for variable" symbol)))
     (put symbol 'customized-value nil)
-    (put symbol 'customized-variable-comment nil)
     (widget-put widget :custom-state 'unknown)
-    ;; This call will possibly make the comment invisible
     (custom-redraw widget)))
 
 (defun custom-variable-reset-standard (widget)
@@ -2248,20 +2066,11 @@
     (if (get symbol 'standard-value)
 	(funcall set symbol (eval (car (get symbol 'standard-value))))
       (signal 'error (list "No standard setting known for variable" symbol)))
-    (put symbol 'variable-comment nil)
     (put symbol 'customized-value nil)
-    (put symbol 'customized-variable-comment nil)
-    (when (or (get symbol 'saved-value) (get symbol 'saved-variable-comment))
+    (when (get symbol 'saved-value)
       (put symbol 'saved-value nil)
-      (custom-push-theme 'theme-value symbol 'user 'reset 'standard)
-      ;; As a special optimizations we do not (explictly)
-      ;; save resets to standard when no theme set the value.
-      (if (null (cdr (get symbol 'theme-value)))
-	  (put symbol 'theme-value nil))
-      (put symbol 'saved-variable-comment nil)
       (custom-save-all))
     (widget-put widget :custom-state 'unknown)
-    ;; This call will possibly make the comment invisible
     (custom-redraw widget)))
 
 ;;; The `custom-face-edit' Widget.
@@ -2271,7 +2080,7 @@
   :format "%t: %v"
   :tag "Attributes"
   :extra-offset 12
-  :button-args '(:help-echo "Control whether this attribute has any effect")
+  :button-args '(:help-echo "Control whether this attribute have any effect")
   :args (mapcar (lambda (att)
 		  (list 'group
 			:inline t
@@ -2307,33 +2116,19 @@
 					   pm)
 				    (const :format "MSWindows "
 					   :sibling-args (:help-echo "\
-Microsoft Windows, displays")
+Windows NT/95/97")
 					   mswindows)
-				    (const :format "MSPrinter "
+				    (const :format "DOS "
 					   :sibling-args (:help-echo "\
-Microsoft Windows, printers")
-					   msprinter)
+Plain MS-DOS")
+					   pc)
 				    (const :format "TTY%n"
 					   :sibling-args (:help-echo "\
 Plain text terminals")
 					   tty)))
 		  (group :sibling-args (:help-echo "\
-Only match display or printer devices")
-			 (const :format "Output: "
-				class)
-			 (checklist :inline t
-				    :offset 0
-				    (const :format "Display "
-					   :sibling-args (:help-echo "\
-Match display devices")
-					   display)
-				    (const :format "Printer%n"
-					   :sibling-args (:help-echo "\
-Match printer devices")
-					   printer)))
-		  (group :sibling-args (:help-echo "\
 Only match the frames with the specified color support")
-			 (const :format "Color support: "
+			 (const :format "Class: "
 				class)
 			 (checklist :inline t
 				    :offset 0
@@ -2430,7 +2225,6 @@
 (defun custom-face-value-create (widget)
   "Create a list of the display specifications for WIDGET."
   (let ((buttons (widget-get widget :buttons))
-	children
 	(symbol (widget-get widget :value))
 	(tag (widget-get widget :tag))
 	(state (widget-get widget :custom-state))
@@ -2480,16 +2274,6 @@
 	   (widget-put widget :buttons buttons)
 	   ;; Insert documentation.
 	   (widget-default-format-handler widget ?h)
-	   ;; The comment field
-	   (unless (eq state 'hidden)
-	     (let* ((comment (get symbol 'face-comment))
-		    (comment-widget
-		     (widget-create-child-and-convert
-		      widget 'custom-comment
-		      :parent widget
-		      :value (or comment ""))))
-	       (widget-put widget :comment-widget comment-widget)
-	       (push comment-widget children)))
 	   ;; See also.
 	   (unless (eq state 'hidden)
 	     (when (eq (widget-get widget :custom-level) 1)
@@ -2504,7 +2288,12 @@
 	     (unless (widget-get widget :custom-form)
 		 (widget-put widget :custom-form custom-face-default-form))
 	     (let* ((symbol (widget-value widget))
-		    (spec (custom-face-get-spec symbol))
+		    (spec (or (get symbol 'customized-face)
+			      (get symbol 'saved-face)
+			      (get symbol 'face-defface-spec)
+			      ;; Attempt to construct it.
+			      (list (list t (face-custom-attributes-get
+					     symbol (selected-frame))))))
 		    (form (widget-get widget :custom-form))
 		    (indent (widget-get widget :indent))
 		    (edit (widget-create-child-and-convert
@@ -2523,8 +2312,7 @@
 				  'sexp))
 			   :value spec)))
 	       (custom-face-state-set widget)
-	       (push edit children)
-	       (widget-put widget :children children))
+	       (widget-put widget :children (list edit)))
 	     (message "Creating face editor...done"))))))
 
 (defvar custom-face-menu
@@ -2532,14 +2320,11 @@
     ("Save for Future Sessions" custom-face-save)
     ("Reset to Saved" custom-face-reset-saved
      (lambda (widget)
-       (or (get (widget-value widget) 'saved-face)
-	   (get (widget-value widget) 'saved-face-comment))))
+       (get (widget-value widget) 'saved-face)))
     ("Reset to Standard Setting" custom-face-reset-standard
      (lambda (widget)
        (get (widget-value widget) 'face-defface-spec)))
     ("---" ignore ignore)
-    ("Add Comment" custom-comment-show custom-comment-invisible-p)
-    ("---" ignore ignore)
     ("Show all display specs" custom-face-edit-all
      (lambda (widget)
        (not (eq (widget-get widget :custom-form) 'all))))
@@ -2576,30 +2361,15 @@
 
 (defun custom-face-state-set (widget)
   "Set the state of WIDGET."
-  (let* ((symbol (widget-value widget))
-	 (comment (get symbol 'face-comment))
-	 tmp temp)
-    (widget-put widget :custom-state
-		(cond ((progn
-			 (setq tmp (get symbol 'customized-face))
-			 (setq temp (get symbol 'customized-face-comment))
-			 (or tmp temp))
-		       (if (equal temp comment)
-			   'set
-			 'changed))
-		      ((progn
-			 (setq tmp (get symbol 'saved-face))
-			 (setq temp (get symbol 'saved-face-comment))
-			 (or tmp temp))
-		       (if (equal temp comment)
-			   'saved
-			 'changed))
-		      ((get symbol 'face-defface-spec)
-		       (if (equal comment nil)
-			   'standard
-			 'changed))
-		      (t
-		       'rogue)))))
+  (let ((symbol (widget-value widget)))
+    (widget-put widget :custom-state (cond ((get symbol 'customized-face)
+					    'set)
+					   ((get symbol 'saved-face)
+					    'saved)
+					   ((get symbol 'face-defface-spec)
+					    'standard)
+					   (t
+					    'rogue)))))
 
 (defun custom-face-action (widget &optional event)
   "Show the menu for `custom-face' WIDGET.
@@ -2620,18 +2390,9 @@
   "Make the face attributes in WIDGET take effect."
   (let* ((symbol (widget-value widget))
 	 (child (car (widget-get widget :children)))
-	 (value (widget-value child))
-	 (comment-widget (widget-get widget :comment-widget))
-	 (comment (widget-value comment-widget)))
-    (when (equal comment "")
-      (setq comment nil)
-      ;; Make the comment invisible by hand if it's empty
-      (set-extent-property (widget-get comment-widget :comment-extent)
-			   'invisible t))
+	 (value (widget-value child)))
     (put symbol 'customized-face value)
-    (face-spec-set symbol value nil '(custom))
-    (put symbol 'customized-face-comment comment)
-    (put symbol 'face-comment comment)
+    (face-spec-set symbol value)
     (custom-face-state-set widget)
     (custom-redraw-magic widget)))
 
@@ -2639,21 +2400,10 @@
   "Make the face attributes in WIDGET default."
   (let* ((symbol (widget-value widget))
 	 (child (car (widget-get widget :children)))
-	 (value (widget-value child))
-	 (comment-widget (widget-get widget :comment-widget))
-	 (comment (widget-value comment-widget)))
-    (when (equal comment "")
-      (setq comment nil)
-      ;; Make the comment invisible by hand if it's empty
-      (set-extent-property (widget-get comment-widget :comment-extent)
-			   'invisible t))
-    (face-spec-set symbol value nil '(custom))
+	 (value (widget-value child)))
+    (face-spec-set symbol value)
     (put symbol 'saved-face value)
-    (custom-push-theme 'theme-face symbol 'user 'set value)
     (put symbol 'customized-face nil)
-    (put symbol 'face-comment comment)
-    (put symbol 'customized-face-comment nil)
-    (put symbol 'saved-face-comment comment)
     (custom-save-all)
     (custom-face-state-set widget)
     (custom-redraw-magic widget)))
@@ -2662,18 +2412,12 @@
   "Restore WIDGET to the face's default attributes."
   (let* ((symbol (widget-value widget))
 	 (child (car (widget-get widget :children)))
-	 (value (get symbol 'saved-face))
-	 (comment (get symbol 'saved-face-comment))
-	 (comment-widget (widget-get widget :comment-widget)))
-    (unless (or value comment)
+	 (value (get symbol 'saved-face)))
+    (unless value
       (signal 'error (list "No saved value for this face" symbol)))
     (put symbol 'customized-face nil)
-    (put symbol 'customized-face-comment nil)
-    (face-spec-set symbol value nil '(custom))
-    (put symbol 'face-comment comment)
+    (face-spec-set symbol value)
     (widget-value-set child value)
-    ;; This call manages the comment visibility
-    (widget-value-set comment-widget (or comment ""))
     (custom-face-state-set widget)
     (custom-redraw-magic widget)))
 
@@ -2681,25 +2425,15 @@
   "Restore WIDGET to the face's standard settings."
   (let* ((symbol (widget-value widget))
 	 (child (car (widget-get widget :children)))
-	 (value (get symbol 'face-defface-spec))
-	 (comment-widget (widget-get widget :comment-widget)))
+	 (value (get symbol 'face-defface-spec)))
     (unless value
       (signal 'error (list "No standard setting for this face" symbol)))
     (put symbol 'customized-face nil)
-    (put symbol 'customized-face-comment nil)
-    (when (or (get symbol 'saved-face) (get symbol 'saved-face-comment))
+    (when (get symbol 'saved-face)
       (put symbol 'saved-face nil)
-      (custom-push-theme 'theme-face symbol 'user 'reset 'standard)
-      ;; Do not explictly save resets to standards without themes.
-      (if (null (cdr (get symbol 'theme-face)))
-	  (put symbol  'theme-face nil))
-      (put symbol 'saved-face-comment nil)
       (custom-save-all))
-    (face-spec-set symbol value nil '(custom))
-    (put symbol 'face-comment nil)
+    (face-spec-set symbol value)
     (widget-value-set child value)
-    ;; This call manages the comment visibility
-    (widget-value-set comment-widget "")
     (custom-face-state-set widget)
     (custom-redraw-magic widget)))
 
@@ -2769,7 +2503,7 @@
   :tag "Hook")
 
 (defun custom-hook-convert-widget (widget)
-  ;; Handle `:options'.
+  ;; Handle `:custom-options'.
   (let* ((options (widget-get widget :options))
 	 (other `(editable-list :inline t
 				:entry-format "%i %d%v"
@@ -3238,8 +2972,17 @@
       (widget-put widget :custom-state found)))
   (custom-magic-reset widget))
 
+;;; The `custom-save-all' Function.
+;;;###autoload
+(defcustom custom-file "~/.emacs"
+  "File used for storing customization information.
+If you change this from the default \"~/.emacs\" you need to
+explicitly load that file for the settings to take effect."
+  :type 'file
+  :group 'customize)
+
 (defun custom-save-delete (symbol)
-  "Delete the call to SYMBOL form in `custom-file'.
+  "Delete the call to SYMBOL form `custom-file'.
 Leave point at the location of the call, or after the last expression."
   (let ((find-file-hooks nil)
 	(auto-mode-alist nil))
@@ -3259,152 +3002,87 @@
 	  (throw 'found nil))))))
 
 (defun custom-save-variables ()
-   "Save all customized variables in `custom-file'."
-   (save-excursion
-     (custom-save-delete 'custom-load-themes)
-     (custom-save-delete 'custom-reset-variables)
-     (custom-save-delete 'custom-set-variables)
-     (custom-save-loaded-themes)
-     (custom-save-resets 'theme-value 'custom-reset-variables nil)
-     (let ((standard-output (current-buffer)))
-       (unless (bolp)
- 	(princ "\n"))
-       (princ "(custom-set-variables")
-       (mapatoms (lambda (symbol)		 
- 		  (let ((spec (car-safe (get symbol 'theme-value)))
- 			(requests (get symbol 'custom-requests))
- 			(now (not (or (get symbol 'standard-value)
- 				      (and (not (boundp symbol))
- 					   (not (eq (get symbol 'force-value)
-						    'rogue))))))
-			(comment (get symbol 'saved-variable-comment)))
- 		    (when (or (and spec (eq (car spec) 'user)
- 			       (eq (second spec) 'set)) comment)
- 		      (princ "\n '(")
- 		      (prin1 symbol)
- 		      (princ " ")
-		      ;; This comment stuff is in the way ####
-		      ;; Is (eq (third spec) (car saved-value)) ????
- 		      ;; (prin1 (third spec))
-		      (prin1 (car (get symbol 'saved-value)))
-		      (when (or now requests comment)
-			(princ (if now " t" " nil")))
-		      (when (or comment requests)
-			(princ " ")
-			(prin1 requests))
-		      (when comment
-			(princ " ")
-			(prin1 comment))
-		      (princ ")")))))
+  "Save all customized variables in `custom-file'."
+  (save-excursion
+    (custom-save-delete 'custom-set-variables)
+    (let ((standard-output (current-buffer)))
+      (unless (bolp)
+	(princ "\n"))
+      (princ "(custom-set-variables")
+      (mapatoms (lambda (symbol)
+		  (let ((value (get symbol 'saved-value))
+			(requests (get symbol 'custom-requests))
+			(now (not (or (get symbol 'standard-value)
+				      (and (not (boundp symbol))
+					   (not (get symbol 'force-value)))))))
+		    (when value
+		      (princ "\n '(")
+		      (prin1 symbol)
+		      (princ " ")
+		      (prin1 (car value))
+		      (cond (requests
+			     (if now
+				 (princ " t ")
+			       (princ " nil "))
+			     (prin1 requests)
+			     (princ ")"))
+			    (now
+			     (princ " t)"))
+			    (t
+			     (princ ")")))))))
       (princ ")")
       (unless (looking-at "\n")
 	(princ "\n")))))
 
-(defvar custom-save-face-ignoring nil)
-
-(defun custom-save-face-internal (symbol)
-  (let ((theme-spec (car-safe (get symbol 'theme-face)))
-	(comment (get symbol 'saved-face-comment))
-	(now (not (or (get symbol 'face-defface-spec)
-	      (and (not (find-face symbol))
-		   (not (eq (get symbol 'force-face) 'rogue)))))))
-    (when (or (and (not (memq symbol custom-save-face-ignoring))
-	       ;; Don't print default face here.
-	       theme-spec
-	       (eq (car theme-spec) 'user)
-	       (eq (second theme-spec) 'set)) comment)
-      (princ "\n '(")
-      (prin1 symbol)
-      (princ " ")
-      (prin1 (get symbol 'saved-face))
-      (if (or comment now)
-	  (princ (if now " t" " nil")))
-      (when comment
-	  (princ " ")
-	  (prin1 comment))
-      (princ ")"))))
-
 (defun custom-save-faces ()
   "Save all customized faces in `custom-file'."
   (save-excursion
-    (custom-save-delete 'custom-reset-faces)
     (custom-save-delete 'custom-set-faces)
-    (custom-save-resets 'theme-face 'custom-reset-faces '(default))
     (let ((standard-output (current-buffer)))
       (unless (bolp)
 	(princ "\n"))
       (princ "(custom-set-faces")
+      (let ((value (get 'default 'saved-face)))
 	;; The default face must be first, since it affects the others.
-      (custom-save-face-internal 'default)
-      (let ((custom-save-face-ignoring '(default)))
-	(mapatoms #'custom-save-face-internal))
+	(when value
+	  (princ "\n '(default ")
+	  (prin1 value)
+	  (if (or (get 'default 'face-defface-spec)
+		  (and (not (find-face 'default))
+		       (not (get 'default 'force-face))))
+	      (princ ")")
+	    (princ " t)"))))
+      (mapatoms (lambda (symbol)
+		  (let ((value (get symbol 'saved-face)))
+		    (when (and (not (eq symbol 'default))
+			       ;; Don't print default face here.
+			       value)
+		      (princ "\n '(")
+		      (prin1 symbol)
+		      (princ " ")
+		      (prin1 value)
+		      (if (or (get symbol 'face-defface-spec)
+			      (and (not (find-face symbol))
+				   (not (get symbol 'force-face))))
+			  (princ ")")
+			(princ " t)"))))))
       (princ ")")
       (unless (looking-at "\n")
 	(princ "\n")))))
 
-(defun custom-save-resets (property setter special)
-  (let (started-writing ignored-special)
-    ;; (custom-save-delete setter) Done by caller 
-    (let ((standard-output (current-buffer))
-	  (mapper `(lambda (object)
-		    (let ((spec (car-safe (get object (quote ,property)))))
-		      (when (and (not (memq object ignored-special))
-				 (eq (car spec) 'user)
-				 (eq (second spec) 'reset))
-			;; Do not write reset statements unless necessary.
-			(unless started-writing
-			  (setq started-writing t)
-			  (unless (bolp)
-			    (princ "\n"))
-			(princ "(")
-			(princ (quote ,setter))
-			(princ "\n '(")
-			(prin1 object)
-			(princ " ")
-			(prin1 (third spec))
-			(princ ")")))))))
-      (mapc mapper special)
-      (setq ignored-special special)
-      (mapatoms mapper)
-      (when started-writing
-	(princ ")\n")))))
-			
-
-(defun custom-save-loaded-themes ()
-  (let ((themes (reverse (get 'user 'theme-loads-themes)))
-	(standard-output (current-buffer)))
-    (when themes
-      (unless (bolp) (princ "\n"))
-      (princ "(custom-load-themes")
-      (mapc (lambda (theme)
-	      (princ "\n   '")
-	      (prin1 theme)) themes)
-      (princ " )\n"))))	 
-
 ;;;###autoload
 (defun customize-save-customized ()
   "Save all user options which have been set in this session."
   (interactive)
   (mapatoms (lambda (symbol)
 	      (let ((face (get symbol 'customized-face))
-		    (value (get symbol 'customized-value))
-		    (face-comment (get symbol 'customized-face-comment))
-		    (variable-comment
-		     (get symbol 'customized-variable-comment)))
+		    (value (get symbol 'customized-value)))
 		(when face
 		  (put symbol 'saved-face face)
-		  (custom-push-theme 'theme-face symbol 'user 'set value)
 		  (put symbol 'customized-face nil))
 		(when value
 		  (put symbol 'saved-value value)
-		  (custom-push-theme 'theme-value symbol 'user 'set value)
-		  (put symbol 'customized-value nil))
-		(when variable-comment
-		  (put symbol 'saved-variable-comment variable-comment)
-		  (put symbol 'customized-variable-comment nil))
-		(when face-comment
-		  (put symbol 'saved-face-comment face-comment)
-		  (put symbol 'customized-face-comment nil)))))
+		  (put symbol 'customized-value nil)))))
   ;; We really should update all custom buffers here.
   (custom-save-all))
 
@@ -3584,19 +3262,6 @@
   (run-hooks 'custom-mode-hook))
 
 
-;;;###autoload
-(defun custom-migrate-custom-file (new-custom-file-name)
-  "Migrate custom file from home directory."
-  (mapc 'custom-save-delete
-	'(custom-load-themes custom-reset-variables
-			     custom-set-variables
-			     custom-set-faces
-			     custom-reset-faces))
-  (with-current-buffer (find-file-noselect custom-file)
-    (save-buffer))
-  (setq custom-file new-custom-file-name)
-  (custom-save-all))
-
 ;;; The End.
 
 (provide 'cus-edit)