Unverified Commit faf67db0 authored by Jeremy Schlatter's avatar Jeremy Schlatter
Browse files

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
parent 8cf16063
...@@ -84,17 +84,16 @@ func (p *Progress) render() { ...@@ -84,17 +84,16 @@ func (p *Progress) render() {
fmt.Fprint(p.w, "\033[?25l") fmt.Fprint(p.w, "\033[?25l")
defer fmt.Fprint(p.w, "\033[?25h") defer fmt.Fprint(p.w, "\033[?25h")
// clear already rendered progress lines // move the cursor back to the beginning
for i := range p.pos { for range p.pos - 1 {
if i > 0 { fmt.Fprint(p.w, "\033[A")
fmt.Fprint(p.w, "\033[A")
}
fmt.Fprint(p.w, "\033[2K\033[1G")
} }
fmt.Fprint(p.w, "\033[1G")
// render progress lines // render progress lines
for i, state := range p.states { for i, state := range p.states {
fmt.Fprint(p.w, state.String()) fmt.Fprint(p.w, state.String())
fmt.Fprintf(p.w, "\033[K")
if i < len(p.states)-1 { if i < len(p.states)-1 {
fmt.Fprint(p.w, "\n") fmt.Fprint(p.w, "\n")
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment