diff --git a/src/draw_target.rs b/src/draw_target.rs index 40e6ea9e..bac1ce58 100644 --- a/src/draw_target.rs +++ b/src/draw_target.rs @@ -482,7 +482,9 @@ impl DrawState { } if !self.lines.is_empty() && self.move_cursor { - term.move_cursor_up(last_line_count.as_usize())?; + // Move up to first line (assuming the last line doesn't contain a '\n') and then move to then front of the line + term.move_cursor_up(last_line_count.as_usize().saturating_sub(1))?; + term.write_str("\r")?; } else { // Fork of console::clear_last_lines that assumes that the last line doesn't contain a '\n' let n = last_line_count.as_usize(); diff --git a/tests/render.rs b/tests/render.rs index e33eaec3..9edfe1a6 100644 --- a/tests/render.rs +++ b/tests/render.rs @@ -429,7 +429,8 @@ fn multi_progress_move_cursor() { pb1.tick(); assert_eq!( in_mem.moves_since_last_check(), - r#"Str("░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0/10") + r#"Str("\r") +Str("░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0/10") Str("") Flush "# @@ -439,7 +440,7 @@ Flush pb2.tick(); assert_eq!( in_mem.moves_since_last_check(), - r#"Up(1) + r#"Str("\r") Str("░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 0/10") Str("") NewLine @@ -452,7 +453,8 @@ Flush pb1.inc(1); assert_eq!( in_mem.moves_since_last_check(), - r#"Up(2) + r#"Up(1) +Str("\r") Str("███████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 1/10") Str("") NewLine