From 828f3bf730310b9f292385c265a0cc1f7abe6280 Mon Sep 17 00:00:00 2001 From: Wystan Schmidt Date: Mon, 29 Nov 2021 18:49:24 -0700 Subject: [PATCH 1/5] Added basic pacman customization --- examples/customization/pacman.go | 40 ++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 examples/customization/pacman.go diff --git a/examples/customization/pacman.go b/examples/customization/pacman.go new file mode 100644 index 0000000..22f263a --- /dev/null +++ b/examples/customization/pacman.go @@ -0,0 +1,40 @@ +package main + +import ( + "fmt" + "time" + + "github.com/k0kubun/go-ansi" + "github.com/schollz/progressbar/v3" +) + +func main() { + doneCh := make(chan struct{}) + + bar := progressbar.NewOptions(1000, + progressbar.OptionSetWriter(ansi.NewAnsiStdout()), + progressbar.OptionEnableColorCodes(true), + progressbar.OptionSetWidth(50), + progressbar.OptionSetTheme(progressbar.Theme{ + Saucer: " ", + SaucerHead: "[yellow]<[reset]", + SaucerPadding: "[white]•", + BarStart: "[blue]|[reset]", + BarEnd: "[blue]|[reset]", + }), + progressbar.OptionOnCompletion(func() { + doneCh <- struct{}{} + }), + ) + + go func() { + for i := 0; i < 1000; i++ { + bar.Add(1) + time.Sleep(5 * time.Millisecond) + } + }() + + // got notified that progress bar is complete. + <-doneCh + fmt.Println("\n ======= progress bar completed ==========\n") +} From 7f7240be0126ae1f841e91d6a8acfe6b3db39d16 Mon Sep 17 00:00:00 2001 From: Wystan Schmidt Date: Mon, 13 Dec 2021 18:49:38 -0700 Subject: [PATCH 2/5] Add an alternate saucer head to allow for an anmiated saucer head. --- progressbar.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/progressbar.go b/progressbar.go index 0697540..679f97d 100644 --- a/progressbar.go +++ b/progressbar.go @@ -39,6 +39,7 @@ type state struct { currentPercent int lastPercent int currentSaucerSize int + isAltSaucerHead bool lastShown time.Time startTime time.Time @@ -104,6 +105,7 @@ type config struct { // Theme defines the elements of the bar type Theme struct { Saucer string + AltSaucerHead string SaucerHead string SaucerPadding string BarStart string @@ -655,6 +657,7 @@ func renderProgressBar(c config, s *state) (int, error) { leftBrac := "" rightBrac := "" saucer := "" + saucerHead := "" bytesString := "" str := "" @@ -754,7 +757,15 @@ func renderProgressBar(c config, s *state) (int, error) { } else { saucer = strings.Repeat(c.theme.Saucer, s.currentSaucerSize-1) } - saucerHead := c.theme.SaucerHead + + if c.theme.AltSaucerHead != "" && s.isAltSaucerHead { + saucerHead = c.theme.AltSaucerHead + s.isAltSaucerHead = false + } else { + saucerHead = c.theme.SaucerHead + s.isAltSaucerHead = true + } + if saucerHead == "" || s.currentSaucerSize == c.width { // use the saucer for the saucer head if it hasn't been set // to preserve backwards compatibility From 8a0fe80f9f754eb9759b94e3ea46745b4bec23b4 Mon Sep 17 00:00:00 2001 From: Wystan Schmidt Date: Mon, 13 Dec 2021 18:51:40 -0700 Subject: [PATCH 3/5] Updated pacman customization with animated saucer head --- examples/customization/pacman.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/customization/pacman.go b/examples/customization/pacman.go index 22f263a..7aece4c 100644 --- a/examples/customization/pacman.go +++ b/examples/customization/pacman.go @@ -17,7 +17,8 @@ func main() { progressbar.OptionSetWidth(50), progressbar.OptionSetTheme(progressbar.Theme{ Saucer: " ", - SaucerHead: "[yellow]<[reset]", + AltSaucerHead: "[yellow]<[reset]", + SaucerHead: "[yellow]-[reset]", SaucerPadding: "[white]•", BarStart: "[blue]|[reset]", BarEnd: "[blue]|[reset]", @@ -30,7 +31,7 @@ func main() { go func() { for i := 0; i < 1000; i++ { bar.Add(1) - time.Sleep(5 * time.Millisecond) + time.Sleep(10 * time.Millisecond) } }() From 158f5e97435a0ff9c7fe3c9492029d3eeddead18 Mon Sep 17 00:00:00 2001 From: Wystan Schmidt Date: Tue, 14 Dec 2021 18:09:56 -0700 Subject: [PATCH 4/5] Refactor to include empty saucer head --- progressbar.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/progressbar.go b/progressbar.go index 679f97d..45c7783 100644 --- a/progressbar.go +++ b/progressbar.go @@ -758,18 +758,17 @@ func renderProgressBar(c config, s *state) (int, error) { saucer = strings.Repeat(c.theme.Saucer, s.currentSaucerSize-1) } + // Check if an alternate saucer head is set for animation if c.theme.AltSaucerHead != "" && s.isAltSaucerHead { saucerHead = c.theme.AltSaucerHead s.isAltSaucerHead = false - } else { - saucerHead = c.theme.SaucerHead - s.isAltSaucerHead = true - } - - if saucerHead == "" || s.currentSaucerSize == c.width { + } else if c.theme.SaucerHead == "" || s.currentSaucerSize == c.width { // use the saucer for the saucer head if it hasn't been set // to preserve backwards compatibility saucerHead = c.theme.Saucer + } else { + saucerHead = c.theme.SaucerHead + s.isAltSaucerHead = true } saucer += saucerHead } From 453e39c137856e3ebe9d75e2a4b477bbd0c03bb8 Mon Sep 17 00:00:00 2001 From: Wystan Schmidt Date: Tue, 14 Dec 2021 18:10:37 -0700 Subject: [PATCH 5/5] Moved pacman.go to its own directory --- examples/{customization/pacman.go => pacman/main.go} | 0 progressbar.go | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename examples/{customization/pacman.go => pacman/main.go} (100%) diff --git a/examples/customization/pacman.go b/examples/pacman/main.go similarity index 100% rename from examples/customization/pacman.go rename to examples/pacman/main.go diff --git a/progressbar.go b/progressbar.go index 45c7783..bfed794 100644 --- a/progressbar.go +++ b/progressbar.go @@ -39,7 +39,7 @@ type state struct { currentPercent int lastPercent int currentSaucerSize int - isAltSaucerHead bool + isAltSaucerHead bool lastShown time.Time startTime time.Time