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 InsertNewline,
9 DeleteBack,
10 DeleteForward,
11 MoveCursorLeft,
12 MoveCursorRight,
13 MoveCursorHome,
14 MoveCursorEnd,
15 ScrollUp,
16 ScrollDown,
17 SwitchPanel,
18 SwitchEngine,
19 ToggleCaseInsensitive,
20 ToggleMultiLine,
21 ToggleDotAll,
22 ToggleUnicode,
23 ToggleExtended,
24 ShowHelp,
25 Undo,
26 Redo,
27 HistoryPrev,
28 HistoryNext,
29 CopyMatch,
30 Quit,
31 None,
32}
33
34pub fn key_to_action(key: KeyEvent) -> Action {
35 match key.code {
36 KeyCode::Char('c') if key.modifiers.contains(KeyModifiers::CONTROL) => Action::Quit,
37 KeyCode::Char('q') if key.modifiers.contains(KeyModifiers::CONTROL) => Action::Quit,
38 KeyCode::Esc => Action::Quit,
39 KeyCode::Tab => Action::SwitchPanel,
40 KeyCode::Char('e') if key.modifiers.contains(KeyModifiers::CONTROL) => Action::SwitchEngine,
41 KeyCode::Char('z') if key.modifiers.contains(KeyModifiers::CONTROL) => Action::Undo,
42 KeyCode::Char('Z')
43 if key
44 .modifiers
45 .contains(KeyModifiers::CONTROL | KeyModifiers::SHIFT) =>
46 {
47 Action::Redo
48 }
49 KeyCode::Char('y') if key.modifiers.contains(KeyModifiers::CONTROL) => Action::CopyMatch,
50 KeyCode::Char('i') if key.modifiers.contains(KeyModifiers::ALT) => {
51 Action::ToggleCaseInsensitive
52 }
53 KeyCode::Char('m') if key.modifiers.contains(KeyModifiers::ALT) => Action::ToggleMultiLine,
54 KeyCode::Char('s') if key.modifiers.contains(KeyModifiers::ALT) => Action::ToggleDotAll,
55 KeyCode::Char('u') if key.modifiers.contains(KeyModifiers::ALT) => Action::ToggleUnicode,
56 KeyCode::Char('x') if key.modifiers.contains(KeyModifiers::ALT) => Action::ToggleExtended,
57 KeyCode::Up if key.modifiers.contains(KeyModifiers::ALT) => Action::HistoryPrev,
58 KeyCode::Down if key.modifiers.contains(KeyModifiers::ALT) => Action::HistoryNext,
59 KeyCode::F(1) => Action::ShowHelp,
60 KeyCode::Char(c) => Action::InsertChar(c),
61 KeyCode::Enter => Action::InsertNewline,
62 KeyCode::Backspace => Action::DeleteBack,
63 KeyCode::Delete => Action::DeleteForward,
64 KeyCode::Left => Action::MoveCursorLeft,
65 KeyCode::Right => Action::MoveCursorRight,
66 KeyCode::Up => Action::ScrollUp,
67 KeyCode::Down => Action::ScrollDown,
68 KeyCode::Home => Action::MoveCursorHome,
69 KeyCode::End => Action::MoveCursorEnd,
70 _ => Action::None,
71 }
72}