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
next 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
* 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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.