From 71ce47ca37566be8dc390434df4cd01422298094 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Mon, 29 Jun 2026 04:41:40 -0400 Subject: fix: long fields truncated better in tables --- internal/color/color.go | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'internal/color') diff --git a/internal/color/color.go b/internal/color/color.go index 92535d1..8e301e4 100644 --- a/internal/color/color.go +++ b/internal/color/color.go @@ -180,12 +180,23 @@ func VisibleLen(s string) int { return utf8.RuneCountInString(ansiRe.ReplaceAllString(s, "")) } +// Ellipsis returns a Unicode ellipsis character when unicode is true, +// or the ASCII "..." otherwise. +func Ellipsis(unicode bool) string { + if unicode { + return "\u2026" + } + return "..." +} + // TruncateVisible truncates s to at most maxVisible visible characters, // preserving ANSI SGR codes. Assumes cells follow the common pattern -// "\x1b[...mTEXT\x1b[0m" or are plain text. Appends "..." when truncated. -func TruncateVisible(s string, maxVisible int) string { - if maxVisible < 3 { - maxVisible = 3 +// "\x1b[...mTEXT\x1b[0m" or are plain text. Appends an ellipsis when truncated. +func TruncateVisible(s string, maxVisible int, unicode bool) string { + ellipsis := Ellipsis(unicode) + ellipLen := utf8.RuneCountInString(ellipsis) + if maxVisible < ellipLen { + maxVisible = ellipLen } if VisibleLen(s) <= maxVisible { return s @@ -201,12 +212,12 @@ func TruncateVisible(s string, maxVisible int) string { rest = rest[:len(rest)-len(Reset)] } runes := []rune(rest) - budget := maxVisible - 3 + budget := maxVisible - ellipLen if budget < 0 { budget = 0 } if len(runes) > budget { - rest = string(runes[:budget]) + "..." + rest = string(runes[:budget]) + ellipsis } return pre + rest + suf } -- cgit v1.2.3