]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix modification check when custom-form is `lisp'
authorDario Gjorgjevski <dario.gjorgjevski@gmail.com>
Thu, 26 Nov 2020 10:59:23 +0000 (11:59 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Thu, 26 Nov 2020 19:09:28 +0000 (20:09 +0100)
* lisp/cus-edit.el (custom-variable-modified-p): Quote the value when
custom form is 'lisp (or 'mismatch) prior to comparing in order to
accommodate `custom-variable-value-create' (bug#44852).

lisp/cus-edit.el

index cb68bae3c9b87d80683cea7706bd8f787b983536..a00cb17e298bb096f24ddbadcf2abc241d711709 100644 (file)
@@ -2900,14 +2900,20 @@ Modified means that the widget that holds the value has been edited by the user
 in a customize buffer.
 To check for other states, call `custom-variable-state'."
   (catch 'get-error
-    (let* ((symbol (widget-get widget :value))
+    (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))))
-      (not (equal value (widget-value (car (widget-get widget :children))))))))
+                    (symbol-value symbol)))
+           (orig-value (widget-value (car (widget-get widget :children)))))
+      (not (equal (if (memq form '(lisp mismatch))
+                      ;; Mimic `custom-variable-value-create'.
+                      (custom-quote value)
+                    value)
+                  orig-value)))))
 
 (defun custom-variable-state-set (widget &optional state)
   "Set the state of WIDGET to STATE.