@@ -1,14 +1,12 @@
11package editor
22
33import (
4− "context"
54 "errors"
65 "fmt"
76 "math/rand"
87 "net/http"
98 "os"
109 "path/filepath"
11− "runtime"
1210 "slices"
1311 "strings"
1412 "unicode"
@@ -32,6 +30,7 @@ import (
3230 "github.com/charmbracelet/crush/internal/tui/styles"
3331 "github.com/charmbracelet/crush/internal/tui/util"
3432 "github.com/charmbracelet/x/ansi"
33+ "github.com/charmbracelet/x/editor"
3534)
3635
3736type Editor interface {
@@ -94,16 +93,6 @@ type OpenEditorMsg struct {
9493}
9594
9695func (m *editorCmp) openEditor(value string) tea.Cmd {
97− editor := os.Getenv("EDITOR")
98− if editor == "" {
99− // Use platform-appropriate default editor
100− if runtime.GOOS == "windows" {
101− editor = "notepad"
102− } else {
103− editor = "nvim"
104− }
105− }
106−
10796 tmpfile, err := os.CreateTemp("", "msg_*.md")
10897 if err != nil {
10998 return util.ReportError(err)
@@ -112,8 +101,18 @@ func (m *editorCmp) openEditor(value string) tea.Cmd {
112101 if _, err := tmpfile.WriteString(value); err != nil {
113102 return util.ReportError(err)
114103 }
115− cmdStr := editor + " " + tmpfile.Name()
116− return util.ExecShell(context.TODO(), cmdStr, func(err error) tea.Msg {
104+ cmd, err := editor.Command(
105+ "crush",
106+ tmpfile.Name(),
107+ editor.AtPosition(
108+ m.textarea.Line()+1,
109+ m.textarea.Column()+1,
110+ ),
111+ )
112+ if err != nil {
113+ return util.ReportError(err)
114+ }
115+ return tea.ExecProcess(cmd, func(err error) tea.Msg {
117116 if err != nil {
118117 return util.ReportError(err)
119118 }