diff options
Diffstat (limited to 'src/shell/event.rs')
-rw-r--r-- | src/shell/event.rs | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/shell/event.rs b/src/shell/event.rs index e80cdef..2b12b05 100644 --- a/src/shell/event.rs +++ b/src/shell/event.rs @@ -1,11 +1,13 @@ +use crate::prelude::*; + #[derive(Debug)] pub enum Event { Key(textmode::Key), Resize((u16, u16)), PtyOutput, - PtyClose, ChildRunPipeline(usize, (usize, usize)), ChildSuspend(usize), + ChildExit(usize, Option<Env>), GitInfo(Option<super::git::Info>), ClockTimer, } @@ -90,9 +92,9 @@ struct Pending { key: std::collections::VecDeque<textmode::Key>, size: Option<(u16, u16)>, pty_output: bool, - pty_close: bool, child_run_pipeline: std::collections::VecDeque<(usize, (usize, usize))>, child_suspend: std::collections::VecDeque<usize>, + child_exit: Option<(usize, Option<Env>)>, git_info: Option<Option<super::git::Info>>, clock_timer: bool, done: bool, @@ -113,16 +115,15 @@ impl Pending { if let Some(size) = self.size.take() { return Some(Some(Event::Resize(size))); } - if self.pty_close { - self.pty_close = false; - return Some(Some(Event::PtyClose)); - } if let Some((idx, span)) = self.child_run_pipeline.pop_front() { return Some(Some(Event::ChildRunPipeline(idx, span))); } if let Some(idx) = self.child_suspend.pop_front() { return Some(Some(Event::ChildSuspend(idx))); } + if let Some((idx, env)) = self.child_exit.take() { + return Some(Some(Event::ChildExit(idx, env))); + } if let Some(info) = self.git_info.take() { return Some(Some(Event::GitInfo(info))); } @@ -145,13 +146,15 @@ impl Pending { Some(Event::Key(key)) => self.key.push_back(key), Some(Event::Resize(size)) => self.size = Some(size), Some(Event::PtyOutput) => self.pty_output = true, - Some(Event::PtyClose) => self.pty_close = true, Some(Event::ChildRunPipeline(idx, span)) => { self.child_run_pipeline.push_back((idx, span)); } Some(Event::ChildSuspend(idx)) => { self.child_suspend.push_back(idx); } + Some(Event::ChildExit(idx, env)) => { + self.child_exit = Some((idx, env)); + } Some(Event::GitInfo(info)) => self.git_info = Some(info), Some(Event::ClockTimer) => self.clock_timer = true, None => self.done = true, |