diff --git a/bar.go b/bar.go index f18ef96..475c3c3 100644 --- a/bar.go +++ b/bar.go @@ -390,32 +390,30 @@ } func (s *bState) draw(stat decor.Statistics) io.Reader { - if !s.trimSpace { + nlr := strings.NewReader("\n") + tw := stat.AvailableWidth + for _, d := range s.pDecorators { + s.bufP.WriteString(d.Decor(stat)) + } + stat.AvailableWidth -= runewidth.StringWidth(stripansi.Strip(s.bufP.String())) + if stat.AvailableWidth < 1 { + trunc := strings.NewReader(runewidth.Truncate(stripansi.Strip(s.bufP.String()), tw, "…")) + s.bufP.Reset() + return io.MultiReader(trunc, nlr) + } + + if !s.trimSpace && stat.AvailableWidth > 1 { stat.AvailableWidth -= 2 s.bufB.WriteByte(' ') defer s.bufB.WriteByte(' ') } - nlr := strings.NewReader("\n") - tw := stat.AvailableWidth - for _, d := range s.pDecorators { - str := d.Decor(stat) - stat.AvailableWidth -= runewidth.StringWidth(stripansi.Strip(str)) - s.bufP.WriteString(str) - } - if stat.AvailableWidth <= 0 { - trunc := strings.NewReader(runewidth.Truncate(stripansi.Strip(s.bufP.String()), tw, "…")) - s.bufP.Reset() - return io.MultiReader(trunc, s.bufB, nlr) - } - tw = stat.AvailableWidth for _, d := range s.aDecorators { - str := d.Decor(stat) - stat.AvailableWidth -= runewidth.StringWidth(stripansi.Strip(str)) - s.bufA.WriteString(str) - } - if stat.AvailableWidth <= 0 { + s.bufA.WriteString(d.Decor(stat)) + } + stat.AvailableWidth -= runewidth.StringWidth(stripansi.Strip(s.bufA.String())) + if stat.AvailableWidth < 1 { trunc := strings.NewReader(runewidth.Truncate(stripansi.Strip(s.bufA.String()), tw, "…")) s.bufA.Reset() return io.MultiReader(s.bufP, s.bufB, trunc, nlr) diff --git a/draw_test.go b/draw_test.go index 2553ca6..2be2547 100644 --- a/draw_test.go +++ b/draw_test.go @@ -24,22 +24,22 @@ name: "t,c{60,20}", total: 60, current: 20, - want: "… ", - }, - { - name: "t,c{60,20}trim", - total: 60, - current: 20, - trim: true, want: "", }, + { + name: "t,c{60,20}trim", + total: 60, + current: 20, + trim: true, + want: "", + }, }, 1: { { name: "t,c{60,20}", total: 60, current: 20, - want: "… ", + want: "", }, { name: "t,c{60,20}trim", diff --git a/internal/width.go b/internal/width.go index 216320f..7677e40 100644 --- a/internal/width.go +++ b/internal/width.go @@ -3,7 +3,7 @@ // CheckRequestedWidth checks that requested width doesn't overflow // available width func CheckRequestedWidth(requested, available int) int { - if requested <= 0 || requested >= available { + if requested < 1 || requested >= available { return available } return requested