1pub mod editor;
2
3use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
6pub enum Action {
7 InsertChar(char),
8 DeleteBack,
9 DeleteForward,
10 MoveCursorLeft,
11 MoveCursorRight,
12 MoveCursorHome,
13 MoveCursorEnd,
14 SwitchPanel,
15 SwitchEngine,
16 ToggleCaseInsensitive,
17 ToggleMultiLine,
18 ToggleDotAll,
19 ToggleUnicode,
20 ToggleExtended,
21 ShowHelp,
22 Quit,
23 None,
24}
25
26pub fn key_to_action(key: KeyEvent) -> Action {
27 match key.code {
28 KeyCode::Char('c') if key.modifiers.contains(KeyModifiers::CONTROL) => Action::Quit,
29 KeyCode::Char('q') if key.modifiers.contains(KeyModifiers::CONTROL) => Action::Quit,
30 KeyCode::Esc => Action::Quit,
31 KeyCode::Tab => Action::SwitchPanel,
32 KeyCode::Char('e') if key.modifiers.contains(KeyModifiers::CONTROL) => Action::SwitchEngine,
33 KeyCode::Char('i') if key.modifiers.contains(KeyModifiers::ALT) => {
34 Action::ToggleCaseInsensitive
35 }
36 KeyCode::Char('m') if key.modifiers.contains(KeyModifiers::ALT) => Action::ToggleMultiLine,
37 KeyCode::Char('s') if key.modifiers.contains(KeyModifiers::ALT) => Action::ToggleDotAll,
38 KeyCode::Char('u') if key.modifiers.contains(KeyModifiers::ALT) => Action::ToggleUnicode,
39 KeyCode::Char('x') if key.modifiers.contains(KeyModifiers::ALT) => Action::ToggleExtended,
40 KeyCode::Char('?') => Action::ShowHelp,
41 KeyCode::Char(c) => Action::InsertChar(c),
42 KeyCode::Backspace => Action::DeleteBack,
43 KeyCode::Delete => Action::DeleteForward,
44 KeyCode::Left => Action::MoveCursorLeft,
45 KeyCode::Right => Action::MoveCursorRight,
46 KeyCode::Home => Action::MoveCursorHome,
47 KeyCode::End => Action::MoveCursorEnd,
48 _ => Action::None,
49 }
50}