| //go:build windows |
| // +build windows |
| |
| package pb |
| |
| import ( |
| "fmt" |
| "log" |
| "strings" |
| |
| "github.com/cheggaaa/pb/v3/termutil" |
| ) |
| |
| func (p *Pool) print(first bool) bool { |
| p.m.Lock() |
| defer p.m.Unlock() |
| var out string |
| if !first { |
| coords, err := termutil.GetCursorPos() |
| if err != nil { |
| log.Panic(err) |
| } |
| coords.Y -= int16(p.lastBarsCount) |
| if coords.Y < 0 { |
| coords.Y = 0 |
| } |
| coords.X = 0 |
| |
| err = termutil.SetCursorPos(coords) |
| if err != nil { |
| log.Panic(err) |
| } |
| } |
| cols, err := termutil.TerminalWidth() |
| if err != nil { |
| cols = defaultBarWidth |
| } |
| isFinished := true |
| for _, bar := range p.bars { |
| if !bar.IsFinished() { |
| isFinished = false |
| } |
| result := bar.String() |
| if r := cols - CellCount(result); r > 0 { |
| result += strings.Repeat(" ", r) |
| } |
| out += fmt.Sprintf("\r%s\n", result) |
| } |
| if p.Output != nil { |
| fmt.Fprint(p.Output, out) |
| } else { |
| fmt.Print(out) |
| } |
| p.lastBarsCount = len(p.bars) |
| return isFinished |
| } |