From 36c5831b9b54dfd45e064f1ace6a408fd8526d73 Mon Sep 17 00:00:00 2001 From: Joscha Date: Thu, 27 Apr 2023 21:44:53 +0200 Subject: [PATCH] Simplify InputEvent Now that I've decided the F1 menu should always show all key bindings, there is no need for the InputEvent to be so complex. --- cove-input/src/event.rs | 100 ---------------------------------------- cove-input/src/lib.rs | 43 +++++++++++++++-- 2 files changed, 40 insertions(+), 103 deletions(-) delete mode 100644 cove-input/src/event.rs diff --git a/cove-input/src/event.rs b/cove-input/src/event.rs deleted file mode 100644 index 0a92b83..0000000 --- a/cove-input/src/event.rs +++ /dev/null @@ -1,100 +0,0 @@ -use crossterm::event::KeyEvent; - -use crate::KeyBinding; - -enum Mode { - Record, - Key(KeyEvent), - Paste(String), -} - -impl Mode { - fn from_crossterm_event(event: crossterm::event::Event) -> Option { - use crossterm::event::Event::*; - match event { - Key(event) => Some(Self::Key(event)), - Paste(string) => Some(Self::Paste(string)), - _ => None, - } - } -} - -pub enum Entry { - Space, - Category(String), - Binding(KeyBinding, String), -} - -pub struct InputEvent { - mode: Mode, - entries: Vec, -} - -impl InputEvent { - pub fn new_recording() -> Self { - Self { - mode: Mode::Record, - entries: vec![], - } - } - - pub fn from_crossterm_event(event: crossterm::event::Event) -> Option { - Some(Self { - mode: Mode::from_crossterm_event(event)?, - entries: vec![], - }) - } - - fn recording(&self) -> bool { - matches!(self.mode, Mode::Record) - } - - pub fn space(&mut self) { - if self.recording() { - self.entries.push(Entry::Space); - } - } - - pub fn category(&mut self, name: S) { - if self.recording() { - self.entries.push(Entry::Category(name.to_string())); - } - } - - pub fn key_event(&self) -> Option { - if let Mode::Key(event) = &self.mode { - Some(*event) - } else { - None - } - } - - pub fn paste_event(&self) -> Option<&str> { - if let Mode::Paste(string) = &self.mode { - Some(string) - } else { - None - } - } - - pub fn matches_key_binding( - &mut self, - binding: &KeyBinding, - description: S, - ) -> bool { - if self.recording() { - self.entries - .push(Entry::Binding(binding.clone(), description.to_string())); - } - - if let Some(event) = self.key_event() { - binding.matches(event) - } else { - false - } - } - - pub fn entries(&self) -> &[Entry] { - &self.entries - } -} diff --git a/cove-input/src/lib.rs b/cove-input/src/lib.rs index 3221d8c..ef0a0aa 100644 --- a/cove-input/src/lib.rs +++ b/cove-input/src/lib.rs @@ -1,12 +1,49 @@ -mod event; mod keys; pub use cove_macro::KeyGroup; +use crossterm::event::KeyEvent; -pub use event::*; -pub use keys::*; +pub use crate::keys::*; /// A group of related key bindings. pub trait KeyGroup { fn bindings(&self) -> Vec<(&KeyBinding, &'static str)>; } + +#[derive(Debug, Clone)] +pub enum InputEvent { + Key(KeyEvent), + Paste(String), +} + +impl InputEvent { + pub fn from_crossterm_event(event: crossterm::event::Event) -> Option { + use crossterm::event::Event::*; + match event { + Key(event) => Some(Self::Key(event)), + Paste(string) => Some(Self::Paste(string)), + _ => None, + } + } + + pub fn key_event(&self) -> Option { + match self { + Self::Key(event) => Some(*event), + _ => None, + } + } + + pub fn paste_event(&self) -> Option<&str> { + match self { + Self::Paste(string) => Some(string), + _ => None, + } + } + + pub fn matches(&self, binding: &KeyBinding) -> bool { + match self.key_event() { + Some(event) => binding.matches(event), + None => false, + } + } +}