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  }