Subject: Re: bug#69457: unable to place two menu-choice widgets on same line

From: Mauro Aranda <[email-masked]>
Date: Wed, 28 Feb 2024 21:17:23 -0300

On 28/2/24 10:26, [email-masked] wrote:
> hi emacs,
> 
> not sure if this is a bug or not, i'm a widget novice, but i'd like to 
> place two or more menu-choice widgets on the same line and am unable to. 
> some other widgets do not enforce a newline after them, as can be seen 
> from the example code in the emacs widgets manual.

> is it possible to have multiple menu-choice widgets on the one line? if 
> the current library doesn't allow it, would someone know how/where i 
> might patch it?

I think it should be possible.

> i also noticed that i cant place any annotation string following the 
> menu widgets displayed value (see the commented argument to the :format 
> function below, if included the binding appears after a newline). i did 
> some poking around and realized it is the one issue.
> 
> i'm not sure, but i suspect the issue is with the rendering of the item 
> widget (the children), not the menu-choice widget.

Yes, you need to control the :format for the choices to accomplish this, 
at least.

> some example code i have:
> 
> (defun lem-ui-return-item-widgets (list)
>    "Return a list of item widgets for each item, a string, in LIST."
>    (cl-loop for x in list
>             collect `(choice-item :value ,x)))

So, how about adding something like:
:format "%[%t%] "
here?

Did you try that?

> (defun lem-ui-widget-format (str &optional binding)
>    "Return a widget format string for STR, its name.
> BINDING is a string of a keybinding to cycle the widget's value."
>    (concat "%[" (propertize str
>                             'face 'lem-ui-widget-face
>                             'lem-tab-stop t)
>            "%]: %v"
>            binding))
> 
> ;; then within a buffer display function:
>   (widget-create 'menu-choice
>                       :tag "Listing"
>                       :value type
>                       :args (lem-ui-return-item-widgets lem-listing-types)
>                       :help-echo "Select a listing type"
>                       :format (lem-ui-widget-format "Listing") ; "C-c C-c")

What's the intention with the "C-c C-c"? Could it go at the end of the 
:format suggestion I gave above?