git-ea/cmd/ide.go

79 lines
1.5 KiB
Go

package cmd
import (
"context"
"flag"
"os"
"os/exec"
"github.com/AlecAivazis/survey/v2"
"github.com/peterbourgon/ff/v3/ffcli"
)
func (h *Handler) IDE() *ffcli.Command {
fs := flag.NewFlagSet("ide", flag.ContinueOnError)
guiFlag := fs.Bool("gui", false, "Prefer GUI editor")
fs.BoolVar(guiFlag, "g", *guiFlag, "--gui")
return &ffcli.Command{
Name: "ide",
FlagSet: fs,
ShortUsage: "ide <branch>",
ShortHelp: "ide starts an IDE for `branch`",
Exec: func(ctx context.Context, args []string) error {
if err := h.checkInit(); err != nil {
return err
}
var branch string
if len(args) > 0 {
branch = args[0]
} else {
opts, err := h.Config.Branches()
if err != nil {
return err
}
if err := survey.AskOne(&survey.Select{
Message: "Branch to open",
Options: opts,
}, &branch); err != nil {
return err
}
}
path := h.Config.WorkspaceBranch(branch)
cmd := exec.Command(getIDE(*guiFlag), path)
cmd.Dir = path
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
},
}
}
func getIDE(preferGUI bool) string {
term := []string{
"hx",
"nvim",
}
gui := []string{
"lapce",
"goland",
}
def := []string{
"vi",
}
ides := append(term, gui...)
if preferGUI {
ides = append(gui, term...)
}
for _, ide := range append(ides, def...) {
if i, err := exec.LookPath(ide); err == nil {
return i
}
}
return os.Getenv("EDITOR")
}