fix(tui): preserve scroll position when reflowing due to message stream (#1716)

This commit is contained in:
Yihui Khuu
2025-08-09 04:14:09 +10:00
committed by GitHub
parent 8c173e18b7
commit fe26b4a7b1

View File

@@ -210,7 +210,18 @@ func (m *messagesComponent) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.clipboard = msg.clipboard
m.loading = false
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
if wasAtBottom {
m.viewport.GotoBottom()
} else {
m.viewport.YOffset = prevYOffset
}
m.header = msg.header
if m.dirty {
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()
viewport, cmd := m.viewport.Update(msg)
m.viewport = viewport
cmds = append(cmds, cmd)