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

From: Ola x Nilsson <[email-masked]>
Date: Fri, 25 Aug 2023 10:02:35 +0200

On Thu, Aug 24 2023, Mauro Aranda wrote:

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

The cdr is the return value, I would expect widget-choose to not
modify that. 

-- 
Ola x Nilsson