diff options
| author | Rose Hogenson <rosehogenson@posteo.net> | 2025-04-06 09:24:20 -0700 |
|---|---|---|
| committer | Rose Hogenson <rosehogenson@posteo.net> | 2025-04-06 09:24:20 -0700 |
| commit | 6fc34c4c3cbb68f6f7cb8049a6d68bd315c07984 (patch) | |
| tree | b09e1b14e109519f3a4c1796995d92691461c16f | |
| parent | 57378c31cb26336c59114486ed357283fde73cfe (diff) | |
| download | progress-bar-6fc34c4c3cbb68f6f7cb8049a6d68bd315c07984.tar.zst | |
Fix terminal resize
| -rw-r--r-- | go.mod | 2 | ||||
| -rw-r--r-- | go.sum | 4 | ||||
| -rw-r--r-- | progress.go | 27 |
3 files changed, 14 insertions, 19 deletions
@@ -3,7 +3,7 @@ module gitlab.com/rhogenson/progress-bar go 1.24.1 require ( - gitlab.com/rhogenson/vecdeque v0.0.0-20250406001322-9e21d75e8d13 + gitlab.com/rhogenson/deque v0.0.0-20250406161547-43e0f85d8030 golang.org/x/term v0.31.0 ) @@ -1,5 +1,5 @@ -gitlab.com/rhogenson/vecdeque v0.0.0-20250406001322-9e21d75e8d13 h1:KzxZ53VHLj1w4DsYcbdIjNFPTcnc4UtBA79KoXkdgP0= -gitlab.com/rhogenson/vecdeque v0.0.0-20250406001322-9e21d75e8d13/go.mod h1:i++skCmDHJAQbyC5LqvJbehbEGCiO8EkrsPon6h0Jgo= +gitlab.com/rhogenson/deque v0.0.0-20250406161547-43e0f85d8030 h1:ElfzUwCcfm4HHxJkMfoEn5w8VOoI+XRYfa9Vdo7Plno= +gitlab.com/rhogenson/deque v0.0.0-20250406161547-43e0f85d8030/go.mod h1:+JcaVhyJ7VgoRMo4PsMgOCDoVnIOLts4CkDEAYkU4o4= golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= 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 { |
