@@ -1,14 +1,12 @@
1package editor
1package editor
7 "math/rand"
6 "math/rand"
10 "path/filepath"
9 "path/filepath"
@@ -32,6 +30,7 @@ import (
32 "github.com/charmbracelet/crush/internal/tui/styles"
30 "github.com/charmbracelet/crush/internal/tui/styles"
33 "github.com/charmbracelet/crush/internal/tui/util"
31 "github.com/charmbracelet/crush/internal/tui/util"
34 "github.com/charmbracelet/x/ansi"
32 "github.com/charmbracelet/x/ansi"
33+ "github.com/charmbracelet/x/editor"
37type Editor interface {
36type Editor interface {
@@ -94,16 +93,6 @@ type OpenEditorMsg struct {
96func (m *editorCmp) openEditor(value string) tea.Cmd {
95func (m *editorCmp) openEditor(value string) tea.Cmd {
97− editor := os.Getenv("EDITOR")
99− // Use platform-appropriate default editor
100− if runtime.GOOS == "windows" {
107 tmpfile, err := os.CreateTemp("", "msg_*.md")
96 tmpfile, err := os.CreateTemp("", "msg_*.md")
108 if err != nil {
97 if err != nil {
109 return util.ReportError(err)
98 return util.ReportError(err)
@@ -112,8 +101,18 @@ func (m *editorCmp) openEditor(value string) tea.Cmd {
112 if _, err := tmpfile.WriteString(value); err != nil {
101 if _, err := tmpfile.WriteString(value); err != nil {
113 return util.ReportError(err)
102 return util.ReportError(err)
104+ cmd, err := editor.Command(
115− cmdStr := editor + " " + tmpfile.Name()
106+ tmpfile.Name(),
116− return util.ExecShell(context.TODO(), cmdStr, func(err error) tea.Msg {
107+ editor.AtPosition(
108+ m.textarea.Line()+1,
109+ m.textarea.Column()+1,
113+ return util.ReportError(err)
115+ return tea.ExecProcess(cmd, func(err error) tea.Msg {
117 if err != nil {
116 if err != nil {
118 return util.ReportError(err)
117 return util.ReportError(err)