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

From: Eli Zaretskii <[email-masked]>
Date: Tue, 13 Jun 2023 18:56:36 +0300

> From: Stephen Berman <[email-masked]>
> Date: Tue, 13 Jun 2023 16:02:57 +0200
> 
> 0. emacs -Q
> 1. Evaluate the following defcustom:
>    (defcustom my-test "a"
>      "Test."
>      :type '(choice (string :tag "Use `a'" "a")
>    		    (string :tag "Use `b'" "b")))
> 2. M-x customize-option RET my-test RET
> 3. In the buffer *Customize Option: My Test* note that in the string
>    "Use ‘a’" following the "Value Menu" button the quote marks are in
>    the "curve" style (‘’).
> 4. Put point on the "Value Menu" button and type RET.
> 5. The buffer " widget-choose" contains these lines:
>    0 = Use ‘a’
>    1 = Use ‘b’
>    Note that the quote marks in this buffer are also in the "curve"
>    style.
> 6. With the mouse pointer over the "Value Menu" button press mouse-1,
>    popping up a menu titled "Choice" containing these items:
>    Use `a'
>    Use `b'
>    Note that the quote marks in this menu are in the "grave" style (`')
>    instead of the "curve" style.
> 
> The use of the "curve" style in the " widget-choose" buffer is due to
> commit bd3b426ebb7a60045839e97c9da9bfd249fab1f1, but that commit did not
> take popup menus into account.  The attached patch does so.  Since the
> status quo ante long predates emacs-29 and this is just a stylistic bug,
> I made the patch against master.
> 
> In this patch I chose to apply substitute-command-keys just once at the
> beginning of the function `widget-choose', rather than several times
> within the function, but I restricted its application to item tags, so
> other uses of the ITEMS argument should not be affected (and my brief
> testing hasn't found any problem with the patch).
> 
> The patch also takes the opportunity to replace two unnecessary uses of
> `let*' in `widget-choose', in one case by `let' and in the other by
> foregoing let-bound variables altogether and just using the values in
> place, since they occur only once each in the lines immediately
> following the eliminated `let*'.

Thanks.  I'm not familiar very well with widgets code, so I added
Mauro and Stefan to the discussion, in the hope that they will have
useful comments.