aboutsummaryrefslogtreecommitdiff
path: root/helix-view
diff options
context:
space:
mode:
Diffstat (limited to 'helix-view')
-rw-r--r--helix-view/Cargo.toml2
-rw-r--r--helix-view/src/input.rs18
-rw-r--r--helix-view/src/keyboard.rs11
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"
+ ),
}
}
}