93 lines
1.8 KiB
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
|
|
}
|