summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>2002-09-16 15:20:20 +0000
committerRichard M. Stallman <rms@gnu.org>2002-09-16 15:20:20 +0000
commitbde4f35405acfa091950acb5e9207f68b1486b31 (patch)
treeb1eebbe54bdbf4d58d5ec58473a13b0f30cfc4a5 /lisp
parent8f50b630a14e8ab15aa4e65d5c61b32e958a3607 (diff)
downloademacs-bde4f35405acfa091950acb5e9207f68b1486b31.tar.gz
emacs-bde4f35405acfa091950acb5e9207f68b1486b31.tar.bz2
emacs-bde4f35405acfa091950acb5e9207f68b1486b31.zip
(custom-variable-backup-value): New function.
(custom-variable-reset-backup): New function. (custom-variable-menu): Add item for custom-variable-reset-backup. (custom-variable-set, custom-variable-reset-saved) (custom-variable-reset-standard): Call custom-variable-backup-value.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/cus-edit.el54
1 files changed, 51 insertions, 3 deletions
diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index 9c8e6ce740b..99152e85dbf 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -2303,6 +2303,9 @@ Otherwise, look up symbol in `custom-guess-type-alist'."
(and (get (widget-value widget) 'standard-value)
(memq (widget-get widget :custom-state)
'(modified set changed saved rogue)))))
+ ("Use Backup Value" custom-variable-reset-backup
+ (lambda (widget)
+ (get (widget-value widget) 'backup-value)))
("---" ignore ignore)
("Add Comment" custom-comment-show custom-comment-invisible-p)
("---" ignore ignore)
@@ -2369,6 +2372,7 @@ Optional EVENT is the location for the menu."
(setq comment nil)
;; Make the comment invisible by hand if it's empty
(custom-comment-hide comment-widget))
+ (custom-variable-backup-value widget)
(funcall set symbol (eval (setq val (widget-value child))))
(put symbol 'customized-value (list val))
(put symbol 'variable-comment comment)
@@ -2378,6 +2382,7 @@ Optional EVENT is the location for the menu."
(setq comment nil)
;; Make the comment invisible by hand if it's empty
(custom-comment-hide comment-widget))
+ (custom-variable-backup-value widget)
(funcall set symbol (setq val (widget-value child)))
(put symbol 'customized-value (list (custom-quote val)))
(put symbol 'variable-comment comment)
@@ -2426,13 +2431,16 @@ Optional EVENT is the location for the menu."
(custom-redraw-magic widget)))
(defun custom-variable-reset-saved (widget)
- "Restore the saved value for the variable being edited by WIDGET."
+ "Restore the saved value for the variable being edited by WIDGET.
+The value that was current before this operation
+becomes the backup value, so you can get it again."
(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)
+ (custom-variable-backup-value widget)
(condition-case nil
(funcall set symbol (eval (car value)))
(error nil)))
@@ -2447,11 +2455,15 @@ Optional EVENT is the location for the menu."
(defun custom-variable-reset-standard (widget)
"Restore the standard setting for the variable being edited by WIDGET.
This operation eliminates any saved setting for the variable,
-restoring it to the state of a variable that has never been customized."
+restoring it to the state of a variable that has never been customized.
+The value that was current before this operation
+becomes the backup value, so you can get it again."
(let* ((symbol (widget-value widget))
(set (or (get symbol 'custom-set) 'set-default)))
(if (get symbol 'standard-value)
- (funcall set symbol (eval (car (get symbol 'standard-value))))
+ (progn
+ (custom-variable-backup-value widget)
+ (funcall set symbol (eval (car (get symbol 'standard-value)))))
(error "No standard setting known for %S" symbol))
(put symbol 'variable-comment nil)
(put symbol 'customized-value nil)
@@ -2464,6 +2476,42 @@ restoring it to the state of a variable that has never been customized."
;; This call will possibly make the comment invisible
(custom-redraw widget)))
+(defun custom-variable-backup-value (widget)
+ "Back up the current value for WIDGET's variable.
+The backup value is kept in the car of the `backup-value' property."
+ (let* ((symbol (widget-value widget))
+ (get (or (get symbol 'custom-get) 'default-value))
+ (type (custom-variable-type symbol))
+ (conv (widget-convert type))
+ (value (if (default-boundp symbol)
+ (funcall get symbol)
+ (widget-get conv :value))))
+ (put symbol 'backup-value (list value))))
+
+(defun custom-variable-reset-backup (widget)
+ "Restore the backup value for the variable being edited by WIDGET.
+The value that was current before this operation
+becomes the backup value, so you can use this operation repeatedly
+to switch between two values."
+ (let* ((symbol (widget-value widget))
+ (set (or (get symbol 'custom-set) 'set-default))
+ (value (get symbol 'backup-value))
+ (comment-widget (widget-get widget :comment-widget))
+ (comment (widget-value comment-widget)))
+ (if value
+ (progn
+ (custom-variable-backup-value widget)
+ (condition-case nil
+ (funcall set symbol (car value))
+ (error nil)))
+ (error "No backup value for %s" symbol))
+ (put symbol 'customized-value (list (car value)))
+ (put symbol 'variable-comment comment)
+ (put symbol 'customized-variable-comment comment)
+ (custom-variable-state-set widget)
+ ;; This call will possibly make the comment invisible
+ (custom-redraw widget)))
+
;;; The `custom-face-edit' Widget.
(define-widget 'custom-face-edit 'checklist