event_viewer/
event_viewer.rs

1extern crate ncurses;
2extern crate terminal_input;
3
4use std::io::Write as _;
5
6use terminal_input::{InputStream, Event, Modifiers, KeyInput};
7
8struct Screen(ncurses::WINDOW);
9
10impl Drop for Screen {
11    fn drop(&mut self) {
12        ncurses::endwin();
13    }
14}
15
16fn main() {
17    let screen = Screen(ncurses::initscr());
18    ncurses::scrollok(screen.0, true);
19    let stdin = std::io::stdin();
20    let mut input_stream = unsafe { InputStream::init_with_ncurses(stdin.lock(), screen.0) };
21
22    let mut out_file = None;
23    if let Some(arg) = std::env::args_os().nth(1) {
24        out_file = Some(std::fs::File::create(arg).unwrap());
25    }
26
27    loop {
28        let event = input_stream.next_event();
29        if let Some(ref mut file) = out_file {
30            write!(file, "{:?}\n", event).unwrap();
31        }
32        ncurses::wprintw(screen.0, &format!("{:?}\n", event));
33        ncurses::wrefresh(screen.0);
34
35        if let Ok(Event::KeyPress { modifiers: Modifiers::CTRL, key: KeyInput::Codepoint('c'), .. })
36             | Ok(Event::KeyPress { modifiers: Modifiers::CTRL, key: KeyInput::Codepoint('q'), .. }) = event {
37            return;         
38        }
39    }
40}