unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#43919: 27.1.50; Customize save may add (sort-fold-case t t)
@ 2020-10-11  5:54 Teemu Likonen
  2020-10-11 13:04 ` Mauro Aranda
  0 siblings, 1 reply; 3+ messages in thread
From: Teemu Likonen @ 2020-10-11  5:54 UTC (permalink / raw)
  To: 43919

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

This issue shows when initialization file has (custom-set-variables ...)
with sort-fold-case set, like this:

    (custom-set-variables
     '(sort-fold-case t))

Saving some other variable through the customize interface will add
additional "t" symbol to the sort-fold-case form:

    (custom-set-variables
     ;; Other variables...
     '(sort-fold-case t t))

Some other customize changes change the form back to (sort-fold-case t),
that is, with single "t" symbol.

Everything seems to be working but this behavior is harmful when Emacs
initialization files are in version control system (like Git) and
sort-fold-case variable keeps changing back and forth.

You can reproduce the bug with this recipe:

 1. Create ~/.emacs.el file with the following content (also attached
    file).

        (custom-set-variables
         '(sort-fold-case t))

 2. Start Emacs.

 3. Use customize interface to change and save some other variable, for
    example:

        M-x customize-variable RET show-trailing-whitespace RET

    Change variable's value to "t" and save it "for future sessions".

 4. Now the custom-set-variables form in ~/.emacs.el file looks like
    this:

        (custom-set-variables
         '(show-trailing-whitespace t)
         '(sort-fold-case t t))

    See the added "t" in sort-fold-case.


[-- Attachment #2: .emacs.el --]
[-- Type: application/emacs-lisp, Size: 519 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#43919: 27.1.50; Customize save may add (sort-fold-case t t)
  2020-10-11  5:54 bug#43919: 27.1.50; Customize save may add (sort-fold-case t t) Teemu Likonen
@ 2020-10-11 13:04 ` Mauro Aranda
  2020-10-13  1:32   ` Lars Ingebrigtsen
  0 siblings, 1 reply; 3+ messages in thread
From: Mauro Aranda @ 2020-10-11 13:04 UTC (permalink / raw)
  To: Teemu Likonen; +Cc: 43919


[-- Attachment #1.1: Type: text/plain, Size: 2297 bytes --]

Teemu Likonen <tlikonen@iki.fi> writes:

> This issue shows when initialization file has (custom-set-variables ...)
> with sort-fold-case set, like this:
>
>     (custom-set-variables
>      '(sort-fold-case t))
>
> Saving some other variable through the customize interface will add
> additional "t" symbol to the sort-fold-case form:
>
>     (custom-set-variables
>      ;; Other variables...
>      '(sort-fold-case t t))
>
> Some other customize changes change the form back to (sort-fold-case t),
> that is, with single "t" symbol.
>
> Everything seems to be working but this behavior is harmful when Emacs
> initialization files are in version control system (like Git) and
> sort-fold-case variable keeps changing back and forth.
>
> You can reproduce the bug with this recipe:
>
>  1. Create ~/.emacs.el file with the following content (also attached
>     file).
>
>         (custom-set-variables
>          '(sort-fold-case t))
>
>  2. Start Emacs.
>
>  3. Use customize interface to change and save some other variable, for
>     example:
>
>         M-x customize-variable RET show-trailing-whitespace RET
>
>     Change variable's value to "t" and save it "for future sessions".
>
>  4. Now the custom-set-variables form in ~/.emacs.el file looks like
>     this:
>
>         (custom-set-variables
>          '(show-trailing-whitespace t)
>          '(sort-fold-case t t))
>
>     See the added "t" in sort-fold-case.

The second t is the NOW member, as described in
custom-theme-set-variables.  That means something makes Custom think
that the customization should be installed right away.  So that would
not be a bug, if there were good reasons for it.

In the recipe, step 3, sort.el hasn't been loaded in the session, so
custom doesn't know yet that sort-fold-case is a custom option (i.e.,
(custom-variable-p sort-fold-case) ==> nil).  And since
custom-save-variables binds sort-fold-case to nil, the following yields
t: (boundp sort-fold-case), so Custom thinks it has to add the NOW
member to the list setting of sort-fold-case.  But the sort-fold-case
bindings seems unnecessary, since Custom doesn't use a single sort.el
function, it only uses `sort' to sort the list of options to save.

So, while the behavior observed is harmless, I propose to install the
attached patch.

[-- Attachment #1.2: Type: text/html, Size: 2841 bytes --]

[-- Attachment #2: 0001-Don-t-bind-sort-fold-case-when-saving-the-custom-fil.patch --]
[-- Type: text/x-patch, Size: 1571 bytes --]

From a152c5096caa23846af3822a465aec6025ba46c6 Mon Sep 17 00:00:00 2001
From: Mauro Aranda <maurooaranda@gmail.com>
Date: Sun, 11 Oct 2020 09:44:40 -0300
Subject: [PATCH] Don't bind sort-fold-case when saving the custom-file

* lisp/cus-edit.el (custom-save-variables, custom-save-faces): These
functions sort a list, not buffer text, so they don't need
to use sort-fold-case at all.  Remove the let-binding for
sort-fold-case.  (Bug#43919)
---
 lisp/cus-edit.el | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index 9c5d89f89f..3c93753495 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -4681,15 +4681,12 @@ custom-save-delete
 	    (setq pos (line-beginning-position))))
 	(goto-char pos)))))
 
-(defvar sort-fold-case) ; defined in sort.el
-
 (defun custom-save-variables ()
   "Save all customized variables in `custom-file'."
   (save-excursion
     (custom-save-delete 'custom-set-variables)
     (let ((standard-output (current-buffer))
-	  (saved-list (make-list 1 0))
-	  sort-fold-case)
+	  (saved-list (make-list 1 0)))
       ;; First create a sorted list of saved variables.
       (mapatoms
        (lambda (symbol)
@@ -4771,8 +4768,7 @@ custom-save-faces
     (custom-save-delete 'custom-reset-faces)
     (custom-save-delete 'custom-set-faces)
     (let ((standard-output (current-buffer))
-	  (saved-list (make-list 1 0))
-	  sort-fold-case)
+	  (saved-list (make-list 1 0)))
       ;; First create a sorted list of saved faces.
       (mapatoms
        (lambda (symbol)
-- 
2.28.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* bug#43919: 27.1.50; Customize save may add (sort-fold-case t t)
  2020-10-11 13:04 ` Mauro Aranda
@ 2020-10-13  1:32   ` Lars Ingebrigtsen
  0 siblings, 0 replies; 3+ messages in thread
From: Lars Ingebrigtsen @ 2020-10-13  1:32 UTC (permalink / raw)
  To: Mauro Aranda; +Cc: 43919, Teemu Likonen

Mauro Aranda <maurooaranda@gmail.com> writes:

> So, while the behavior observed is harmless, I propose to install the
> attached patch.

Thanks; applied to Emacs 28.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-10-13  1:32 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-11  5:54 bug#43919: 27.1.50; Customize save may add (sort-fold-case t t) Teemu Likonen
2020-10-11 13:04 ` Mauro Aranda
2020-10-13  1:32   ` Lars Ingebrigtsen

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).