Display generation model in message header and other tweaks
Adjusted `ctrl+t` in chat view to toggle `showDetails` which toggles the display of system messages, message metadata (generation model), and tool call details Modified message selection update logic to skip messages that aren't shown
This commit is contained in:
@@ -12,17 +12,6 @@ import (
|
||||
)
|
||||
|
||||
func (m *Model) handleInput(msg tea.KeyMsg) tea.Cmd {
|
||||
switch msg.String() {
|
||||
case "ctrl+g":
|
||||
if m.state == pendingResponse {
|
||||
m.stopSignal <- struct{}{}
|
||||
return shared.KeyHandled(msg)
|
||||
}
|
||||
return func() tea.Msg {
|
||||
return shared.MsgViewChange(shared.ViewSettings)
|
||||
}
|
||||
}
|
||||
|
||||
switch m.focus {
|
||||
case focusInput:
|
||||
cmd := m.handleInputKey(msg)
|
||||
@@ -50,11 +39,19 @@ func (m *Model) handleInput(msg tea.KeyMsg) tea.Cmd {
|
||||
m.stopSignal <- struct{}{}
|
||||
return shared.KeyHandled(msg)
|
||||
}
|
||||
case "ctrl+g":
|
||||
if m.state == pendingResponse {
|
||||
m.stopSignal <- struct{}{}
|
||||
return shared.KeyHandled(msg)
|
||||
}
|
||||
return func() tea.Msg {
|
||||
return shared.MsgViewChange(shared.ViewSettings)
|
||||
}
|
||||
case "ctrl+p":
|
||||
m.persistence = !m.persistence
|
||||
return shared.KeyHandled(msg)
|
||||
case "ctrl+t":
|
||||
m.showToolResults = !m.showToolResults
|
||||
m.showDetails = !m.showDetails
|
||||
m.rebuildMessageCache()
|
||||
m.updateContent()
|
||||
return shared.KeyHandled(msg)
|
||||
@@ -72,6 +69,27 @@ func (m *Model) handleInput(msg tea.KeyMsg) tea.Cmd {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *Model) scrollSelection(dir int) {
|
||||
if m.selectedMessage + dir < 0 || m.selectedMessage + dir >= len(m.App.Messages) {
|
||||
return
|
||||
}
|
||||
|
||||
newIdx := m.selectedMessage
|
||||
for i := newIdx + dir; i >= 0 && i < len(m.App.Messages); i += dir{
|
||||
if !m.showDetails && m.App.Messages[i].Role.IsSystem() {
|
||||
continue
|
||||
}
|
||||
newIdx = i
|
||||
break
|
||||
}
|
||||
if newIdx != m.selectedMessage {
|
||||
m.selectedMessage = newIdx
|
||||
m.updateContent()
|
||||
yOffset := m.messageOffsets[m.selectedMessage]
|
||||
tuiutil.ScrollIntoView(&m.content, yOffset, m.content.Height/2)
|
||||
}
|
||||
}
|
||||
|
||||
// handleMessagesKey handles input when the messages pane is focused
|
||||
func (m *Model) handleMessagesKey(msg tea.KeyMsg) tea.Cmd {
|
||||
switch msg.String() {
|
||||
@@ -90,25 +108,19 @@ func (m *Model) handleMessagesKey(msg tea.KeyMsg) tea.Cmd {
|
||||
)
|
||||
}
|
||||
return nil
|
||||
case "ctrl+k":
|
||||
if m.selectedMessage > 0 && len(m.App.Messages) == len(m.messageOffsets) {
|
||||
m.selectedMessage--
|
||||
m.updateContent()
|
||||
offset := m.messageOffsets[m.selectedMessage]
|
||||
tuiutil.ScrollIntoView(&m.content, offset, m.content.Height/2)
|
||||
case "ctrl+k", "ctrl+up":
|
||||
if m.selectedMessage > 0 {
|
||||
m.scrollSelection(-1)
|
||||
}
|
||||
return shared.KeyHandled(msg)
|
||||
case "ctrl+j":
|
||||
if m.selectedMessage < len(m.App.Messages)-1 && len(m.App.Messages) == len(m.messageOffsets) {
|
||||
m.selectedMessage++
|
||||
m.updateContent()
|
||||
offset := m.messageOffsets[m.selectedMessage]
|
||||
tuiutil.ScrollIntoView(&m.content, offset, m.content.Height/2)
|
||||
case "ctrl+j", "ctrl+down":
|
||||
if m.selectedMessage < len(m.App.Messages)-1 {
|
||||
m.scrollSelection(1)
|
||||
}
|
||||
return shared.KeyHandled(msg)
|
||||
case "ctrl+h", "ctrl+l":
|
||||
case "ctrl+h", "ctrl+left", "ctrl+l", "ctrl+right":
|
||||
dir := model.CyclePrev
|
||||
if msg.String() == "ctrl+l" {
|
||||
if msg.String() == "ctrl+l" || msg.String() == "ctrl+right" {
|
||||
dir = model.CycleNext
|
||||
}
|
||||
|
||||
@@ -120,7 +132,7 @@ func (m *Model) handleMessagesKey(msg tea.KeyMsg) tea.Cmd {
|
||||
}
|
||||
return cmd
|
||||
case "ctrl+r":
|
||||
// resubmit the conversation with all messages up until and including the selected message
|
||||
// prompt the model with all messages up to and including the selected message
|
||||
if m.state == idle && m.selectedMessage < len(m.App.Messages) {
|
||||
m.App.Messages = m.App.Messages[:m.selectedMessage+1]
|
||||
m.messageCache = m.messageCache[:m.selectedMessage+1]
|
||||
@@ -130,7 +142,7 @@ func (m *Model) handleMessagesKey(msg tea.KeyMsg) tea.Cmd {
|
||||
return cmd
|
||||
}
|
||||
}
|
||||
return nil
|
||||
return nil
|
||||
}
|
||||
|
||||
// handleInputKey handles input when the input textarea is focused
|
||||
|
||||
Reference in New Issue
Block a user