summaryrefslogtreecommitdiffstats
path: root/progress.go
diff options
context:
space:
mode:
authorRose Hogenson <rosehogenson@posteo.net>2025-04-06 09:24:20 -0700
committerRose Hogenson <rosehogenson@posteo.net>2025-04-06 09:24:20 -0700
commit6fc34c4c3cbb68f6f7cb8049a6d68bd315c07984 (patch)
treeb09e1b14e109519f3a4c1796995d92691461c16f /progress.go
parent57378c31cb26336c59114486ed357283fde73cfe (diff)
downloadprogress-bar-6fc34c4c3cbb68f6f7cb8049a6d68bd315c07984.tar.zst
Fix terminal resize
Diffstat (limited to 'progress.go')
-rw-r--r--progress.go27
1 files changed, 11 insertions, 16 deletions
diff --git a/progress.go b/progress.go
index 0f1a785..3a638ed 100644
--- a/progress.go
+++ b/progress.go
@@ -24,7 +24,7 @@ import (
"strings"
"time"
- "gitlab.com/rhogenson/vecdeque"
+ "gitlab.com/rhogenson/deque"
"golang.org/x/term"
)
@@ -36,8 +36,7 @@ type measurement struct {
// Bar is a progess bar.
type Bar struct {
max int
- measurements vecdeque.DQ[measurement]
- cols int
+ measurements deque.Deque[measurement]
secondPrint bool
}
@@ -48,8 +47,8 @@ func New(max int) *Bar {
// Set sets the current value to val.
func (b *Bar) Set(val int) {
// Measurements must be strictly increasing
- for b.measurements.Len() > 0 && b.measurements.Get(b.measurements.Len()-1).i > val {
- b.measurements.PopBack()
+ if b.measurements.Len() > 0 && b.measurements.At(b.measurements.Len()-1).i > val {
+ b.measurements.Reset()
}
b.measurements.PushBack(measurement{time.Now(), val})
}
@@ -61,11 +60,11 @@ func (b *Bar) Print() {
}
now := time.Now()
- for b.measurements.Len() > 2 && now.Sub(b.measurements.Get(0).t) > 2*time.Minute {
+ for b.measurements.Len() > 2 && now.Sub(b.measurements.At(0).t) > 2*time.Minute {
b.measurements.PopFront()
}
- first := b.measurements.Get(0)
- last := b.measurements.Get(b.measurements.Len() - 1)
+ first := b.measurements.At(0)
+ last := b.measurements.At(b.measurements.Len() - 1)
deltaT := last.t.Sub(first.t)
delta := last.i - first.i
eta := time.Duration(-1)
@@ -77,14 +76,10 @@ func (b *Bar) Print() {
fmt.Fprint(os.Stderr, "\033[2F\033[J")
}
b.secondPrint = true
- if b.cols == 0 {
- var err error
- if b.cols, _, err = term.GetSize(int(os.Stderr.Fd())); err != nil {
- fmt.Fprintf(os.Stderr, "Unable to determine terminal size: %s\n", err)
- }
- }
- p := last.i * b.cols / b.max
- if b.cols > 0 {
+ if cols, _, err := term.GetSize(int(os.Stderr.Fd())); err != nil {
+ fmt.Fprintf(os.Stderr, "Unable to determine terminal size: %s\n", err)
+ } else {
+ p := last.i * cols / b.max
fmt.Fprintf(os.Stderr, "%s>\n", strings.Repeat("=", max(p-1, 0)))
}
if eta < 0 {