extern crate cursive; use cursive::{Cursive, Printer}; use cursive::event::{Event, EventResult}; use cursive::traits::*; // This example define a custom view that prints any event it receives. // This is a handy way to check the input received by cursive. fn main() { let mut siv = Cursive::default(); siv.add_layer(KeyCodeView::new(10).full_width().fixed_height(10)); siv.run(); } // Our view will have a small history of the last events. struct KeyCodeView { history: Vec, size: usize, } impl KeyCodeView { fn new(size: usize) -> Self { KeyCodeView { history: Vec::new(), size: size, } } } impl View for KeyCodeView { fn draw(&self, printer: &Printer) { // We simply draw every event from the history. for (y, line) in self.history.iter().enumerate() { printer.print((0, y), line); } } fn on_event(&mut self, event: Event) -> EventResult { // Each line will be a debug-format of the event. let line = format!("{:?}", event); self.history.push(line); // Keep a fixed-sized history. while self.history.len() > self.size { self.history.remove(0); } // No need to return any callback. EventResult::Consumed(None) } }