unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#69457: unable to place two menu-choice widgets on same line
@ 2024-02-28 13:26 martyhiatt
  2024-02-28 23:50 ` Michael Heerdegen via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-02-29  0:17 ` Mauro Aranda
  0 siblings, 2 replies; 6+ messages in thread
From: martyhiatt @ 2024-02-28 13:26 UTC (permalink / raw)
  To: 69457

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

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

(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")
                      :notify (lem-ui-widget-notify-fun :sort))
(widget-create 'menu-choice
                      :tag "Sort"
                      :value sort
                      :args (lem-ui-return-item-widgets lem-sort-types)
                      :help-echo "Select a sort type"
                      :format (lem-ui-widget-format "Sort") ; "C-c C-s")
                      :notify (lem-ui-widget-notify-fun :listing-type))

(lem-widget-minor-mode)

the two widgets appear on separate lines.

also asked on online, to no avail: https://emacs.stackexchange.com/questions/80453/avoid-newlines-after-menu-choice-widget-and-or-after-v

regards,
marty





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

* bug#69457: unable to place two menu-choice widgets on same line
  2024-02-28 13:26 bug#69457: unable to place two menu-choice widgets on same line martyhiatt
@ 2024-02-28 23:50 ` Michael Heerdegen via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-02-29  0:11   ` Mauro Aranda
  2024-02-29  0:17 ` Mauro Aranda
  1 sibling, 1 reply; 6+ messages in thread
From: Michael Heerdegen via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-02-28 23:50 UTC (permalink / raw)
  To: martyhiatt; +Cc: Mauro Aranda, 69457

martyhiatt@riseup.net writes:

> is it possible to have multiple menu-choice widgets on the one line?

In my experience placing several widgets at the same line is indeed
sometimes not possible for one-lined widgets, even it should be possible
in theory.

> if the current library doesn't allow it, would someone know how/where
> i might patch it?

It might be that it is not trivial to change that because those widgets
rely on the final line break.  I remember that once I tried to work
around that, and other things broke.

Who was our expert for widgets - was that you, Mauro?


Thx,

Michael.





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

* bug#69457: unable to place two menu-choice widgets on same line
  2024-02-28 23:50 ` Michael Heerdegen via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-02-29  0:11   ` Mauro Aranda
  0 siblings, 0 replies; 6+ messages in thread
From: Mauro Aranda @ 2024-02-29  0:11 UTC (permalink / raw)
  To: Michael Heerdegen, martyhiatt; +Cc: 69457

On 28/2/24 20:50, Michael Heerdegen via Bug reports for GNU Emacs, the 
Swiss army knife of text editors wrote:
> martyhiatt@riseup.net writes:
> 
>> is it possible to have multiple menu-choice widgets on the one line?
> 
> In my experience placing several widgets at the same line is indeed
> sometimes not possible for one-lined widgets, even it should be possible
> in theory.
> 
>> if the current library doesn't allow it, would someone know how/where
>> i might patch it?
> 
> It might be that it is not trivial to change that because those widgets
> rely on the final line break.  I remember that once I tried to work
> around that, and other things broke.
> 
> Who was our expert for widgets - was that you, Mauro?
> 
> 
> Thx,
> 
> Michael.
> 

Thanks for CCing me Michael.  I'll take a look.






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

* bug#69457: unable to place two menu-choice widgets on same line
  2024-02-28 13:26 bug#69457: unable to place two menu-choice widgets on same line martyhiatt
  2024-02-28 23:50 ` Michael Heerdegen via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-02-29  0:17 ` Mauro Aranda
  2024-02-29 10:37   ` martyhiatt
  1 sibling, 1 reply; 6+ messages in thread
From: Mauro Aranda @ 2024-02-29  0:17 UTC (permalink / raw)
  To: martyhiatt, 69457

On 28/2/24 10:26, martyhiatt@riseup.net 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?





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

* bug#69457: unable to place two menu-choice widgets on same line
  2024-02-29  0:17 ` Mauro Aranda
@ 2024-02-29 10:37   ` martyhiatt
  2024-02-29 15:24     ` Mauro Aranda
  0 siblings, 1 reply; 6+ messages in thread
From: martyhiatt @ 2024-02-29 10:37 UTC (permalink / raw)
  To: Mauro Aranda, martyhiatt, 69457

hi mauro,

thanks a lot for your response.

On 2/29/24 01:17, Mauro Aranda wrote:
> 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?

thanks a lot, this works. i see now i had been shedding tears fighting with the menu-choice :format, not realizing i needed to wrangle the children elements instead. glad i asked the widget expert. %v also seems to work here, right?
> 
>> (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?

yes, with the above :format it should work.

thanks again for chiming in and helping me out!

marty






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

* bug#69457: unable to place two menu-choice widgets on same line
  2024-02-29 10:37   ` martyhiatt
@ 2024-02-29 15:24     ` Mauro Aranda
  0 siblings, 0 replies; 6+ messages in thread
From: Mauro Aranda @ 2024-02-29 15:24 UTC (permalink / raw)
  To: martyhiatt, 69457

tags 69457 notabug
close 69457
quit


martyhiatt@riseup.net writes:

 >> 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?
 >
 > thanks a lot, this works. i see now i had been shedding tears fighting
 > with the menu-choice :format, not realizing i needed to wrangle the
 > children elements instead. glad i asked the widget expert. %v also
 > seems to work here, right?

I'm glad it worked.  %v should work too, depends on what you need.

 >>> ;; 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?
 >
 > yes, with the above :format it should work.
 >
 > thanks again for chiming in and helping me out!

You're welcome.  It seems there's nothing more to do with this bug
report, so I'm marking it as notabug and closing it.

Feel free to reach me if you need further help.






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

end of thread, other threads:[~2024-02-29 15:24 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-28 13:26 bug#69457: unable to place two menu-choice widgets on same line martyhiatt
2024-02-28 23:50 ` Michael Heerdegen via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-02-29  0:11   ` Mauro Aranda
2024-02-29  0:17 ` Mauro Aranda
2024-02-29 10:37   ` martyhiatt
2024-02-29 15:24     ` Mauro Aranda

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