summaryrefslogtreecommitdiffstats
path: root/third_party/rust/termion/examples/async.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/termion/examples/async.rs')
-rw-r--r--third_party/rust/termion/examples/async.rs39
1 files changed, 39 insertions, 0 deletions
diff --git a/third_party/rust/termion/examples/async.rs b/third_party/rust/termion/examples/async.rs
new file mode 100644
index 0000000000..b16bb78618
--- /dev/null
+++ b/third_party/rust/termion/examples/async.rs
@@ -0,0 +1,39 @@
+extern crate termion;
+
+use termion::raw::IntoRawMode;
+use termion::async_stdin;
+use std::io::{Read, Write, stdout};
+use std::thread;
+use std::time::Duration;
+
+fn main() {
+ let stdout = stdout();
+ let mut stdout = stdout.lock().into_raw_mode().unwrap();
+ let mut stdin = async_stdin().bytes();
+
+ write!(stdout,
+ "{}{}",
+ termion::clear::All,
+ termion::cursor::Goto(1, 1))
+ .unwrap();
+
+ loop {
+ write!(stdout, "{}", termion::clear::CurrentLine).unwrap();
+
+ let b = stdin.next();
+ write!(stdout, "\r{:?} <- This demonstrates the async read input char. Between each update a 100 ms. is waited, simply to demonstrate the async fashion. \n\r", b).unwrap();
+ if let Some(Ok(b'q')) = b {
+ break;
+ }
+
+ stdout.flush().unwrap();
+
+ thread::sleep(Duration::from_millis(50));
+ stdout.write_all(b"# ").unwrap();
+ stdout.flush().unwrap();
+ thread::sleep(Duration::from_millis(50));
+ stdout.write_all(b"\r #").unwrap();
+ write!(stdout, "{}", termion::cursor::Goto(1, 1)).unwrap();
+ stdout.flush().unwrap();
+ }
+}