cmd: fix progress bar flickering

Previous code cleared the display before writing new content, creating a
window where the terminal could (and in some cases did) render empty lines.

Instead, we now write new content over the old content, only clearing
the trailing end of lines for cases where the new line is shorter.

Fixes #1664
This commit is contained in:
Jeremy Schlatter 2025-02-17 13:37:40 -08:00
parent 8cf16063a5
commit faf67db089
No known key found for this signature in database
GPG Key ID: 4D081B793DF81368

View File

@ -84,17 +84,16 @@ func (p *Progress) render() {
fmt.Fprint(p.w, "\033[?25l")
defer fmt.Fprint(p.w, "\033[?25h")
// clear already rendered progress lines
for i := range p.pos {
if i > 0 {
fmt.Fprint(p.w, "\033[A")
}
fmt.Fprint(p.w, "\033[2K\033[1G")
// move the cursor back to the beginning
for range p.pos - 1 {
fmt.Fprint(p.w, "\033[A")
}
fmt.Fprint(p.w, "\033[1G")
// render progress lines
for i, state := range p.states {
fmt.Fprint(p.w, state.String())
fmt.Fprintf(p.w, "\033[K")
if i < len(p.states)-1 {
fmt.Fprint(p.w, "\n")
}