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    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}