mirror of
https://github.com/crossterm-rs/crossterm.git
synced 2025-05-05 15:32:57 +00:00
fix: event-read-char-line double read error & auto enter (#954)
This commit is contained in:
parent
1e7622c1dc
commit
fe96fefd41
@ -5,12 +5,13 @@
|
||||
|
||||
use std::io;
|
||||
|
||||
use crossterm::event::{self, Event, KeyCode, KeyEvent};
|
||||
use crossterm::{event::{self, Event, KeyCode, KeyEvent, KeyEventKind}, terminal};
|
||||
|
||||
pub fn read_char() -> io::Result<char> {
|
||||
loop {
|
||||
if let Event::Key(KeyEvent {
|
||||
code: KeyCode::Char(c),
|
||||
kind: KeyEventKind::Press,
|
||||
..
|
||||
}) = event::read()?
|
||||
{
|
||||
@ -21,24 +22,36 @@ pub fn read_char() -> io::Result<char> {
|
||||
|
||||
pub fn read_line() -> io::Result<String> {
|
||||
let mut line = String::new();
|
||||
while let Event::Key(KeyEvent { code, .. }) = event::read()? {
|
||||
match code {
|
||||
KeyCode::Enter => {
|
||||
break;
|
||||
loop {
|
||||
if let Event::Key(KeyEvent{
|
||||
code,
|
||||
kind: KeyEventKind::Press,
|
||||
..
|
||||
}) = event::read()? {
|
||||
match code {
|
||||
KeyCode::Enter => {
|
||||
break;
|
||||
}
|
||||
KeyCode::Char(c) => {
|
||||
line.push(c);
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
KeyCode::Char(c) => {
|
||||
line.push(c);
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(line)
|
||||
}
|
||||
|
||||
fn main() {
|
||||
println!("read line:");
|
||||
println!("{:?}", read_line());
|
||||
println!("read char:");
|
||||
println!("{:?}", read_char());
|
||||
fn main() -> io::Result<()> {
|
||||
terminal::enable_raw_mode()?;
|
||||
|
||||
println!("read line:\r");
|
||||
println!("{:?}\r", read_line());
|
||||
println!("read char:\r");
|
||||
println!("{:?}\r", read_char());
|
||||
println!("read char again:\r");
|
||||
println!("{:?}\r", read_char());
|
||||
|
||||
terminal::disable_raw_mode()
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user