event_viewer/
event_viewer.rs1extern 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}