unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Dario Gjorgjevski <dario.gjorgjevski@gmail.com>
To: 44852@debbugs.gnu.org
Subject: bug#44852: [PATCH] Fix modification check when custom-form is 'lisp
Date: Tue, 24 Nov 2020 19:51:38 +0100	[thread overview]
Message-ID: <fv2zojblfmio5h.fsf@gmail.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 658 bytes --]

When a variable’s custom-form is 'lisp (or 'mismatch),
`custom-variable-value-create' will quote its value prior to storing it
inside the widget.  Afterwards, `custom-variable-modified-p' will try to
compare this quoted form to the (unquoted) value and think that the
variable has been modified.

To reproduce, fire up emacs -Q and do:

  1. (setq custom-variable-default-form 'lisp)
  2. M-x customize-variable RET auto-save-file-name-transforms RET

You will notice that Customize thinks that the variable has been
modified even though that is not true.  If step 1. is omitted,
everything is fine.

The patch attached below fixes that.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Fix modification check when custom-form is 'lisp --]
[-- Type: text/x-diff, Size: 1749 bytes --]

From 1e2b5ce115d67d350e27d7d3bd33ef5131cc59fa Mon Sep 17 00:00:00 2001
From: Dario Gjorgjevski <dario.gjorgjevski@gmail.com>
Date: Tue, 24 Nov 2020 17:34:08 +0100
Subject: [PATCH] Fix modification check when custom-form is 'lisp

* 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'.
---
 lisp/cus-edit.el | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index eceba8fa4d..27c0147f58 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -2900,14 +2900,19 @@ custom-variable-modified-p
 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))
+                      (custom-quote value) ; Mimic `custom-variable-value-create'.
+                    value)
+                  orig-value)))))
 
 (defun custom-variable-state-set (widget &optional state)
   "Set the state of WIDGET to STATE.
-- 
2.28.0


[-- Attachment #3: Type: text/plain, Size: 149 bytes --]


Best regards,
Dario

-- 
$ keyserver=hkps://hkps.pool.sks-keyservers.net
$ keyid=744A4F0B4F1C9371
$ gpg --keyserver $keyserver --search-keys $keyid

             reply	other threads:[~2020-11-24 18:51 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-24 18:51 Dario Gjorgjevski [this message]
2020-11-26 10:59 ` bug#44852: [PATCH] Fix modification check when custom-form is 'lisp Lars Ingebrigtsen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=fv2zojblfmio5h.fsf@gmail.com \
    --to=dario.gjorgjevski@gmail.com \
    --cc=44852@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).