mirror of
https://github.com/aljazceru/opencode.git
synced 2026-01-07 18:04:54 +01:00
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:
@@ -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
|
||||
|
||||
@@ -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 ""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user