From 6225a73c35310421dac19c3aa80417e51c4b4a80 Mon Sep 17 00:00:00 2001 From: Dave Aitel Date: Fri, 6 Feb 2026 12:57:17 -0500 Subject: [PATCH] Use ANSI cursor control for job progress --- .../exec/src/event_processor_with_human_output.rs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/codex-rs/exec/src/event_processor_with_human_output.rs b/codex-rs/exec/src/event_processor_with_human_output.rs index acbf6f4e64..c5a2184b2a 100644 --- a/codex-rs/exec/src/event_processor_with_human_output.rs +++ b/codex-rs/exec/src/event_processor_with_human_output.rs @@ -953,19 +953,16 @@ impl EventProcessorWithHumanOutput { update.failed_items, update.running_items, update.pending_items ); let done = processed >= update.total_items; + let mut output = String::new(); + output.push_str("\u{1b}[2K"); + output.push_str("\u{1b}[0G"); + output.push_str(&line); if done { - if self.progress_active { - eprint!("\r"); - } - eprintln!("{line}"); + eprintln!("{output}"); self.progress_active = false; self.progress_last_len = 0; return; } - let mut output = format!("\r{line}"); - if self.progress_last_len > line.len() { - output.push_str(&" ".repeat(self.progress_last_len - line.len())); - } eprint!("{output}"); let _ = std::io::stderr().flush(); self.progress_active = true;