diff --git a/src/loaders.rs b/src/loaders.rs index a43986b..96b954e 100644 --- a/src/loaders.rs +++ b/src/loaders.rs @@ -190,7 +190,7 @@ impl<'a> LongRunningProgress<'a> { } eprint!("\x1b[{}F", self.visible_lines); for _ in 0..self.visible_lines { - eprintln!("\x1b[2K"); + write!(&mut std::io::stderr(), "\x1b[2K\x1b[1B").ok(); } eprint!("\x1b[{}F", self.visible_lines); let _ = std::io::stderr().flush(); diff --git a/src/progress.rs b/src/progress.rs index 71554e9..1761dd6 100644 --- a/src/progress.rs +++ b/src/progress.rs @@ -64,13 +64,14 @@ impl State { } /// Move the cursor back to the top of a `n`-line block, clearing it on the way. +/// Avoid `writeln!`/`eprintln!` so stray `\n` won't produce visible scrollback. fn rewind(err: &mut impl Write, n: usize) { if n == 0 { return; } let _ = write!(err, "\x1b[{n}F"); for _ in 0..n { - let _ = writeln!(err, "\x1b[2K"); + let _ = write!(err, "\x1b[2K\x1b[1B"); } let _ = write!(err, "\x1b[{n}F"); }