diff options
Diffstat (limited to 'helix-view')
-rw-r--r-- | helix-view/Cargo.toml | 2 | ||||
-rw-r--r-- | helix-view/src/input.rs | 18 | ||||
-rw-r--r-- | helix-view/src/keyboard.rs | 11 |
3 files changed, 29 insertions, 2 deletions
diff --git a/helix-view/Cargo.toml b/helix-view/Cargo.toml index b612d2d4..ef21f9a6 100644 --- a/helix-view/Cargo.toml +++ b/helix-view/Cargo.toml @@ -19,7 +19,7 @@ anyhow = "1" helix-core = { version = "0.6", path = "../helix-core" } helix-lsp = { version = "0.6", path = "../helix-lsp" } helix-dap = { version = "0.6", path = "../helix-dap" } -crossterm = { version = "0.24", optional = true } +crossterm = { version = "0.25", optional = true } # Conversion traits once_cell = "1.13" diff --git a/helix-view/src/input.rs b/helix-view/src/input.rs index 9ae3ce70..3b03087d 100644 --- a/helix-view/src/input.rs +++ b/helix-view/src/input.rs @@ -8,6 +8,8 @@ pub use crate::keyboard::{KeyCode, KeyModifiers}; #[derive(Debug, PartialOrd, PartialEq, Eq, Clone, Copy, Hash)] pub enum Event { + FocusGained, + FocusLost, Key(KeyEvent), Mouse(MouseEvent), Resize(u16, u16), @@ -57,6 +59,7 @@ pub enum MouseButton { pub struct KeyEvent { pub code: KeyCode, pub modifiers: KeyModifiers, + // TODO: crossterm now supports kind & state if terminal supports kitty's extended protocol } impl KeyEvent { @@ -271,6 +274,11 @@ impl From<crossterm::event::Event> for Event { crossterm::event::Event::Key(key) => Self::Key(key.into()), crossterm::event::Event::Mouse(mouse) => Self::Mouse(mouse.into()), crossterm::event::Event::Resize(w, h) => Self::Resize(w, h), + crossterm::event::Event::FocusGained => Self::FocusGained, + crossterm::event::Event::FocusLost => Self::FocusLost, + crossterm::event::Event::Paste(_) => { + unreachable!("crossterm shouldn't emit Paste events without them being enabled") + } } } } @@ -321,7 +329,11 @@ impl From<crossterm::event::MouseButton> for MouseButton { #[cfg(feature = "term")] impl From<crossterm::event::KeyEvent> for KeyEvent { - fn from(crossterm::event::KeyEvent { code, modifiers }: crossterm::event::KeyEvent) -> Self { + fn from( + crossterm::event::KeyEvent { + code, modifiers, .. + }: crossterm::event::KeyEvent, + ) -> Self { if code == crossterm::event::KeyCode::BackTab { // special case for BackTab -> Shift-Tab let mut modifiers: KeyModifiers = modifiers.into(); @@ -349,11 +361,15 @@ impl From<KeyEvent> for crossterm::event::KeyEvent { crossterm::event::KeyEvent { code: crossterm::event::KeyCode::BackTab, modifiers: modifiers.into(), + kind: crossterm::event::KeyEventKind::Press, + state: crossterm::event::KeyEventState::NONE, } } else { crossterm::event::KeyEvent { code: code.into(), modifiers: modifiers.into(), + kind: crossterm::event::KeyEventKind::Press, + state: crossterm::event::KeyEventState::NONE, } } } diff --git a/helix-view/src/keyboard.rs b/helix-view/src/keyboard.rs index d1b45b05..84cfebf1 100644 --- a/helix-view/src/keyboard.rs +++ b/helix-view/src/keyboard.rs @@ -147,6 +147,17 @@ impl From<crossterm::event::KeyCode> for KeyCode { CKeyCode::Char(character) => KeyCode::Char(character), CKeyCode::Null => KeyCode::Null, CKeyCode::Esc => KeyCode::Esc, + CKeyCode::CapsLock + | CKeyCode::ScrollLock + | CKeyCode::NumLock + | CKeyCode::PrintScreen + | CKeyCode::Pause + | CKeyCode::Menu + | CKeyCode::KeypadBegin + | CKeyCode::Media(_) + | CKeyCode::Modifier(_) => unreachable!( + "Shouldn't get this key without enabling DISAMBIGUATE_ESCAPE_CODES in crossterm" + ), } } } |