Subject: Re: bug#64046: 30.0.50; Quoting in customize choice tags

From: Mauro Aranda <[email-masked]>
Date: Thu, 24 Aug 2023 18:58:52 -0300

Stephen Berman <[email-masked]> writes:

 > On Thu, 24 Aug 2023 17:14:53 -0300 Mauro Aranda 
<[email-masked]> wrote:
 >
 >> Stephen Berman <[email-masked]> writes:
 >>
 >>> Right after sending, I found an obvious problem: only one of the car or
 >>> the cdr might be a string.  The following patch accounts for this:
 >>>
 >>> diff --git a/lisp/wid-edit.el b/lisp/wid-edit.el
 >>> index a70598bb6c9..891e98b6de5 100644
 >>> --- a/lisp/wid-edit.el
 >>> +++ b/lisp/wid-edit.el
 >>> @@ -285,12 +285,18 @@ widget-choose
 >>>    ;; Apply quote substitution to customize choice menu item text,
 >>>    ;; whether it occurs in a widget buffer or in a popup menu.
 >>>    (let ((items (mapc (lambda (x)
 >>> -                       (when (consp x)
 >>> -                         (dotimes (i (1- (length x)))
 >>> -                           (when (stringp (nth i x))
 >>> -                             (setcar (nthcdr i x)
 >>> - (substitute-command-keys
 >>> -                                      (car (nthcdr i x))))))))
 >>> +                       (if (proper-list-p x)
 >>> +                           (dotimes (i (1- (length x)))
 >>> +                             (when (stringp (nth i x))
 >>> +                               (setcar (nthcdr i x)
 >>> + (substitute-command-keys
 >>> +                                        (car (nthcdr i x))))))
 >>> +                         ;; ITEMS has simple item definitions.
 >>> +                         (when (consp x)
 >>> +                           (when (stringp (car x))
 >>> +                             (setcar x (substitute-command-keys 
(car x))))
 >>> +                           (when (stringp (cdr x))
 >>> +                             (setcdr x (substitute-command-keys (cdr
 >>   x)))))))
 >>
 >> Thinking about it, why do we need to call substitute-command-keys on the
 >> VALUE part (i.e., the cdr of the cons cell), in case of simple item
 >> definitions?
 >>
 >> I re-read the bug report, but I didn't find any reference to why that is
 >> a need.  Did I miss something?
 >
 > Well, the VALUE is displayed on entering a choice.  That is, when I do
 >
 > M-: (widget-choose "Title" '(("Use `a'" . "Use `1'") ("Use `b'" . 
"Use `2'")))
 >
 > I see curve-quoting in the widget-choose buffer:
 >
 >    Available choices:
 >
 >    0 = Use ‘a’
 >    1 = Use ‘b’
 >
 >    C-g = Quit
 >
 > and when I enter e.g. `0' at the "Title: " prompt in the minibuffer, it
 > displays "Use ‘1’", i.e., with curve-quoting.  But if I omit the call to
 > substitute-command-keys on the cdr in widget-choose, then typing `0' at
 > the "Title: " prompt displays "Use `1'", i.e. with grave-quoting.  But I
 > don't know which one is the intended result.

I see, thank you.  Your last patch looks good to me, then.