package main import ( "io/ioutil" "os" "os/exec" "strings" ) func doEditor() (string, error) { // Create a temporary file tmpfile, err := ioutil.TempFile("", "regex-*.txt") if err != nil { return "", err } tmpPath := tmpfile.Name() // Defer removal in case of error, but we might move it defer os.Remove(tmpPath) tmpfile.Close() // Get the user's editor editor := os.Getenv("EDITOR") if editor == "" { editor = "vim" // default to vim } // Run the editor cmd := exec.Command(editor, tmpPath) cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { return "", err } // Read the file content content, err := ioutil.ReadFile(tmpPath) if err != nil { return "", err } // Check if the file is not empty after trimming space if strings.TrimSpace(string(content)) != "" { // Move the file if err := os.Rename(tmpPath, "/tmp/regex.txt"); err != nil { return "", err } return "/tmp/regex.txt", nil } return "", nil }