From b0f28d178ad4e6325e418b3a94b5c5154e4a292e Mon Sep 17 00:00:00 2001 From: Michael Yang Date: Tue, 8 Apr 2025 08:57:44 -0700 Subject: [PATCH] default max term height --- progress/bar.go | 2 +- progress/progress.go | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/progress/bar.go b/progress/bar.go index 410b6e23f..f3d21a8fd 100644 --- a/progress/bar.go +++ b/progress/bar.go @@ -64,7 +64,7 @@ func formatDuration(d time.Duration) string { func (b *Bar) String() string { termWidth, _, err := term.GetSize(int(os.Stderr.Fd())) if err != nil { - termWidth = 80 + termWidth = defaultTermWidth } var pre strings.Builder diff --git a/progress/progress.go b/progress/progress.go index 0cd0ea1f9..9f54275ec 100644 --- a/progress/progress.go +++ b/progress/progress.go @@ -4,8 +4,16 @@ import ( "bufio" "fmt" "io" + "os" "sync" "time" + + "golang.org/x/term" +) + +const ( + defaultTermWidth = 80 + defaultTermHeight = 24 ) type State interface { @@ -83,6 +91,11 @@ func (p *Progress) Add(key string, state State) { } func (p *Progress) render() { + _, termHeight, err := term.GetSize(int(os.Stderr.Fd())) + if err != nil { + termHeight = defaultTermHeight + } + p.mu.Lock() defer p.mu.Unlock() @@ -102,8 +115,9 @@ func (p *Progress) render() { fmt.Fprint(p.w, "\033[1G") // render progress lines - for i, state := range p.states { - fmt.Fprint(p.w, state.String(), "\033[K") + maxHeight := min(len(p.states), termHeight) + for i := len(p.states) - maxHeight; i < len(p.states); i++ { + fmt.Fprint(p.w, p.states[i].String(), "\033[K") if i < len(p.states)-1 { fmt.Fprint(p.w, "\n") }