diff --git a/crates/cli/src/config.rs b/crates/cli/src/config.rs index a018b53..c3e3e01 100644 --- a/crates/cli/src/config.rs +++ b/crates/cli/src/config.rs @@ -236,11 +236,40 @@ pub fn make_config(args: &Args, state: &State) -> Result { ); }); - let show_events = || { - if print_events { - trace!("print events to stderr"); - for (n, event) in action.events.iter().enumerate() { - eprintln!("[EVENT {n}] {event}"); + let show_events = { + let events = action.events.clone(); + move || { + if print_events { + trace!("print events to stderr"); + for (n, event) in events.iter().enumerate() { + eprintln!("[EVENT {n}] {event}"); + } + } + } + }; + + let clear_screen = { + let events = action.events.clone(); + move || { + if let Some(mode) = clear { + match mode { + ClearMode::Clear => { + clearscreen::clear().ok(); + debug!("cleared screen"); + } + ClearMode::Reset => { + reset_screen(); + debug!("hard-reset screen"); + } + } + } + + // re-show events after clearing + if print_events { + trace!("print events to stderr"); + for (n, event) in events.iter().enumerate() { + eprintln!("[EVENT {n}] {event}"); + } } } }; @@ -333,28 +362,6 @@ pub fn make_config(args: &Args, state: &State) -> Result { return action; } - // clear the screen before printing events - if let Some(mode) = clear { - match mode { - ClearMode::Clear => { - clearscreen::clear().ok(); - debug!("cleared screen"); - } - ClearMode::Reset => { - for cs in [ - ClearScreen::WindowsCooked, - ClearScreen::WindowsVt, - ClearScreen::VtLeaveAlt, - ClearScreen::VtWellDone, - ClearScreen::default(), - ] { - cs.clear().ok(); - } - debug!("hard-reset screen"); - } - } - } - show_events(); if let Some(delay) = delay_run { @@ -388,6 +395,7 @@ pub fn make_config(args: &Args, state: &State) -> Result { OnBusyUpdate::Restart if cfg!(windows) => { job.restart(); job.run(move |context| { + clear_screen(); setup_process( innerjob.clone(), context.command.clone(), @@ -401,6 +409,7 @@ pub fn make_config(args: &Args, state: &State) -> Result { stop_timeout, ); job.run(move |context| { + clear_screen(); setup_process( innerjob.clone(), context.command.clone(), @@ -424,6 +433,7 @@ pub fn make_config(args: &Args, state: &State) -> Result { trace!("job finished, starting queued"); job.start(); job.run(move |context| { + clear_screen(); setup_process( innerjob.clone(), context.command.clone(), @@ -442,6 +452,7 @@ pub fn make_config(args: &Args, state: &State) -> Result { trace!("job is not running, start it"); job.start(); job.run(move |context| { + clear_screen(); setup_process( innerjob.clone(), context.command.clone(),