Skip to main content

kronos_tide/
input.rs

1use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
2
3#[derive(Debug, Clone)]
4pub enum InputEvent {
5    Character(char),
6    Control(char),
7    Enter,
8    Backspace,
9    Tab,
10    Escape,
11    ArrowUp,
12    ArrowDown,
13    ArrowLeft,
14    ArrowRight,
15    PageUp,
16    PageDown,
17    Home,
18    End,
19    Delete,
20    PrefixKey,
21    Unknown,
22}
23
24impl From<KeyEvent> for InputEvent {
25    fn from(key: KeyEvent) -> Self {
26        if key.modifiers.contains(KeyModifiers::CONTROL) {
27            if let KeyCode::Char(c) = key.code {
28                if c == 'b' {
29                    return InputEvent::PrefixKey;
30                }
31                return InputEvent::Control(c);
32            }
33        }
34        match key.code {
35            KeyCode::Char(c) => InputEvent::Character(c),
36            KeyCode::Enter => InputEvent::Enter,
37            KeyCode::Backspace => InputEvent::Backspace,
38            KeyCode::Tab => InputEvent::Tab,
39            KeyCode::Esc => InputEvent::Escape,
40            KeyCode::Up => InputEvent::ArrowUp,
41            KeyCode::Down => InputEvent::ArrowDown,
42            KeyCode::Left => InputEvent::ArrowLeft,
43            KeyCode::Right => InputEvent::ArrowRight,
44            KeyCode::PageUp => InputEvent::PageUp,
45            KeyCode::PageDown => InputEvent::PageDown,
46            KeyCode::Home => InputEvent::Home,
47            KeyCode::End => InputEvent::End,
48            KeyCode::Delete => InputEvent::Delete,
49            _ => InputEvent::Unknown,
50        }
51    }
52}