@@ -5,25 +5,46 @@ use std::io;
55use crossterm:: event:: { self , Event , KeyCode , KeyEvent , KeyModifiers } ;
66use ratatui:: { DefaultTerminal , Frame } ;
77
8- fn main ( ) -> io:: Result < ( ) > {
9- let terminal = ratatui:: init ( ) ;
10- let result = run ( terminal) ;
11- ratatui:: restore ( ) ;
12- result
8+ struct State {
9+ text : Vec < char > ,
1310}
1411
15- fn run ( mut terminal : DefaultTerminal ) -> io:: Result < ( ) > {
16- loop {
17- terminal. draw ( render) ?;
18- let event = event:: read ( ) ?;
12+ impl State {
13+ fn run ( & mut self , mut terminal : DefaultTerminal ) -> io:: Result < ( ) > {
14+ loop {
15+ terminal. draw ( |x| self . render ( x) ) ?;
16+ let event = event:: read ( ) ?;
1917
20- match event {
21- Event :: Key ( KeyEvent { code : KeyCode :: Char ( 'q' ) , modifiers : KeyModifiers :: CONTROL , .. } ) => break Ok ( ( ) ) ,
22- _ => { }
18+ match event {
19+ Event :: Key ( KeyEvent {
20+ code : KeyCode :: Char ( 'q' ) ,
21+ modifiers : KeyModifiers :: CONTROL ,
22+ ..
23+ } ) => break Ok ( ( ) ) ,
24+ Event :: Key ( KeyEvent {
25+ code : KeyCode :: Char ( c) ,
26+ modifiers : KeyModifiers :: NONE ,
27+ ..
28+ } ) => self . insert_char ( c) ,
29+ _ => { }
30+ }
2331 }
2432 }
33+
34+ fn insert_char ( & mut self , c : char ) {
35+ self . text . push ( c) ;
36+ }
37+
38+ fn render ( & self , frame : & mut Frame ) {
39+ let s: String = self . text . iter ( ) . collect ( ) ;
40+ frame. render_widget ( s, frame. area ( ) ) ;
41+ }
2542}
2643
27- fn render ( frame : & mut Frame ) {
28- frame. render_widget ( "hello world" , frame. area ( ) ) ;
44+ fn main ( ) -> io:: Result < ( ) > {
45+ let terminal = ratatui:: init ( ) ;
46+ let mut state: State = State { text : Vec :: new ( ) } ;
47+ let result = state. run ( terminal) ;
48+ ratatui:: restore ( ) ;
49+ result
2950}
0 commit comments