github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/utils/readline/editor_unix.go (about) 1 //go:build !windows && !plan9 && !js 2 // +build !windows,!plan9,!js 3 4 package readline 5 6 import ( 7 "os" 8 "os/exec" 9 ) 10 11 const defaultEditor = "vi" 12 13 func (rl *Instance) launchEditor(multiline []rune) ([]rune, error) { 14 name, err := rl.writeTempFile([]byte(string(multiline))) 15 if err != nil { 16 return multiline, err 17 } 18 19 editor := os.Getenv("EDITOR") 20 // default editor if $EDITOR not set 21 if editor == "" { 22 editor = defaultEditor 23 } 24 25 cmd := exec.Command(editor, name) 26 27 cmd.Stdin = os.Stdin 28 cmd.Stdout = os.Stdout 29 cmd.Stderr = os.Stderr 30 31 if err := cmd.Start(); err != nil { 32 return multiline, err 33 } 34 35 if err := cmd.Wait(); err != nil { 36 return multiline, err 37 } 38 39 b, err := readTempFile(name) 40 return []rune(string(b)), err 41 }