github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/utils/readline/editor.go (about) 1 //go:build !windows 2 // +build !windows 3 4 package readline 5 6 import ( 7 "crypto/md5" 8 "encoding/hex" 9 "io" 10 "os" 11 "strconv" 12 "time" 13 ) 14 15 func (rl *Instance) writeTempFile(content []byte) (string, error) { 16 fileID := strconv.Itoa(time.Now().Nanosecond()) + ":" + rl.line.String() 17 18 h := md5.New() 19 _, err := h.Write([]byte(fileID)) 20 if err != nil { 21 return "", err 22 } 23 24 name := rl.TempDirectory + "readline-" + hex.EncodeToString(h.Sum(nil)) + "-" + strconv.Itoa(os.Getpid()) 25 26 file, err := os.Create(name) 27 if err != nil { 28 return "", err 29 } 30 31 defer file.Close() 32 33 _, err = file.Write(content) 34 return name, err 35 } 36 37 func readTempFile(name string) ([]byte, error) { 38 file, err := os.Open(name) 39 if err != nil { 40 return nil, err 41 } 42 43 b, err := io.ReadAll(file) 44 if err != nil { 45 return nil, err 46 } 47 48 if len(b) > 0 && b[len(b)-1] == '\n' { 49 b = b[:len(b)-1] 50 } 51 52 if len(b) > 0 && b[len(b)-1] == '\r' { 53 b = b[:len(b)-1] 54 } 55 56 if len(b) > 0 && b[len(b)-1] == '\n' { 57 b = b[:len(b)-1] 58 } 59 60 if len(b) > 0 && b[len(b)-1] == '\r' { 61 b = b[:len(b)-1] 62 } 63 64 err = os.Remove(name) 65 return b, err 66 }