regex/doInteract.go

93 lines
1.8 KiB
Go

package main
import (
"io/ioutil"
"os"
"os/exec"
"strings"
"time"
"go.wit.com/log"
)
func doInteract() error {
for {
filename, err := doEditorOnce()
if err != nil {
return err
}
log.Info("filename:", filename)
for {
_, err := os.Stat("/tmp/regex.ready")
if err == nil {
break
}
time.Sleep(100 * time.Millisecond)
}
// read in regex.ready exists (should be SessionID)
// Println session ID
content, err := ioutil.ReadFile("/tmp/regex.ready")
if err != nil {
log.Error(err)
}
os.Remove("/tmp/regex.ready")
log.Info("SessionID: %s", string(content))
logContent, err := ioutil.ReadFile("/tmp/regex.log")
if err != nil {
log.Errorf("could not read regex.log: %v", err)
} else {
log.Info("contents of /tmp/regex.log:")
os.Stdout.Write(logContent)
}
time.Sleep(5 * time.Second)
}
}
func doEditorOnce() (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
}