5
5
6
6
use std:: io;
7
7
8
- use crossterm:: event:: { self , Event , KeyCode , KeyEvent } ;
8
+ use crossterm:: { event:: { self , Event , KeyCode , KeyEvent , KeyEventKind } , terminal } ;
9
9
10
10
pub fn read_char ( ) -> io:: Result < char > {
11
11
loop {
12
12
if let Event :: Key ( KeyEvent {
13
13
code : KeyCode :: Char ( c) ,
14
+ kind : KeyEventKind :: Press ,
14
15
..
15
16
} ) = event:: read ( ) ?
16
17
{
@@ -21,24 +22,36 @@ pub fn read_char() -> io::Result<char> {
21
22
22
23
pub fn read_line ( ) -> io:: Result < String > {
23
24
let mut line = String :: new ( ) ;
24
- while let Event :: Key ( KeyEvent { code, .. } ) = event:: read ( ) ? {
25
- match code {
26
- KeyCode :: Enter => {
27
- break ;
28
- }
29
- KeyCode :: Char ( c) => {
30
- line. push ( c) ;
25
+ loop {
26
+ if let Event :: Key ( KeyEvent {
27
+ code,
28
+ kind : KeyEventKind :: Press ,
29
+ ..
30
+ } ) = event:: read ( ) ? {
31
+ match code {
32
+ KeyCode :: Enter => {
33
+ break ;
34
+ }
35
+ KeyCode :: Char ( c) => {
36
+ line. push ( c) ;
37
+ }
38
+ _ => { }
31
39
}
32
- _ => { }
33
40
}
34
41
}
35
42
36
43
Ok ( line)
37
44
}
38
45
39
- fn main ( ) {
40
- println ! ( "read line:" ) ;
41
- println ! ( "{:?}" , read_line( ) ) ;
42
- println ! ( "read char:" ) ;
43
- println ! ( "{:?}" , read_char( ) ) ;
46
+ fn main ( ) -> io:: Result < ( ) > {
47
+ terminal:: enable_raw_mode ( ) ?;
48
+
49
+ println ! ( "read line:\r " ) ;
50
+ println ! ( "{:?}\r " , read_line( ) ) ;
51
+ println ! ( "read char:\r " ) ;
52
+ println ! ( "{:?}\r " , read_char( ) ) ;
53
+ println ! ( "read char again:\r " ) ;
54
+ println ! ( "{:?}\r " , read_char( ) ) ;
55
+
56
+ terminal:: disable_raw_mode ( )
44
57
}
0 commit comments