tui: implement history navigation key handlers
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user