diff --git a/src/term/event.rs b/src/term/event.rs index 59646d9..53bce3e 100644 --- a/src/term/event.rs +++ b/src/term/event.rs @@ -7,14 +7,34 @@ pub struct TuiEvent( pub Event ); -impl_from!(TuiEvent: |e: Event| TuiEvent( - e)); -impl_from!(TuiEvent: |e: KeyEvent| TuiEvent( - Event::Key(e))); -impl_from!(TuiEvent: |c: KeyCode| TuiEvent( - Event::Key(KeyEvent::new(c, KeyModifiers::NONE)))); -impl_from!(TuiEvent: |c: char| TuiEvent( - Event::Key(KeyEvent::new(KeyCode::Char(c), KeyModifiers::NONE)))); +impl_from!(TuiEvent: |e: Event| + TuiEvent(e)); +impl_from!(TuiEvent: |e: KeyEvent| + TuiEvent(Event::Key(e))); +impl_from!(TuiEvent: |c: KeyCode| + TuiEvent(Event::Key(KeyEvent::new(c, KeyModifiers::NONE)))); +impl_from!(TuiEvent: |c: char| + TuiEvent(Event::Key(KeyEvent::new(KeyCode::Char(c), KeyModifiers::NONE)))); +impl_from!(TuiEvent: |s: &str| + TuiEvent(Event::Key(KeyEvent::new(match s { + "up" => KeyCode::Up, + "down" => KeyCode::Down, + "left" => KeyCode::Left, + "right" => KeyCode::Right, + "enter" => KeyCode::Enter, + _ => unimplemented!() + }, KeyModifiers::NONE)))); + +impl_display!(TuiEvent: |self, w| { + match self.0 { + Event::Key(e) => write!( + w, "{:?<12} {:?}", e.code, e.modifiers + ), + _ => write!( + w, "{:?}", self.0 + ) + } +}); impl Ord for TuiEvent { fn cmp (&self, other: &Self) -> std::cmp::Ordering {