summaryrefslogtreecommitdiffstats
path: root/src/shell/event.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/shell/event.rs')
-rw-r--r--src/shell/event.rs17
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,