diff --git a/internal/ui/replay/update.go b/internal/ui/replay/update.go index 0f821ef..27f785f 100644 --- a/internal/ui/replay/update.go +++ b/internal/ui/replay/update.go @@ -181,6 +181,9 @@ func (m Model) updateNormalMode(msg tea.KeyPressMsg) (tea.Model, tea.Cmd) { case key.Matches(msg, r.EditExt): if len(m.entries) > 0 { + if m.focusedPanel == panelResponse { + return m, util.OpenExternalEditorView(m.entries[m.cursor].ResponseRaw) + } return m, util.OpenExternalEditor(m.entries[m.cursor].RequestRaw) } diff --git a/internal/util/editor.go b/internal/util/editor.go index d729d08..eee7c0d 100644 --- a/internal/util/editor.go +++ b/internal/util/editor.go @@ -15,7 +15,7 @@ type EditorFinishedMsg struct { Err error } -func OpenExternalEditor(content string) tea.Cmd { +func resolveEditor() string { editor := config.Global.App.ExternalEditor if editor == "" { editor = os.Getenv("EDITOR") @@ -23,6 +23,10 @@ func OpenExternalEditor(content string) tea.Cmd { if editor == "" { editor = "vi" } + return editor +} + +func openWithEditor(content string, callback func(string, error) tea.Msg) tea.Cmd { f, err := os.CreateTemp("", "spilltea-*.http") if err != nil { return nil @@ -32,8 +36,14 @@ func OpenExternalEditor(content string) tea.Cmd { log.Printf("editor: writing temp file: %v", err) } f.Close() - return tea.ExecProcess(exec.Command(editor, tmpPath), func(err error) tea.Msg { + return tea.ExecProcess(exec.Command(resolveEditor(), tmpPath), func(err error) tea.Msg { defer os.Remove(tmpPath) + return callback(tmpPath, err) + }) +} + +func OpenExternalEditor(content string) tea.Cmd { + return openWithEditor(content, func(tmpPath string, err error) tea.Msg { if err != nil { return EditorFinishedMsg{Err: err} } @@ -44,3 +54,9 @@ func OpenExternalEditor(content string) tea.Cmd { return EditorFinishedMsg{Content: string(data)} }) } + +func OpenExternalEditorView(content string) tea.Cmd { + return openWithEditor(content, func(_ string, _ error) tea.Msg { + return nil + }) +}