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 4f4a2d0e7d..b8139c6bd0 100644 --- a/codex-rs/exec/src/event_processor_with_human_output.rs +++ b/codex-rs/exec/src/event_processor_with_human_output.rs @@ -82,6 +82,7 @@ pub(crate) struct EventProcessorWithHumanOutput { progress_active: bool, progress_last_len: usize, use_ansi_cursor: bool, + progress_wrap_disabled: bool, } impl EventProcessorWithHumanOutput { @@ -113,6 +114,7 @@ impl EventProcessorWithHumanOutput { progress_active: false, progress_last_len: 0, use_ansi_cursor: cursor_ansi, + progress_wrap_disabled: false, } } else { Self { @@ -134,6 +136,7 @@ impl EventProcessorWithHumanOutput { progress_active: false, progress_last_len: 0, use_ansi_cursor: cursor_ansi, + progress_wrap_disabled: false, } } } @@ -935,6 +938,10 @@ impl EventProcessorWithHumanOutput { self.progress_active = false; self.progress_last_len = 0; if self.use_ansi_cursor { + if self.progress_wrap_disabled { + eprint!("\u{1b}[?7h"); + self.progress_wrap_disabled = false; + } eprint!("\u{1b}[1G\u{1b}[2K\n"); } else { eprintln!(); @@ -975,10 +982,18 @@ impl EventProcessorWithHumanOutput { } return; } + if !self.progress_active { + eprint!("\u{1b}[?7l"); + self.progress_wrap_disabled = true; + } let mut output = String::new(); output.push_str("\u{1b}[1G\u{1b}[2K"); output.push_str(&line); if done { + if self.progress_wrap_disabled { + output.push_str("\u{1b}[?7h"); + self.progress_wrap_disabled = false; + } output.push('\n'); eprint!("{output}"); self.progress_active = false;