Skip to content

Commit fe96fef

Browse files
authored
fix: event-read-char-line double read error & auto enter (#954)
1 parent 1e7622c commit fe96fef

File tree

1 file changed

+27
-14
lines changed

1 file changed

+27
-14
lines changed

examples/event-read-char-line.rs

+27-14
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@
55
66
use std::io;
77

8-
use crossterm::event::{self, Event, KeyCode, KeyEvent};
8+
use crossterm::{event::{self, Event, KeyCode, KeyEvent, KeyEventKind}, terminal};
99

1010
pub fn read_char() -> io::Result<char> {
1111
loop {
1212
if let Event::Key(KeyEvent {
1313
code: KeyCode::Char(c),
14+
kind: KeyEventKind::Press,
1415
..
1516
}) = event::read()?
1617
{
@@ -21,24 +22,36 @@ pub fn read_char() -> io::Result<char> {
2122

2223
pub fn read_line() -> io::Result<String> {
2324
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+
_ => {}
3139
}
32-
_ => {}
3340
}
3441
}
3542

3643
Ok(line)
3744
}
3845

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()
4457
}

0 commit comments

Comments
 (0)