Radish alpha
r
rad:z39mP9rQAaGmERfUMPULfPUi473tY
Radicle terminal user interface
Radicle
Git
radicle-tui src event.rs
use ratatui::crossterm::{self, event::KeyModifiers};

#[derive(Clone, Copy, Debug, PartialEq)]
pub enum Key {
    Char(char),
    Alt(char),
    Ctrl(char),
    Enter,
    Backspace,
    Tab,
    BackTab,
    Delete,
    Up,
    Down,
    Left,
    Right,
    PageUp,
    PageDown,
    Home,
    End,
    Esc,
    Unknown,
}

#[derive(Clone, Copy, Debug)]
pub enum Event {
    Key(Key),
    Resize(u16, u16),
    Unknown,
}

impl From<crossterm::event::Event> for Event {
    fn from(event: crossterm::event::Event) -> Self {
        use crossterm::event::KeyCode;

        match event {
            crossterm::event::Event::Key(key) => match (key.code, key.modifiers) {
                (KeyCode::Char(c), KeyModifiers::CONTROL) => Event::Key(Key::Ctrl(c)),
                (KeyCode::Char(c), KeyModifiers::ALT) => Event::Key(Key::Alt(c)),
                (KeyCode::Char(c), _) => Event::Key(Key::Char(c)),
                (KeyCode::Enter, _) => Event::Key(Key::Enter),
                (KeyCode::Backspace, _) => Event::Key(Key::Backspace),
                (KeyCode::Tab, _) => Event::Key(Key::Tab),
                (KeyCode::BackTab, _) => Event::Key(Key::BackTab),
                (KeyCode::Delete, _) => Event::Key(Key::Delete),
                (KeyCode::Up, _) => Event::Key(Key::Up),
                (KeyCode::Down, _) => Event::Key(Key::Down),
                (KeyCode::Left, _) => Event::Key(Key::Left),
                (KeyCode::Right, _) => Event::Key(Key::Right),
                (KeyCode::PageUp, _) => Event::Key(Key::PageUp),
                (KeyCode::PageDown, _) => Event::Key(Key::PageDown),
                (KeyCode::Home, _) => Event::Key(Key::Home),
                (KeyCode::Esc, _) => Event::Key(Key::Esc),
                (KeyCode::End, _) => Event::Key(Key::End),
                _ => Event::Key(Key::Unknown),
            },
            crossterm::event::Event::Resize(x, y) => Event::Resize(x, y),
            _ => Event::Unknown,
        }
    }
}