diff options
| author | adamdottv <[email protected]> | 2025-07-01 07:57:31 -0500 |
|---|---|---|
| committer | adamdottv <[email protected]> | 2025-07-01 07:57:45 -0500 |
| commit | 33b5fe236a204a3d1d935a94e1d1d5f3a6f312a8 (patch) | |
| tree | ae9ad03002ee312652497539e9f9c668e235922e /packages/tui/internal/components/chat | |
| parent | d56991006c8c94b954bf1b1734280719fe3be239 (diff) | |
| download | opencode-33b5fe236a204a3d1d935a94e1d1d5f3a6f312a8.tar.gz opencode-33b5fe236a204a3d1d935a94e1d1d5f3a6f312a8.zip | |
fix(tui): better message rendering performance
Diffstat (limited to 'packages/tui/internal/components/chat')
| -rw-r--r-- | packages/tui/internal/components/chat/messages.go | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/packages/tui/internal/components/chat/messages.go b/packages/tui/internal/components/chat/messages.go index 8a2d0db04..86779439b 100644 --- a/packages/tui/internal/components/chat/messages.go +++ b/packages/tui/internal/components/chat/messages.go @@ -104,14 +104,15 @@ func (m *messagesComponent) renderView() { defer measure("messageCount", len(m.app.Messages)) t := theme.CurrentTheme() - blocks := make([]string, 0) align := lipgloss.Center width := layout.Current.Container.Width - for _, message := range m.app.Messages { + sb := strings.Builder{} + util.WriteStringsPar(&sb, m.app.Messages, func(message opencode.Message) string { var content string var cached bool + blocks := make([]string, 0) switch message.Role { case opencode.MessageRoleUser: @@ -224,7 +225,6 @@ func (m *messagesComponent) renderView() { } } } - } error := "" @@ -247,20 +247,14 @@ func (m *messagesComponent) renderView() { ) blocks = append(blocks, error) } - } - centered := []string{} - for _, block := range blocks { - centered = append(centered, lipgloss.PlaceHorizontal( - m.width, - lipgloss.Center, - block+"\n", - styles.WhitespaceStyle(t.Background()), - )) - } + return strings.Join(blocks, "\n\n") + }) + + content := sb.String() m.viewport.SetHeight(m.height - lipgloss.Height(m.header()) + 1) - m.viewport.SetContent("\n" + strings.Join(centered, "\n")) + m.viewport.SetContent("\n" + content) } func (m *messagesComponent) header() string { |
