Skip to content

Commit 5f47411

Browse files
committed
fix: Duplicated key events on Windows
1 parent c3190f8 commit 5f47411

File tree

2 files changed

+14
-9
lines changed

2 files changed

+14
-9
lines changed

src/app.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use ratatui::text::Line;
1616
use ratatui::widgets::Tabs;
1717
use ratatui::{
1818
DefaultTerminal,
19-
crossterm::event::{Event::Key, KeyCode, KeyEvent, KeyModifiers},
19+
crossterm::event::{KeyCode, KeyEvent, KeyModifiers},
2020
};
2121
use strum::IntoEnumIterator;
2222
use strum_macros::{Display, EnumIter, FromRepr};
@@ -106,11 +106,9 @@ impl App {
106106
self.events.send(event)
107107
}
108108
}
109-
Event::Crossterm(event) => {
110-
if let Key(key_event) = event {
111-
if let Some(event) = self.handle_key_event(key_event)? {
112-
self.events.send(event);
113-
}
109+
Event::Crossterm(key_event) => {
110+
if let Some(event) = self.handle_key_event(key_event)? {
111+
self.events.send(event);
114112
}
115113
}
116114
Event::App(app_event) => match app_event {

src/event.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use color_eyre::eyre::{OptionExt, Result};
2+
use crossterm::event::KeyEventKind;
23
use futures::{FutureExt, StreamExt};
3-
use ratatui::crossterm::event::Event as CrosstermEvent;
4+
use ratatui::crossterm::event::{KeyEvent, Event::Key};
45
use std::time::Duration;
56
use tokio::sync::mpsc;
67

@@ -9,7 +10,7 @@ const TICK_FPS: f64 = 30.0;
910
#[derive(Clone, Debug)]
1011
pub enum Event {
1112
Tick,
12-
Crossterm(CrosstermEvent),
13+
Crossterm(KeyEvent),
1314
App(AppEvent),
1415
}
1516

@@ -76,7 +77,13 @@ impl EventTask {
7677
tokio::select! {
7778
_ = self.sender.closed() => break,
7879
_ = tick_delay => self.send(Event::Tick),
79-
Some(Ok(event)) = crossterm_event => self.send(Event::Crossterm(event)),
80+
Some(Ok(event)) = crossterm_event => {
81+
if let Key(key) = event {
82+
if key.kind == KeyEventKind::Press {
83+
self.send(Event::Crossterm(key))
84+
}
85+
}
86+
}
8087
};
8188
}
8289

0 commit comments

Comments
 (0)