3232from  prompt_toolkit .layout .margins  import  ScrollbarMargin , NumberedMargin 
3333from  prompt_toolkit .layout .processors  import  PasswordProcessor , ConditionalProcessor , BeforeInput , AppendAutoSuggestion 
3434from  prompt_toolkit .lexers  import  DynamicLexer 
35- from  prompt_toolkit .mouse_events  import  MouseEventType 
35+ from  prompt_toolkit .mouse_events  import  MouseEventType ,  MouseEvent 
3636from  prompt_toolkit .utils  import  get_cwidth 
3737from  prompt_toolkit .keys  import  Keys 
3838
@@ -615,7 +615,9 @@ def _(event):
615615 self .control  =  FormattedTextControl (
616616 self ._get_text_fragments ,
617617 key_bindings = kb ,
618-  focusable = True )
618+  focusable = True ,
619+ 
620+  )
619621
620622 self .window  =  Window (
621623 content = self .control ,
@@ -626,6 +628,12 @@ def _(event):
626628 dont_extend_height = True )
627629
628630 def  _get_text_fragments (self ):
631+ 
632+  def  mouse_handler (mouse_event : MouseEvent ):
633+  if  mouse_event .event_type  ==  MouseEventType .MOUSE_UP :
634+  self ._selected_index  =  mouse_event .position .y 
635+  self .current_value  =  self .values [self ._selected_index ][0 ]
636+ 
629637 result  =  []
630638 for  i , value  in  enumerate (self .values ):
631639 checked  =  (value [0 ] ==  self .current_value )
@@ -643,14 +651,14 @@ def _get_text_fragments(self):
643651 result .append (('[SetCursorPosition]' , '' ))
644652
645653 if  checked :
646-  result .append ((style , '*' ))
654+  result .append ((style , '*' ,  mouse_handler ))
647655 else :
648-  result .append ((style , ' ' ))
656+  result .append ((style , ' ' ,  mouse_handler ))
649657
650-  result .append ((style , ')' ))
651-  result .append (('class:radio' , ' ' ))
658+  result .append ((style , ')' ,  mouse_handler ))
659+  result .append (('class:radio' , ' ' ,  mouse_handler ))
652660 result .extend (to_formatted_text (value [1 ], style = 'class:radio' ))
653-  result .append (('' , '\n ' ))
661+  result .append (('' , '\n ' ,  mouse_handler ))
654662
655663 result .pop () # Remove last newline. 
656664 return  result 
0 commit comments