diff options
| author | Dax Raad <[email protected]> | 2025-07-19 15:00:11 -0400 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-07-19 15:00:11 -0400 |
| commit | 4699739814cc7e57a0eef71990bd1ef502cc33c8 (patch) | |
| tree | 1fc2a609a1b96d51bf5254177697c0c927b6818c /packages/tui/internal/components | |
| parent | c1d87c32a2df8f9e27270ac46107f767caf38a1f (diff) | |
| download | opencode-4699739814cc7e57a0eef71990bd1ef502cc33c8.tar.gz opencode-4699739814cc7e57a0eef71990bd1ef502cc33c8.zip | |
shitty hack for terrible charm bubbletea performance
Diffstat (limited to 'packages/tui/internal/components')
| -rw-r--r-- | packages/tui/internal/components/chat/messages.go | 24 | ||||
| -rw-r--r-- | packages/tui/internal/components/dialog/help.go | 2 | ||||
| -rw-r--r-- | packages/tui/internal/components/fileviewer/fileviewer.go | 2 |
3 files changed, 19 insertions, 9 deletions
diff --git a/packages/tui/internal/components/chat/messages.go b/packages/tui/internal/components/chat/messages.go index 11a3bcd9f..9b6920adf 100644 --- a/packages/tui/internal/components/chat/messages.go +++ b/packages/tui/internal/components/chat/messages.go @@ -2,9 +2,9 @@ package chat import ( "fmt" + "log/slog" "strings" - "github.com/charmbracelet/bubbles/v2/viewport" tea "github.com/charmbracelet/bubbletea/v2" "github.com/charmbracelet/lipgloss/v2" "github.com/sst/opencode-sdk-go" @@ -15,6 +15,7 @@ import ( "github.com/sst/opencode/internal/styles" "github.com/sst/opencode/internal/theme" "github.com/sst/opencode/internal/util" + "github.com/sst/opencode/internal/viewport" ) type MessagesComponent interface { @@ -99,8 +100,8 @@ func (m *messagesComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) { m.lineCount = msg.lineCount m.rendering = false m.loading = false - m.viewport.SetHeight(m.height - lipgloss.Height(m.header)) - m.viewport.SetContent(msg.content) + m.tail = m.viewport.AtBottom() + m.viewport = msg.viewport if m.tail { m.viewport.GotoBottom() } @@ -109,16 +110,16 @@ func (m *messagesComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } } + m.tail = m.viewport.AtBottom() viewport, cmd := m.viewport.Update(msg) m.viewport = viewport - m.tail = m.viewport.AtBottom() cmds = append(cmds, cmd) return m, tea.Batch(cmds...) } type renderCompleteMsg struct { - content string + viewport viewport.Model partCount int lineCount int } @@ -127,6 +128,7 @@ func (m *messagesComponent) renderView() tea.Cmd { m.header = m.renderHeader() if m.rendering { + slog.Debug("pending render, skipping") m.dirty = true return func() tea.Msg { return nil @@ -135,6 +137,8 @@ func (m *messagesComponent) renderView() tea.Cmd { m.dirty = false m.rendering = true + viewport := m.viewport + return func() tea.Msg { measure := util.Measure("messages.renderView") defer measure() @@ -396,8 +400,11 @@ func (m *messagesComponent) renderView() tea.Cmd { } content := "\n" + strings.Join(blocks, "\n\n") + viewport.SetHeight(m.height - lipgloss.Height(m.header)) + viewport.SetContent(content) + return renderCompleteMsg{ - content: content, + viewport: viewport, partCount: partCount, lineCount: lineCount, } @@ -562,9 +569,12 @@ func (m *messagesComponent) View() string { ) } + measure := util.Measure("messages.View") + viewport := m.viewport.View() + measure() return styles.NewStyle(). Background(t.Background()). - Render(m.header + "\n" + m.viewport.View()) + Render(m.header + "\n" + viewport) } func (m *messagesComponent) Reload() tea.Cmd { diff --git a/packages/tui/internal/components/dialog/help.go b/packages/tui/internal/components/dialog/help.go index 80123165a..15931724b 100644 --- a/packages/tui/internal/components/dialog/help.go +++ b/packages/tui/internal/components/dialog/help.go @@ -1,13 +1,13 @@ package dialog import ( - "github.com/charmbracelet/bubbles/v2/viewport" tea "github.com/charmbracelet/bubbletea/v2" "github.com/sst/opencode/internal/app" commandsComponent "github.com/sst/opencode/internal/components/commands" "github.com/sst/opencode/internal/components/modal" "github.com/sst/opencode/internal/layout" "github.com/sst/opencode/internal/theme" + "github.com/sst/opencode/internal/viewport" ) type helpDialog struct { diff --git a/packages/tui/internal/components/fileviewer/fileviewer.go b/packages/tui/internal/components/fileviewer/fileviewer.go index 6627bc3f0..3fa333f4b 100644 --- a/packages/tui/internal/components/fileviewer/fileviewer.go +++ b/packages/tui/internal/components/fileviewer/fileviewer.go @@ -4,7 +4,6 @@ import ( "fmt" "strings" - "github.com/charmbracelet/bubbles/v2/viewport" tea "github.com/charmbracelet/bubbletea/v2" "github.com/sst/opencode/internal/app" @@ -15,6 +14,7 @@ import ( "github.com/sst/opencode/internal/styles" "github.com/sst/opencode/internal/theme" "github.com/sst/opencode/internal/util" + "github.com/sst/opencode/internal/viewport" ) type DiffStyle int |
