Initial commit
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
package tui
|
||||
|
||||
import (
|
||||
"os/exec"
|
||||
)
|
||||
|
||||
// candidateEditors is the ordered list shown in the picker.
|
||||
// Only editors actually found on PATH are offered.
|
||||
var candidateEditors = []struct {
|
||||
bin string // executable name
|
||||
label string // human-readable label
|
||||
}{
|
||||
{"nvim", "Neovim"},
|
||||
{"vim", "Vim"},
|
||||
{"vi", "Vi"},
|
||||
{"nano", "Nano"},
|
||||
{"micro", "Micro"},
|
||||
{"hx", "Helix"},
|
||||
{"emacs", "Emacs (terminal)"},
|
||||
{"code", "VS Code (code --wait)"},
|
||||
{"gedit", "Gedit"},
|
||||
{"kate", "Kate"},
|
||||
}
|
||||
|
||||
type editorChoice struct {
|
||||
bin string
|
||||
label string
|
||||
// For VS Code we need the --wait flag so the terminal blocks until closed.
|
||||
args []string
|
||||
}
|
||||
|
||||
// availableEditors returns only the editors found on the current PATH.
|
||||
func availableEditors() []editorChoice {
|
||||
var found []editorChoice
|
||||
for _, c := range candidateEditors {
|
||||
if path, err := exec.LookPath(c.bin); err == nil {
|
||||
choice := editorChoice{bin: path, label: c.label}
|
||||
if c.bin == "code" {
|
||||
choice.args = []string{"--wait"}
|
||||
}
|
||||
found = append(found, choice)
|
||||
}
|
||||
}
|
||||
return found
|
||||
}
|
||||
|
||||
// editorCommand returns (binary, extraArgs) for a saved editor string.
|
||||
// e.g. "code --wait" → ("code", ["--wait"])
|
||||
func editorCommand(saved string) (string, []string) {
|
||||
if saved == "" {
|
||||
return "", nil
|
||||
}
|
||||
// Handle "code --wait" style strings stored in config
|
||||
parts := splitArgs(saved)
|
||||
if len(parts) == 1 {
|
||||
return parts[0], nil
|
||||
}
|
||||
return parts[0], parts[1:]
|
||||
}
|
||||
|
||||
func splitArgs(s string) []string {
|
||||
var out []string
|
||||
cur := ""
|
||||
for _, r := range s {
|
||||
if r == ' ' {
|
||||
if cur != "" {
|
||||
out = append(out, cur)
|
||||
cur = ""
|
||||
}
|
||||
} else {
|
||||
cur += string(r)
|
||||
}
|
||||
}
|
||||
if cur != "" {
|
||||
out = append(out, cur)
|
||||
}
|
||||
return out
|
||||
}
|
||||
Reference in New Issue
Block a user