mirror of
https://github.com/charmbracelet/bubbles.git
synced 2026-07-22 11:39:28 -06:00
fix(table): use ansi.Truncate instead of runewidth.Truncate (#884)
`runewidth.Truncate` does not consider terminal escape characters - this means that if a table cell contains funky characters, then it will be incorrectly truncated. Signed-off-by: Justin Chadwell <me@jedevc.com>
This commit is contained in:
parent
cc76d4176d
commit
d004225e8c
@ -9,7 +9,7 @@ import (
|
||||
"charm.land/bubbles/v2/viewport"
|
||||
tea "charm.land/bubbletea/v2"
|
||||
"charm.land/lipgloss/v2"
|
||||
"github.com/mattn/go-runewidth"
|
||||
"github.com/charmbracelet/x/ansi"
|
||||
)
|
||||
|
||||
// Model defines a state for the table widget.
|
||||
@ -422,7 +422,7 @@ func (m Model) headersView() string {
|
||||
continue
|
||||
}
|
||||
style := lipgloss.NewStyle().Width(col.Width).MaxWidth(col.Width).Inline(true)
|
||||
renderedCell := style.Render(runewidth.Truncate(col.Title, col.Width, "…"))
|
||||
renderedCell := style.Render(ansi.Truncate(col.Title, col.Width, "…"))
|
||||
s = append(s, m.styles.Header.Render(renderedCell))
|
||||
}
|
||||
return lipgloss.JoinHorizontal(lipgloss.Top, s...)
|
||||
@ -435,7 +435,7 @@ func (m *Model) renderRow(r int) string {
|
||||
continue
|
||||
}
|
||||
style := lipgloss.NewStyle().Width(m.cols[i].Width).MaxWidth(m.cols[i].Width).Inline(true)
|
||||
renderedCell := m.styles.Cell.Render(style.Render(runewidth.Truncate(value, m.cols[i].Width, "…")))
|
||||
renderedCell := m.styles.Cell.Render(style.Render(ansi.Truncate(value, m.cols[i].Width, "…")))
|
||||
s = append(s, renderedCell)
|
||||
}
|
||||
|
||||
|
||||
@ -288,6 +288,21 @@ func TestModel_RenderRow(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestModel_RenderRow_AnsiWidth(t *testing.T) {
|
||||
value := "\x1b[31mABCDEFGH\x1b[0m"
|
||||
table := &Model{
|
||||
rows: []Row{{value}},
|
||||
cols: []Column{{Title: "col1", Width: 8}},
|
||||
styles: Styles{Cell: lipgloss.NewStyle()},
|
||||
}
|
||||
|
||||
got := ansi.Strip(table.renderRow(0))
|
||||
want := "ABCDEFGH"
|
||||
if got != want {
|
||||
t.Fatalf("\n\nWant: \n%s\n\nGot: \n%s\n", want, got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTableAlignment(t *testing.T) {
|
||||
t.Run("No border", func(t *testing.T) {
|
||||
biscuits := New(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user