1- use crossterm:: {
1+ use ratatui :: crossterm:: {
22 event:: { self , DisableMouseCapture , EnableMouseCapture , Event , KeyCode } ,
33 execute,
4- terminal:: { disable_raw_mode , enable_raw_mode , EnterAlternateScreen , LeaveAlternateScreen } ,
4+ terminal:: { EnterAlternateScreen , LeaveAlternateScreen , disable_raw_mode , enable_raw_mode } ,
55} ;
66use ratatui:: { prelude:: * , widgets:: * } ;
77
8- use std:: io:: { self , stdout , Stdout } ;
8+ use std:: io:: { self , Stdout , stdout } ;
99use std:: vec;
1010use tui_textarea:: { Input , Key } ;
1111
@@ -76,10 +76,7 @@ fn remove_selected(state: &mut ViewState) {
7676}
7777
7878fn find_selected ( state : & mut ViewState ) -> Option < Session > {
79- let mut selected_idx = match state. table_state . selected ( ) {
80- Some ( i) => i,
81- None => return None ,
82- } ;
79+ let mut selected_idx = state. table_state . selected ( ) ?;
8380
8481 for session_group in state. config . session_groups . iter ( ) {
8582 if selected_idx == 0 {
@@ -101,26 +98,26 @@ fn find_selected(state: &mut ViewState) -> Option<Session> {
10198}
10299
103100fn handle_normal_mode_events ( state : & mut ViewState , cfg_path : & str ) -> io:: Result < bool > {
104- if let Event :: Key ( key) = event:: read ( ) ? {
105- if key. kind == event:: KeyEventKind :: Press {
106- match key. code {
107- KeyCode :: Char ( 'q' ) | KeyCode :: Esc => {
108- // Quit
109- return Ok ( true ) ;
110- }
111- KeyCode :: Char ( 'a' ) => state. popup_state . show ( ) ,
112- KeyCode :: Char ( 'r' ) => {
113- remove_selected ( state) ;
114- state. config . save ( cfg_path) ;
115- }
116- KeyCode :: Char ( 'R' ) => {
117- state. config = load_cfg_from_file ( cfg_path) . unwrap_or ( Config :: new ( ) ) ;
118- }
119- KeyCode :: Enter => state. connected = true ,
120- KeyCode :: Down | KeyCode :: Char ( 'j' ) => state. next ( ) ,
121- KeyCode :: Up | KeyCode :: Char ( 'k' ) => state. previous ( ) ,
122- _ => { }
101+ if let Event :: Key ( key) = event:: read ( ) ?
102+ && key. kind == event:: KeyEventKind :: Press
103+ {
104+ match key. code {
105+ KeyCode :: Char ( 'q' ) | KeyCode :: Esc => {
106+ // Quit
107+ return Ok ( true ) ;
108+ }
109+ KeyCode :: Char ( 'a' ) => state. popup_state . show ( ) ,
110+ KeyCode :: Char ( 'r' ) => {
111+ remove_selected ( state) ;
112+ state. config . save ( cfg_path) ;
113+ }
114+ KeyCode :: Char ( 'R' ) => {
115+ state. config = load_cfg_from_file ( cfg_path) . unwrap_or ( Config :: new ( ) ) ;
123116 }
117+ KeyCode :: Enter => state. connected = true ,
118+ KeyCode :: Down | KeyCode :: Char ( 'j' ) => state. next ( ) ,
119+ KeyCode :: Up | KeyCode :: Char ( 'k' ) => state. previous ( ) ,
120+ _ => { }
124121 }
125122 }
126123
@@ -246,21 +243,24 @@ fn table_ui(state: &mut ViewState, frame: &mut Frame, area: &Rect) {
246243 )
247244 . header ( header)
248245 . block ( Block :: default ( ) . borders ( Borders :: ALL ) . title ( "Sessions" ) )
249- . highlight_style ( Style :: default ( ) . add_modifier ( Modifier :: REVERSED ) )
246+ . row_highlight_style ( Style :: default ( ) . add_modifier ( Modifier :: REVERSED ) )
250247 . highlight_symbol ( ">> " ) ;
251248
252249 frame. render_stateful_widget ( t, * area, & mut state. table_state ) ;
253250}
254251
255252fn popup_ui ( state : & mut ViewState , frame : & mut Frame ) {
256253 let create_block = |title, border, modifier, color| {
257- Block :: default ( ) . borders ( border) . gray ( ) . title ( Span :: styled (
258- title,
259- Style :: default ( ) . add_modifier ( modifier) . fg ( color) ,
260- ) )
254+ block:: Block :: default ( )
255+ . borders ( border)
256+ . gray ( )
257+ . title ( Span :: styled (
258+ title,
259+ Style :: default ( ) . add_modifier ( modifier) . fg ( color) ,
260+ ) )
261261 } ;
262262
263- let area = create_centered_rect ( 50 , 50 , frame. size ( ) ) ;
263+ let area = create_centered_rect ( 50 , 50 , frame. area ( ) ) ;
264264 let chunks = Layout :: new (
265265 Direction :: Vertical ,
266266 [ Constraint :: Percentage ( 100 ) , Constraint :: Percentage ( 100 ) ] ,
@@ -297,8 +297,8 @@ fn popup_ui(state: &mut ViewState, frame: &mut Frame) {
297297 ) ) ;
298298 textarea. set_placeholder_text ( placeholder) ;
299299 frame. render_widget (
300- textarea. widget ( ) ,
301- chunks[ 0 ] . inner ( & Margin {
300+ & * textarea,
301+ chunks[ 0 ] . inner ( Margin {
302302 vertical : 1 ,
303303 horizontal : 2 ,
304304 } ) ,
@@ -312,7 +312,7 @@ fn popup_ui(state: &mut ViewState, frame: &mut Frame) {
312312 let paragraph = Paragraph :: new ( line) . bold ( ) ;
313313 frame. render_widget (
314314 paragraph,
315- chunks[ 0 ] . inner ( & Margin {
315+ chunks[ 0 ] . inner ( Margin {
316316 vertical : 1 ,
317317 horizontal : 2 ,
318318 } ) ,
@@ -326,7 +326,7 @@ fn ui(state: &mut ViewState, frame: &mut Frame) {
326326 Direction :: Vertical ,
327327 [ Constraint :: Length ( 1 ) , Constraint :: Min ( 0 ) ] ,
328328 )
329- . split ( frame. size ( ) ) ;
329+ . split ( frame. area ( ) ) ;
330330
331331 // Title
332332 frame. render_widget (
@@ -380,10 +380,10 @@ fn connect_selected_ui(
380380 terminal. draw ( |frame| {
381381 frame. render_widget (
382382 Block :: default ( ) . title ( text) . borders ( Borders :: TOP ) ,
383- frame. size ( ) ,
383+ frame. area ( ) ,
384384 )
385385 } ) ?;
386- terminal. set_cursor ( 0 , 1 ) ?;
386+ terminal. set_cursor_position ( Position { x : 0 , y : 1 } ) ?;
387387 terminal. show_cursor ( ) ?;
388388
389389 disable_raw_mode ( ) ?;
0 commit comments