Skip to main content

rgx/input/
mod.rs

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}