@@ -1,76 +0,0 @@
1−//! Demonstrates how to read events asynchronously with async-std.
2−//!
3−//! cargo run --features="event-stream" --example event-stream-async-std
4−
5−use std::{
6− io::{stdout, Write},
7− time::Duration,
8−};
9−
10−use futures::{future::FutureExt, select, StreamExt};
11−use smol::Timer;
12−// use futures_timer::Delay;
13−
14−use crossterm::{
15− cursor::position,
16− event::{DisableMouseCapture, EnableMouseCapture, Event, EventStream, KeyCode},
17− execute,
18− terminal::{disable_raw_mode, enable_raw_mode},
19− Result,
20−};
21−
22−const HELP: &str = r#"EventStream based on futures::Stream with async-std
23− - Keyboard, mouse and terminal resize events enabled
24− - Prints "." every second if there's no event
25− - Hit "c" to print current cursor position
26− - Use Esc to quit
27−"#;
28−
29−async fn print_events() {
30− let mut reader = EventStream::new();
31−
32− loop {
33− let mut delay = Timer::after(Duration::from_millis(1_000)).fuse();
34− let mut event = reader.next().fuse();
35−
36− select! {
37− _ = delay => { println!(".\r"); },
38− maybe_event = event => {
39− match maybe_event {
40− Some(Ok(event)) => {
41− println!("Event::{:?}\r", event);
42−
43− if event == Event::Key(KeyCode::Char('c').into()) {
44− println!("Cursor position: {:?}\r", position());
45−
46− }
47−
48− println!("test");
49−
50− if event == Event::Key(KeyCode::Esc.into()) {
51− break;
52− }
53− }
54− Some(Err(e)) => println!("Error: {:?}\r", e),
55− None => break,
56− }
57− }
58− };
59− }
60−}
61−
62−fn main() -> Result<()> {
63− println!("{}", HELP);
64−
65− enable_raw_mode()?;
66−
67− let mut stdout = stdout();
68− execute!(stdout, EnableMouseCapture)?;
69−
70− // No need to `run()`, now we can just block on the main future.
71− smol::run(print_events());
72−
73− execute!(stdout, DisableMouseCapture)?;
74−
75− disable_raw_mode()
76−}