mirror of
https://github.com/aljazceru/opencode.git
synced 2025-12-22 10:14:22 +01:00
fix(tui): preserve scroll position when reflowing due to message stream (#1716)
This commit is contained in:
@@ -210,7 +210,18 @@ func (m *messagesComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
m.clipboard = msg.clipboard
|
m.clipboard = msg.clipboard
|
||||||
m.loading = false
|
m.loading = false
|
||||||
m.tail = m.viewport.AtBottom()
|
m.tail = m.viewport.AtBottom()
|
||||||
|
|
||||||
|
// Preserve scroll across reflow
|
||||||
|
// if the user was at bottom, keep following; otherwise restore the previous offset.
|
||||||
|
wasAtBottom := m.viewport.AtBottom()
|
||||||
|
prevYOffset := m.viewport.YOffset
|
||||||
m.viewport = msg.viewport
|
m.viewport = msg.viewport
|
||||||
|
if wasAtBottom {
|
||||||
|
m.viewport.GotoBottom()
|
||||||
|
} else {
|
||||||
|
m.viewport.YOffset = prevYOffset
|
||||||
|
}
|
||||||
|
|
||||||
m.header = msg.header
|
m.header = msg.header
|
||||||
if m.dirty {
|
if m.dirty {
|
||||||
cmds = append(cmds, m.renderView())
|
cmds = append(cmds, m.renderView())
|
||||||
@@ -218,7 +229,6 @@ func (m *messagesComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
m.tail = m.viewport.AtBottom()
|
m.tail = m.viewport.AtBottom()
|
||||||
|
|
||||||
viewport, cmd := m.viewport.Update(msg)
|
viewport, cmd := m.viewport.Update(msg)
|
||||||
m.viewport = viewport
|
m.viewport = viewport
|
||||||
cmds = append(cmds, cmd)
|
cmds = append(cmds, cmd)
|
||||||
|
|||||||
Reference in New Issue
Block a user