summaryrefslogtreecommitdiffhomepage
path: root/packages/tui/internal/components
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-07-19 15:00:11 -0400
committerDax Raad <[email protected]>2025-07-19 15:00:11 -0400
commit4699739814cc7e57a0eef71990bd1ef502cc33c8 (patch)
tree1fc2a609a1b96d51bf5254177697c0c927b6818c /packages/tui/internal/components
parentc1d87c32a2df8f9e27270ac46107f767caf38a1f (diff)
downloadopencode-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.go24
-rw-r--r--packages/tui/internal/components/dialog/help.go2
-rw-r--r--packages/tui/internal/components/fileviewer/fileviewer.go2
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