The first terminal event is ignored after using `stdin`
dalance opened this issue · 2 comments
dalance commented
I want to use async_std::io::std
and terminal event after it.
But the first event seems to be ignored.
The procedure of reproduce is below:
use crossterm::event::{read, Event};
use crossterm::terminal;
use std::time::Duration;
fn main() {
let buf = async_std::task::block_on(async_std::io::timeout(Duration::new(1, 0), async {
use async_std::io::ReadExt;
let mut buf = [0; 1];
let mut stdin = async_std::io::stdin();
let _ = stdin.read_exact(&mut buf).await?;
Ok(buf)
}));
dbg!(buf);
terminal::enable_raw_mode().unwrap();
println!("{:?}", read());
terminal::disable_raw_mode().unwrap();
}
- run the above code
- wait until
dbg!
message is shown - press any key
The expected result is that the first key pressing is shown.
Actually the first key pressing is ignored, and the second key pressing is shown.
If let buf = ...
code block is commented out, the first key pressing is shown.
dalance commented
This behaviour seems to be the same as tokio.
dalance commented
The behaviour seems to known limitation.
I'll close this.