diff options
author | Robin Jarry <robin@jarry.cc> | 2023-03-04 01:37:18 +0100 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2023-03-04 18:03:28 +0100 |
commit | a603d3de038ae75abddd33078a1c8c56614eaf0d (patch) | |
tree | c69796b042f4669df141793968bfe637b92317ef /lib/parse/ansi.go | |
parent | d5e47e300a42ed64c17e4b391b77234e22c9f915 (diff) | |
download | aerc-a603d3de038ae75abddd33078a1c8c56614eaf0d.tar.gz |
table: fix center padding
When a column has ALIGN_CENTER and the number of white space character
of padding is not a multiple of two, the last cell(character) is not
padded and that can cause coloring glitches. Make sure to pad all the
way.
Fixes: 49de9b09cacc ("ui: parse strings for ansi styles")
Signed-off-by: Robin Jarry <robin@jarry.cc>
Acked-by: Tim Culverhouse <tim@timculverhouse.com>
Diffstat (limited to 'lib/parse/ansi.go')
-rw-r--r-- | lib/parse/ansi.go | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/lib/parse/ansi.go b/lib/parse/ansi.go index a9a46fdd..94f0c4fc 100644 --- a/lib/parse/ansi.go +++ b/lib/parse/ansi.go @@ -67,9 +67,30 @@ func (rb *RuneBuffer) Write(r rune, style tcell.Style) { } // Prepend inserts the rune at the beginning of the rune buffer -func (rb *RuneBuffer) Prepend(r rune, style tcell.Style) { - w := runewidth.RuneWidth(r) - rb.buf = append([]*StyledRune{{r, w, style}}, rb.buf...) +func (rb *RuneBuffer) PadLeft(width int, r rune, style tcell.Style) { + w := rb.Len() + if w >= width { + return + } + w = width - w + for w > 0 { + ww := runewidth.RuneWidth(r) + w -= ww + rb.buf = append([]*StyledRune{{r, ww, style}}, rb.buf...) + } +} + +func (rb *RuneBuffer) PadRight(width int, r rune, style tcell.Style) { + w := rb.Len() + if w >= width { + return + } + w = width - w + for w > 0 { + ww := runewidth.RuneWidth(r) + w -= ww + rb.buf = append(rb.buf, &StyledRune{r, ww, style}) + } } // String outputs a styled-string using TERM=xterm-256color |