From 8315a8affbeb6d34727da47d3ec2f05635a3e1dc Mon Sep 17 00:00:00 2001 From: Joe Neeman Date: Mon, 5 Jul 2021 22:45:07 -0500 Subject: [PATCH] Yet another attempt at #402. --- Cargo.lock | 28 ++++++++++++++++++++++++++++ helix-term/Cargo.toml | 2 +- helix-term/src/application.rs | 6 +----- helix-term/src/job.rs | 9 ++++++--- 4 files changed, 36 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ab3cdd1e180c..e37174067240 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -256,6 +256,19 @@ dependencies = [ "futures-util", ] +[[package]] +name = "futures-macro" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4c40298486cdf52cc00cd6d6987892ba502c7656a16a4192a9992b1ccedd121" +dependencies = [ + "autocfg", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "futures-task" version = "0.3.15" @@ -270,9 +283,12 @@ checksum = "feb5c238d27e2bf94ffdfd27b2c29e3df4a68c4193bb6427384259e2bf191967" dependencies = [ "autocfg", "futures-core", + "futures-macro", "futures-task", "pin-project-lite", "pin-utils", + "proc-macro-hack", + "proc-macro-nested", "slab", ] @@ -673,6 +689,18 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "proc-macro-hack" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" + +[[package]] +name = "proc-macro-nested" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" + [[package]] name = "proc-macro2" version = "1.0.27" diff --git a/helix-term/Cargo.toml b/helix-term/Cargo.toml index 1ff32276627e..2df6172dbf7f 100644 --- a/helix-term/Cargo.toml +++ b/helix-term/Cargo.toml @@ -34,7 +34,7 @@ num_cpus = "1" tui = { path = "../helix-tui", package = "helix-tui", default-features = false, features = ["crossterm"] } crossterm = { version = "0.20", features = ["event-stream"] } -futures-util = { version = "0.3", features = ["std", "async-await"], default-features = false } +futures-util = { version = "0.3", features = ["std", "async-await", "async-await-macro"], default-features = false } # Logging fern = "0.6" diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs index 79dd7c3ba352..ef8189598675 100644 --- a/helix-term/src/application.rs +++ b/helix-term/src/application.rs @@ -159,11 +159,7 @@ impl Application { last_render = Instant::now(); } } - Some(callback) = self.jobs.futures.next() => { - self.jobs.handle_callback(&mut self.editor, &mut self.compositor, callback); - self.render(); - } - Some(callback) = self.jobs.wait_futures.next() => { + Some(callback) = self.jobs.next_job() => { self.jobs.handle_callback(&mut self.editor, &mut self.compositor, callback); self.render(); } diff --git a/helix-term/src/job.rs b/helix-term/src/job.rs index 2ac41926504e..68accbd0fc5d 100644 --- a/helix-term/src/job.rs +++ b/helix-term/src/job.rs @@ -78,9 +78,12 @@ impl Jobs { } pub async fn next_job(&mut self) -> Option>> { - tokio::select! { - event = self.futures.next() => { event } - event = self.wait_futures.next() => { event } + loop { + futures_util::select! { + event = self.futures.select_next_some() => { return Some(event); } + event = self.wait_futures.select_next_some() => { return Some(event); } + complete => { return None; } + }; } }