11use crossterm:: event:: KeyCode :: Char ;
22use crossterm:: event:: { Event , KeyModifiers } ;
3+ use itertools:: Itertools ;
34use ratatui:: buffer:: Buffer ;
4- use ratatui:: layout:: Rect ;
5- use ratatui:: prelude:: Widget ;
5+ use ratatui:: layout:: { Margin , Rect } ;
6+ use ratatui:: prelude:: { Style , Widget } ;
7+ use ratatui:: text:: Line ;
68use ratatui:: widgets:: { Block , Paragraph } ;
79use tui_input:: Input ;
810use tui_input:: backend:: crossterm:: EventHandler ;
@@ -21,14 +23,26 @@ impl Widget for &SearchWidget {
2123 where
2224 Self : Sized ,
2325 {
24- let par = Paragraph :: new ( self . input . value ( ) ) . block ( Block :: bordered ( ) . title ( format ! (
26+ let paragraph = Paragraph :: new ( self . input . value ( ) ) . block ( Block :: bordered ( ) . title ( format ! (
2527 " Search: {} / {} | {} {} " ,
2628 if self . total == 0 { 0 } else { self . current + 1 } ,
2729 self . total,
2830 if self . regex { "[.*]" } else { ".*" } ,
2931 if self . case_sensitive { "[Cc]" } else { "Cc" } ,
3032 ) ) ) ;
31- par. render ( area, buf) ;
33+
34+ paragraph. render ( area, buf) ;
35+
36+ let inner_area = area. inner ( Margin :: new ( 1 , 1 ) ) ;
37+
38+ let line = Line :: from ( self . input . value ( ) ) ;
39+ let graphemes = line. styled_graphemes ( Style :: default ( ) ) . collect_vec ( ) ;
40+
41+ let chunks = graphemes. chunks ( inner_area. width as usize ) ;
42+
43+ for ( i, c) in chunks. enumerate ( ) {
44+ crate :: rura_widget:: render_line ( c. to_vec ( ) , inner_area, buf, i as u16 )
45+ }
3246 }
3347}
3448
@@ -60,6 +74,15 @@ impl SearchWidget {
6074 }
6175 }
6276
77+ pub fn height ( & self , width : u16 ) -> u16 {
78+ ( self . input . value ( ) . len ( ) as u16 / width) + 1
79+ }
80+
81+ pub fn cursor ( & self , width : u16 ) -> ( u16 , u16 ) {
82+ let cursor = self . input . visual_cursor ( ) as u16 ;
83+ ( cursor % width, cursor / width)
84+ }
85+
6386 pub fn update_highlight_info ( & mut self , info : ( usize , usize ) ) {
6487 self . current = info. 0 ;
6588 self . total = info. 1 ;
0 commit comments