From 62fe2477fb8bbbfbca34779b992979f9c1a8ba53 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 11 Dec 2021 17:54:10 -0500 Subject: move key handling into the main event loop --- src/action.rs | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/action.rs') diff --git a/src/action.rs b/src/action.rs index 2cb28c1..ff0402b 100644 --- a/src/action.rs +++ b/src/action.rs @@ -1,5 +1,6 @@ #[derive(Debug)] pub enum Action { + Key(textmode::Key), Render, ForceRedraw, Run(String), @@ -67,6 +68,7 @@ impl Reader { #[derive(Default)] struct Pending { + key: std::collections::VecDeque, render: Option<()>, force_redraw: Option<()>, run: std::collections::VecDeque, @@ -84,6 +86,7 @@ impl Pending { fn has_action(&self) -> bool { self.done + || !self.key.is_empty() || self.render.is_some() || self.force_redraw.is_some() || !self.run.is_empty() @@ -97,6 +100,9 @@ impl Pending { if self.done { return None; } + if !self.key.is_empty() { + return Some(Action::Key(self.key.pop_front().unwrap())); + } if self.size.is_some() { return Some(Action::Resize(self.size.take().unwrap())); } @@ -124,6 +130,7 @@ impl Pending { fn new_action(&mut self, action: &Option) { match action { + Some(Action::Key(key)) => self.key.push_back(key.clone()), Some(Action::Render) => self.render = Some(()), Some(Action::ForceRedraw) => self.force_redraw = Some(()), Some(Action::Run(cmd)) => self.run.push_back(cmd.to_string()), -- cgit v1.2.3-54-g00ecf