From 630eea98cb50600f00bbb7194eb759bdab42a5a9 Mon Sep 17 00:00:00 2001 From: tauraamui Date: Fri, 7 Nov 2025 13:20:07 +0000 Subject: [PATCH] fix: pass through history open command into editor when in focus --- internal/tui/components/chat/editor/editor.go | 41 ++++++++++--------- internal/tui/page/chat/chat.go | 6 +++ 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/internal/tui/components/chat/editor/editor.go b/internal/tui/components/chat/editor/editor.go index d26016083c09084fe7e2eb873629852d38704864..4188535a8d1bffd6c7b3f9470bcd98d37ad4d43c 100644 --- a/internal/tui/components/chat/editor/editor.go +++ b/internal/tui/components/chat/editor/editor.go @@ -92,9 +92,9 @@ const ( maxFileResults = 25 ) -type loadHistoryMsg struct{} +type LoadHistoryMsg struct{} -type closeHistoryMsg struct{} +type CloseHistoryMsg struct{} type OpenEditorMsg struct { Text string @@ -187,6 +187,17 @@ func (m *editorCmp) Update(msg tea.Msg) (util.Model, tea.Cmd) { var cmd tea.Cmd var cmds []tea.Cmd switch msg := msg.(type) { + case LoadHistoryMsg: + msgs, err := m.getUserMessagesAsText() + if err != nil { + // TODO(tauraamui): handle error for loading history better in the UI later + } + m.history = InitialiseHistory(msgs) + m.textarea.SetValue("opened history state") + return m, nil + case CloseHistoryMsg: + m.history = nil + m.textarea.SetValue("closed history") // for easier temporary visual debugging case tea.WindowSizeMsg: return m, m.repositionCompletions case filepicker.FilePickedMsg: @@ -271,16 +282,6 @@ func (m *editorCmp) Update(msg tea.Msg) (util.Model, tea.Cmd) { case commands.ToggleYoloModeMsg: m.setEditorPrompt() return m, nil - case loadHistoryMsg: - msgs, err := m.getUserMessagesAsText() - if err != nil { - // TODO(tauraamui): handle error for loading history better in the UI later - } - m.history = InitialiseHistory(msgs) - m.textarea.SetValue("opened history state") - case closeHistoryMsg: - m.history = nil - m.textarea.SetValue("closed history") // for easier temporary visual debugging case tea.KeyPressMsg: cur := m.textarea.Cursor() curIdx := m.textarea.Width()*cur.Y + cur.X @@ -310,15 +311,8 @@ func (m *editorCmp) Update(msg tea.Msg) (util.Model, tea.Cmd) { m.attachments = nil return m, nil } - // history - if m.textarea.Focused() && key.Matches(msg, m.keyMap.Previous) || key.Matches(msg, m.keyMap.Next) { - // m.textarea.SetValue(m.stepOverHistory(m.getUserMessagesAsText, m.getDirectionFromKey(msg))) - if m.history == nil { - return m, util.CmdHandler(loadHistoryMsg{}) - } - } if key.Matches(msg, DeleteKeyMaps.Escape) && m.inHistoryMode() { - return m, util.CmdHandler(closeHistoryMsg{}) + return m, util.CmdHandler(CloseHistoryMsg{}) } rune := msg.Code if m.deleteMode && unicode.IsDigit(rune) { @@ -358,6 +352,13 @@ func (m *editorCmp) Update(msg tea.Msg) (util.Model, tea.Cmd) { return m, m.send() } } + // history + if m.textarea.Focused() && key.Matches(msg, m.keyMap.Previous) || key.Matches(msg, m.keyMap.Next) { + // m.textarea.SetValue(m.stepOverHistory(m.getUserMessagesAsText, m.getDirectionFromKey(msg))) + if m.history == nil { + cmds = append(cmds, util.CmdHandler(LoadHistoryMsg{})) + } + } } m.textarea, cmd = m.textarea.Update(msg) diff --git a/internal/tui/page/chat/chat.go b/internal/tui/page/chat/chat.go index f951de8677271dfbf034377afaa492f0d8824889..44f1fbf63015f9fca02f9917de23484551eca836 100644 --- a/internal/tui/page/chat/chat.go +++ b/internal/tui/page/chat/chat.go @@ -359,6 +359,12 @@ func (p *chatPage) Update(msg tea.Msg) (util.Model, tea.Cmd) { return p, util.ReportWarn("Agent is busy, please wait before starting a new session...") } return p, p.newSession() + case editor.LoadHistoryMsg: + if p.focusedPane == PanelTypeEditor { + u, cmd := p.editor.Update(msg) + p.editor = u.(editor.Editor) + cmds = append(cmds, cmd) + } case tea.KeyPressMsg: switch { case key.Matches(msg, p.keyMap.NewSession):