@@ -8,6 +8,8 @@ pub use crate::keyboard::{KeyCode, KeyModifiers};
88
99#[derive(Debug, PartialOrd, PartialEq, Eq, Clone, Copy, Hash)]
1010pub enum Event {
11+ FocusGained,
12+ FocusLost,
1113 Key(KeyEvent),
1214 Mouse(MouseEvent),
1315 Resize(u16, u16),
@@ -57,6 +59,7 @@ pub enum MouseButton {
5759pub struct KeyEvent {
5860 pub code: KeyCode,
5961 pub modifiers: KeyModifiers,
62+ // TODO: crossterm now supports kind & state if terminal supports kitty's extended protocol
6063}
6164
6265impl KeyEvent {
@@ -271,6 +274,11 @@ impl From<crossterm::event::Event> for Event {
271274 crossterm::event::Event::Key(key) => Self::Key(key.into()),
272275 crossterm::event::Event::Mouse(mouse) => Self::Mouse(mouse.into()),
273276 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")
281+ }
274282 }
275283 }
276284}
@@ -321,7 +329,11 @@ impl From<crossterm::event::MouseButton> for MouseButton {
321329
322330#[cfg(feature = "term")]
323331impl From<crossterm::event::KeyEvent> for KeyEvent {
324− fn from(crossterm::event::KeyEvent { code, modifiers }: crossterm::event::KeyEvent) -> Self {
332+ fn from(
333+ crossterm::event::KeyEvent {
334+ code, modifiers, ..
335+ }: crossterm::event::KeyEvent,
336+ ) -> Self {
325337 if code == crossterm::event::KeyCode::BackTab {
326338 // special case for BackTab -> Shift-Tab
327339 let mut modifiers: KeyModifiers = modifiers.into();
@@ -349,11 +361,15 @@ impl From<KeyEvent> for crossterm::event::KeyEvent {
349361 crossterm::event::KeyEvent {
350362 code: crossterm::event::KeyCode::BackTab,
351363 modifiers: modifiers.into(),
364+ kind: crossterm::event::KeyEventKind::Press,
365+ state: crossterm::event::KeyEventState::NONE,
352366 }
353367 } else {
354368 crossterm::event::KeyEvent {
355369 code: code.into(),
356370 modifiers: modifiers.into(),
371+ kind: crossterm::event::KeyEventKind::Press,
372+ state: crossterm::event::KeyEventState::NONE,
357373 }
358374 }
359375 }