@@ -8,6 +8,8 @@ pub use crate::keyboard::{KeyCode, KeyModifiers};
9#[derive(Debug, PartialOrd, PartialEq, Eq, Clone, Copy, Hash)]
9#[derive(Debug, PartialOrd, PartialEq, Eq, Clone, Copy, Hash)]
10pub enum Event {
10pub enum Event {
11 Key(KeyEvent),
13 Key(KeyEvent),
12 Mouse(MouseEvent),
14 Mouse(MouseEvent),
13 Resize(u16, u16),
15 Resize(u16, u16),
@@ -57,6 +59,7 @@ pub enum MouseButton {
57pub struct KeyEvent {
59pub struct KeyEvent {
58 pub code: KeyCode,
60 pub code: KeyCode,
59 pub modifiers: KeyModifiers,
61 pub modifiers: KeyModifiers,
62+ // TODO: crossterm now supports kind & state if terminal supports kitty's extended protocol
62impl KeyEvent {
65impl KeyEvent {
@@ -271,6 +274,11 @@ impl From<crossterm::event::Event> for Event {
271 crossterm::event::Event::Key(key) => Self::Key(key.into()),
274 crossterm::event::Event::Key(key) => Self::Key(key.into()),
272 crossterm::event::Event::Mouse(mouse) => Self::Mouse(mouse.into()),
275 crossterm::event::Event::Mouse(mouse) => Self::Mouse(mouse.into()),
273 crossterm::event::Event::Resize(w, h) => Self::Resize(w, h),
276 crossterm::event::Event::Resize(w, h) => Self::Resize(w, h),
277+ crossterm::event::Event::FocusGained => Self::FocusGained,
278+ crossterm::event::Event::FocusLost => Self::FocusLost,
279+ crossterm::event::Event::Paste(_) => {
280+ unreachable!("crossterm shouldn't emit Paste events without them being enabled")
@@ -321,7 +329,11 @@ impl From<crossterm::event::MouseButton> for MouseButton {
322#[cfg(feature = "term")]
330#[cfg(feature = "term")]
323impl From<crossterm::event::KeyEvent> for KeyEvent {
331impl From<crossterm::event::KeyEvent> for KeyEvent {
324− fn from(crossterm::event::KeyEvent { code, modifiers }: crossterm::event::KeyEvent) -> Self {
333+ crossterm::event::KeyEvent {
335+ }: crossterm::event::KeyEvent,
325 if code == crossterm::event::KeyCode::BackTab {
337 if code == crossterm::event::KeyCode::BackTab {
326 // special case for BackTab -> Shift-Tab
338 // special case for BackTab -> Shift-Tab
327 let mut modifiers: KeyModifiers = modifiers.into();
339 let mut modifiers: KeyModifiers = modifiers.into();
@@ -349,11 +361,15 @@ impl From<KeyEvent> for crossterm::event::KeyEvent {
349 crossterm::event::KeyEvent {
361 crossterm::event::KeyEvent {
350 code: crossterm::event::KeyCode::BackTab,
362 code: crossterm::event::KeyCode::BackTab,
351 modifiers: modifiers.into(),
363 modifiers: modifiers.into(),
364+ kind: crossterm::event::KeyEventKind::Press,
365+ state: crossterm::event::KeyEventState::NONE,
354 crossterm::event::KeyEvent {
368 crossterm::event::KeyEvent {
355 code: code.into(),
369 code: code.into(),
356 modifiers: modifiers.into(),
370 modifiers: modifiers.into(),
371+ kind: crossterm::event::KeyEventKind::Press,
372+ state: crossterm::event::KeyEventState::NONE,