tui: implement history navigation key handlers

This commit is contained in:
Luxferre
2026-03-22 18:31:01 +02:00
parent 2ae6e2b877
commit 04bacc19fb
+39
View File
@@ -353,6 +353,41 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
case tea.KeyCtrlJ:
m.textarea.InsertString("\n")
return m, nil
case tea.KeyUp:
if m.textarea.Line() == 0 {
userMsgs := m.userMessages()
if len(userMsgs) == 0 {
return m, nil
}
if m.historyIndex == -1 {
m.promptDraft = m.textarea.Value()
m.historyIndex = len(userMsgs) - 1
} else if m.historyIndex > 0 {
m.historyIndex--
} else {
return m, nil
}
m.textarea.SetValue(userMsgs[m.historyIndex])
m.textarea.CursorEnd()
return m, nil
}
case tea.KeyDown:
if m.textarea.Line() == m.textarea.LineCount()-1 {
if m.historyIndex == -1 {
return m, nil
}
userMsgs := m.userMessages()
if m.historyIndex < len(userMsgs)-1 {
m.historyIndex++
m.textarea.SetValue(userMsgs[m.historyIndex])
m.textarea.CursorStart()
} else {
m.historyIndex = -1
m.textarea.SetValue(m.promptDraft)
m.textarea.CursorStart()
}
return m, nil
}
case tea.KeyEnter:
v := m.textarea.Value()
if strings.TrimSpace(v) == "" || m.isThinking {
@@ -368,6 +403,8 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.currentReasoning = ""
m.transientSteps = nil
m.textarea.Reset()
m.historyIndex = -1
m.promptDraft = ""
m.updateViewportContent()
m.viewport.GotoBottom()
return m, nil
@@ -377,6 +414,8 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
Role: sidekick.MessageRoleUser,
Content: v,
})
m.historyIndex = -1
m.promptDraft = ""
m.currentStream = ""
m.currentReasoning = ""
m.transientSteps = nil