(let* ((form (widget-get widget :custom-form))
(symbol (widget-get widget :value))
(get (or (get symbol 'custom-get) 'default-value))
- (value (if (default-boundp symbol)
- (condition-case nil
- (funcall get symbol)
- (error (throw 'get-error t)))
- (symbol-value symbol)))
+ (value-widget (car (widget-get widget :children)))
+ ;; Round-trip the value, for the sake of widgets that accept
+ ;; values of different types (e.g., the obsolete key-sequence widget
+ ;; which takes either strings or vectors. (Bug#76156)
+ (value
+ (widget-apply value-widget :value-to-external
+ (widget-apply value-widget :value-to-internal
+ (if (default-boundp symbol)
+ (condition-case nil
+ (funcall get symbol)
+ (error (throw 'get-error t)))
+ (symbol-value symbol)))))
(orig-value (widget-value (car (widget-get widget :children)))))
(not (equal (if (memq form '(lisp mismatch))
;; Mimic `custom-variable-value-create'.
;; No empty key/value pairs should show up.
(should-not (search-forward "key" nil t)))
+(defcustom cus-edit-test-bug76156 "\C-c "
+ "Key-sequence option that might show up as EDITED even though it's not."
+ :type 'key-sequence)
+
+(defcustom cus-edit-test-bug76156-2 [(control ?z)]
+ "Key-sequence option that might show up as EDITED even though it's not."
+ :type 'key-sequence)
+
+(ert-deftest cus-edit-test-unedited-option ()
+ "Test that customizing unedited options doesn't show up as EDITED."
+ (dolist (option '(cus-edit-test-bug76156
+ cus-edit-test-bug76156-2
+ cus-edit-test-foo1))
+ (customize-option option)
+ (let ((widget (car custom-options)))
+ (should (eq (widget-get widget :custom-state) 'standard)))
+ (kill-buffer)))
+
(provide 'cus-edit-tests)
;;; cus-edit-tests.el ends here