draw truncate fix
Vladimir Bauer
6 years ago
| 384 | 384 | } |
| 385 | 385 | |
| 386 | 386 | func (s *bState) draw(stat decor.Statistics) io.Reader { |
| 387 | btrim, tw := 0, stat.AvailableWidth | |
| 388 | 387 | if !s.trimSpace { |
| 389 | btrim = 2 | |
| 390 | stat.AvailableWidth -= btrim | |
| 388 | stat.AvailableWidth -= 2 | |
| 391 | 389 | s.bufB.WriteByte(' ') |
| 392 | 390 | defer s.bufB.WriteByte(' ') |
| 393 | 391 | } |
| 394 | 392 | |
| 395 | 393 | nlr := strings.NewReader("\n") |
| 394 | tw := stat.AvailableWidth | |
| 396 | 395 | for _, d := range s.pDecorators { |
| 397 | 396 | str := d.Decor(stat) |
| 398 | 397 | stat.AvailableWidth -= runewidth.StringWidth(stripansi.Strip(str)) |
| 399 | 398 | s.bufP.WriteString(str) |
| 400 | 399 | } |
| 401 | 400 | if stat.AvailableWidth <= 0 { |
| 402 | trunc := strings.NewReader(runewidth.Truncate(stripansi.Strip(s.bufP.String()), tw-btrim, "…")) | |
| 401 | trunc := strings.NewReader(runewidth.Truncate(stripansi.Strip(s.bufP.String()), tw, "…")) | |
| 403 | 402 | return io.MultiReader(trunc, s.bufB, nlr) |
| 404 | 403 | } |
| 405 | 404 | |
| 410 | 409 | s.bufA.WriteString(str) |
| 411 | 410 | } |
| 412 | 411 | if stat.AvailableWidth <= 0 { |
| 413 | trunc := strings.NewReader(runewidth.Truncate(stripansi.Strip(s.bufA.String()), tw-btrim, "…")) | |
| 412 | trunc := strings.NewReader(runewidth.Truncate(stripansi.Strip(s.bufA.String()), tw, "…")) | |
| 414 | 413 | return io.MultiReader(s.bufP, s.bufB, trunc, nlr) |
| 415 | 414 | } |
| 416 | 415 | |