Subject: bug#38812: 28.0.50; Custom: Problem with reverting some session's customizations

From: Mauro Aranda <[email-masked]>
Date: Tue, 31 Dec 2019 11:22:27 -0300

tags 38812 patch
thanks

> This bug affects the customizations that happen before customizing
> custom-enabled-themes, that's why in the init file is necessary to have
one
> customization before and one after, to be able to compare the results.
> Since custom maintains the arguments to custom-set-variables in alphabetic
> order, all variables that would be sorted before custom-enabled-themes
> are affected by this bug.

When custom-enabled-themes is customized, its set function enable the
themes.  When that happens, custom recalculates the value of the
variables, according to the enabled themes, with
custom-theme-recalc-variable.  For variables that already have a
theme-value property (i.e., the variables that were customized with
custom-set-variables before customizing custom-enabled-themes),
custom-theme-recalc-variable ends up putting in the 'saved-value
property the same cons cell that is in the 'theme-value property.

Customizing in a session changes the 'theme-value property of the
customized variable, and the above has the effect of changing the
'saved-value property as well.

A possible fix is to make custom-variable-theme-value return a new list.
I attach a patch that does that.

Best regards,
Mauro.
From 9b62de6aada7c41ef23441e02d48b262082bee5c Mon Sep 17 00:00:00 2001
From: Mauro Aranda <[email-masked]>
Date: Mon, 30 Dec 2019 11:37:02 -0300
Subject: [PATCH] Preserve the 'saved-value property when doing session's
 customizations

* lisp/custom.el (custom-variable-theme-value): Return a new list with
the value of variable, so the values of the properties 'theme-value
and 'saved-value are not shared.  (Bug#38812)
---
 lisp/custom.el | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lisp/custom.el b/lisp/custom.el
index 26bdaae..e9bb0d3 100644
--- a/lisp/custom.el
+++ b/lisp/custom.el
@@ -1483,8 +1483,8 @@ custom-variable-theme-value
 
 This function returns nil if no custom theme specifies a value for VARIABLE."
   (let ((theme-value (get variable 'theme-value)))
-    (if theme-value
-	(cdr (car theme-value)))))
+    (if theme-value ; ((THEME VALUE))
+	(list (cadar theme-value)))))
 
 (defun custom-theme-recalc-variable (variable)
   "Set VARIABLE according to currently enabled custom themes."
-- 
2.7.4