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}