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