feat: Improve editor detection with auto-discovery and better error messages (#3155)

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: rekram1-node <rekram1-node@users.noreply.github.com>
This commit is contained in:
Affaan Mustafa
2025-10-21 18:49:42 -07:00
committed by GitHub
parent 97c7e941eb
commit 8db5951287
2 changed files with 28 additions and 5 deletions

View File

@@ -1158,9 +1158,9 @@ func (a Model) executeCommand(command commands.Command) (tea.Model, tea.Cmd) {
// status.Warn("Agent is working, please wait...")
return a, nil
}
editor := os.Getenv("EDITOR")
editor := util.GetEditor()
if editor == "" {
return a, toast.NewErrorToast("No EDITOR set, can't open editor")
return a, toast.NewErrorToast("No editor found. Set EDITOR environment variable (e.g., export EDITOR=vim)")
}
value := a.editor.Value()
@@ -1404,10 +1404,9 @@ func (a Model) executeCommand(command commands.Command) (tea.Model, tea.Cmd) {
// Format to Markdown
markdownContent := formatConversationToMarkdown(messages)
// Check if EDITOR is set
editor := os.Getenv("EDITOR")
editor := util.GetEditor()
if editor == "" {
return a, toast.NewErrorToast("No EDITOR set, can't open editor")
return a, toast.NewErrorToast("No editor found. Set EDITOR environment variable (e.g., export EDITOR=vim)")
}
// Create and write to temp file

View File

@@ -3,6 +3,8 @@ package util
import (
"log/slog"
"os"
"os/exec"
"runtime"
"strings"
"time"
@@ -45,3 +47,25 @@ func Measure(tag string) func(...any) {
slog.Debug(tag, args...)
}
}
func GetEditor() string {
if editor := os.Getenv("VISUAL"); editor != "" {
return editor
}
if editor := os.Getenv("EDITOR"); editor != "" {
return editor
}
commonEditors := []string{"vim", "nvim", "zed", "code", "cursor", "vi", "nano"}
if runtime.GOOS == "windows" {
commonEditors = []string{"vim", "nvim", "zed", "code.cmd", "cursor.cmd", "notepad.exe", "vi", "nano"}
}
for _, editor := range commonEditors {
if _, err := exec.LookPath(editor); err == nil {
return editor
}
}
return ""
}