From ca32947b1449d0426257c5d6470f44e1cf005c3c Mon Sep 17 00:00:00 2001 From: Timon Post Date: Tue, 24 Dec 2019 20:36:08 +0100 Subject: [PATCH 1/2] Keep sender around to prevent disposing. --- src/event/events.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/event/events.rs b/src/event/events.rs index fe3e5a0b..8aee19fc 100644 --- a/src/event/events.rs +++ b/src/event/events.rs @@ -32,6 +32,8 @@ pub enum Event { /// type is handled in its own thread and returned to a common `Receiver` pub struct Events { rx: mpsc::Receiver>, + // Need to be kept around to prevent disposing the sender side. + _tx: mpsc::Sender>, } impl Events { @@ -44,6 +46,7 @@ impl Events { pub fn with_config(config: EventConfig) -> Events { let (tx, rx) = mpsc::channel(); + let event_tx = tx.clone(); thread::spawn(move || { loop { // poll for tick rate duration, if no event, sent tick event. @@ -54,15 +57,15 @@ impl Events { if key == config.exit_key { return; } - tx.send(Event::Input(key)).unwrap(); + event_tx.send(Event::Input(key)).unwrap(); } } - tx.send(Event::Tick).unwrap(); + event_tx.send(Event::Tick).unwrap(); } }); - Events { rx } + Events { rx, _tx: tx } } /// Attempts to read an event. From 885ec99dcb5bca9c883c515d52faaf6a7d67156d Mon Sep 17 00:00:00 2001 From: Timon Post Date: Wed, 25 Dec 2019 06:43:24 +0100 Subject: [PATCH 2/2] sent exit key over channel as well --- src/event/events.rs | 4 +++- src/main.rs | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/event/events.rs b/src/event/events.rs index 8aee19fc..15b9779d 100644 --- a/src/event/events.rs +++ b/src/event/events.rs @@ -51,13 +51,15 @@ impl Events { loop { // poll for tick rate duration, if no event, sent tick event. if event::poll(config.tick_rate).unwrap() { + if let event::Event::Key(key) = event::read().unwrap() { let key = Key::from(key); + event_tx.send(Event::Input(key)).unwrap(); + if key == config.exit_key { return; } - event_tx.send(Event::Input(key)).unwrap(); } } diff --git a/src/main.rs b/src/main.rs index 535262f5..cb4d2b57 100644 --- a/src/main.rs +++ b/src/main.rs @@ -256,7 +256,7 @@ fn main() -> Result<(), failure::Error> { if key == Key::Ctrl('c') { disable_raw_mode()?; let mut stdout = io::stdout(); - execute!(stdout, LeaveAlternateScreen, DisableMouseCapture)?; + execute!(stdout, LeavefAlternateScreen, DisableMouseCapture)?; break; }