Fix #809: clear screen before starting process, not on every event
This commit is contained in:
parent
0d09f98bf5
commit
825f2b20e2
|
@ -236,13 +236,45 @@ pub fn make_config(args: &Args, state: &State) -> Result<Config> {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
let show_events = || {
|
let show_events = {
|
||||||
|
let print_events = print_events;
|
||||||
|
let events = action.events.clone();
|
||||||
|
move || {
|
||||||
if print_events {
|
if print_events {
|
||||||
trace!("print events to stderr");
|
trace!("print events to stderr");
|
||||||
for (n, event) in action.events.iter().enumerate() {
|
for (n, event) in events.iter().enumerate() {
|
||||||
eprintln!("[EVENT {n}] {event}");
|
eprintln!("[EVENT {n}] {event}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let clear_screen = {
|
||||||
|
let clear = clear;
|
||||||
|
let print_events = print_events;
|
||||||
|
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}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let quit = |mut action: ActionHandler| {
|
let quit = |mut action: ActionHandler| {
|
||||||
|
@ -333,28 +365,6 @@ pub fn make_config(args: &Args, state: &State) -> Result<Config> {
|
||||||
return action;
|
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();
|
show_events();
|
||||||
|
|
||||||
if let Some(delay) = delay_run {
|
if let Some(delay) = delay_run {
|
||||||
|
@ -388,6 +398,7 @@ pub fn make_config(args: &Args, state: &State) -> Result<Config> {
|
||||||
OnBusyUpdate::Restart if cfg!(windows) => {
|
OnBusyUpdate::Restart if cfg!(windows) => {
|
||||||
job.restart();
|
job.restart();
|
||||||
job.run(move |context| {
|
job.run(move |context| {
|
||||||
|
clear_screen();
|
||||||
setup_process(
|
setup_process(
|
||||||
innerjob.clone(),
|
innerjob.clone(),
|
||||||
context.command.clone(),
|
context.command.clone(),
|
||||||
|
@ -401,6 +412,7 @@ pub fn make_config(args: &Args, state: &State) -> Result<Config> {
|
||||||
stop_timeout,
|
stop_timeout,
|
||||||
);
|
);
|
||||||
job.run(move |context| {
|
job.run(move |context| {
|
||||||
|
clear_screen();
|
||||||
setup_process(
|
setup_process(
|
||||||
innerjob.clone(),
|
innerjob.clone(),
|
||||||
context.command.clone(),
|
context.command.clone(),
|
||||||
|
@ -424,6 +436,7 @@ pub fn make_config(args: &Args, state: &State) -> Result<Config> {
|
||||||
trace!("job finished, starting queued");
|
trace!("job finished, starting queued");
|
||||||
job.start();
|
job.start();
|
||||||
job.run(move |context| {
|
job.run(move |context| {
|
||||||
|
clear_screen();
|
||||||
setup_process(
|
setup_process(
|
||||||
innerjob.clone(),
|
innerjob.clone(),
|
||||||
context.command.clone(),
|
context.command.clone(),
|
||||||
|
@ -442,6 +455,7 @@ pub fn make_config(args: &Args, state: &State) -> Result<Config> {
|
||||||
trace!("job is not running, start it");
|
trace!("job is not running, start it");
|
||||||
job.start();
|
job.start();
|
||||||
job.run(move |context| {
|
job.run(move |context| {
|
||||||
|
clear_screen();
|
||||||
setup_process(
|
setup_process(
|
||||||
innerjob.clone(),
|
innerjob.clone(),
|
||||||
context.command.clone(),
|
context.command.clone(),
|
||||||
|
|
Loading…
Reference in New Issue