diff --git a/internal/tui/components/chat/messages/messages.go b/internal/tui/components/chat/messages/messages.go index c7b69756d4e631ed4eb230cad4c5d001f06e4e38..e4def66708c3647e5aafd4562a8dc66323dd05c2 100644 --- a/internal/tui/components/chat/messages/messages.go +++ b/internal/tui/components/chat/messages/messages.go @@ -207,27 +207,13 @@ func (m *messageCmp) renderUserMessage() string { attachments := make([]string, len(m.message.BinaryContent())) for i, attachment := range m.message.BinaryContent() { + const maxFilenameWidth = 10 filename := filepath.Base(attachment.Path) - var displayFilename string - runes := []rune(filename) - - const truncateAtChars = 7 - const truncateSuffix = "..." - - // If the filename is too long, truncate it to fit within the maximum - // width we’ve chosen. - if lipgloss.Width(filename) > truncateAtChars+lipgloss.Width(truncateSuffix) { - displayFilename = fmt.Sprintf( - " %s %s%s ", - styles.DocumentIcon, - string(runes[0:truncateAtChars]), - truncateSuffix, - ) - } else { - displayFilename = fmt.Sprintf(" %s %s ", styles.DocumentIcon, filename) - } - - attachments[i] = attachmentStyles.Render(displayFilename) + attachments[i] = attachmentStyles.Render(fmt.Sprintf( + " %s %s ", + styles.DocumentIcon, + ansi.Truncate(filename, maxFilenameWidth, "..."), + )) } if len(attachments) > 0 {