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:
|
case tea.KeyCtrlJ:
|
||||||
m.textarea.InsertString("\n")
|
m.textarea.InsertString("\n")
|
||||||
return m, nil
|
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:
|
case tea.KeyEnter:
|
||||||
v := m.textarea.Value()
|
v := m.textarea.Value()
|
||||||
if strings.TrimSpace(v) == "" || m.isThinking {
|
if strings.TrimSpace(v) == "" || m.isThinking {
|
||||||
@@ -368,6 +403,8 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
m.currentReasoning = ""
|
m.currentReasoning = ""
|
||||||
m.transientSteps = nil
|
m.transientSteps = nil
|
||||||
m.textarea.Reset()
|
m.textarea.Reset()
|
||||||
|
m.historyIndex = -1
|
||||||
|
m.promptDraft = ""
|
||||||
m.updateViewportContent()
|
m.updateViewportContent()
|
||||||
m.viewport.GotoBottom()
|
m.viewport.GotoBottom()
|
||||||
return m, nil
|
return m, nil
|
||||||
@@ -377,6 +414,8 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|||||||
Role: sidekick.MessageRoleUser,
|
Role: sidekick.MessageRoleUser,
|
||||||
Content: v,
|
Content: v,
|
||||||
})
|
})
|
||||||
|
m.historyIndex = -1
|
||||||
|
m.promptDraft = ""
|
||||||
m.currentStream = ""
|
m.currentStream = ""
|
||||||
m.currentReasoning = ""
|
m.currentReasoning = ""
|
||||||
m.transientSteps = nil
|
m.transientSteps = nil
|
||||||
|
|||||||
Reference in New Issue
Block a user