From 989aa86679b491f048c29c5c1dbf773185aca66a Mon Sep 17 00:00:00 2001 From: Tyler Koenig Date: Wed, 20 May 2026 18:49:38 -0400 Subject: [PATCH] fix(tui): compute truncation budget from actual overhead, not magic numbers Tags wrapped past pane edge when detail split narrowed the list. Truncation used fixed constants that didn't account for real tag width. Now measures everything-except-body and gives body exactly what remains. --- internal/tui/absorb.go | 3 ++- internal/tui/cards.go | 3 ++- internal/tui/list.go | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/internal/tui/absorb.go b/internal/tui/absorb.go index dab374d..2a46b41 100644 --- a/internal/tui/absorb.go +++ b/internal/tui/absorb.go @@ -130,7 +130,8 @@ func renderAbsorbSource(e *db.Entity, maxWidth int) string { line := fmt.Sprintf("%s %s%s", glyph, body, tags) if maxWidth > 0 && len(stripAnsi(line)) > maxWidth { - body = truncate(body, maxWidth-6) + overhead := len(stripAnsi(line)) - len([]rune(body)) + body = truncate(body, maxWidth-overhead) line = fmt.Sprintf("%s %s%s", glyph, body, tags) } diff --git a/internal/tui/cards.go b/internal/tui/cards.go index ed38dfb..442d13d 100644 --- a/internal/tui/cards.go +++ b/internal/tui/cards.go @@ -340,7 +340,8 @@ func renderCard(e *db.Entity, maxWidth int) string { line := fmt.Sprintf("%s %s%s%s%s", glyph, body, affordStr, extraStr, useStr) if maxWidth > 0 && len(stripAnsi(line)) > maxWidth { - body = truncate(body, maxWidth-8) + overhead := len(stripAnsi(line)) - len([]rune(body)) + body = truncate(body, maxWidth-overhead) line = fmt.Sprintf("%s %s%s%s%s", glyph, body, affordStr, extraStr, useStr) } diff --git a/internal/tui/list.go b/internal/tui/list.go index 696912c..87192df 100644 --- a/internal/tui/list.go +++ b/internal/tui/list.go @@ -231,7 +231,8 @@ func renderEntity(e *db.Entity, maxWidth int) string { line := fmt.Sprintf("%s %s%s", glyph, body, extraStr) if maxWidth > 0 && len(stripAnsi(line)) > maxWidth { - body = truncate(body, maxWidth-6) + overhead := len(stripAnsi(line)) - len([]rune(body)) + body = truncate(body, maxWidth-overhead) line = fmt.Sprintf("%s %s%s", glyph, body, extraStr) }