diff --git a/go.mod b/go.mod index a2b53ea..d5f220f 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,8 @@ module lxsameer.com/open go 1.19 + +require ( + github.com/gabriel-vasile/mimetype v1.4.1 // indirect + golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..29b3e3c --- /dev/null +++ b/go.sum @@ -0,0 +1,9 @@ +github.com/gabriel-vasile/mimetype v1.4.1 h1:TRWk7se+TOjCYgRth7+1/OYLNiRNIotknkFtf/dnN7Q= +github.com/gabriel-vasile/mimetype v1.4.1/go.mod h1:05Vi0w3Y9c/lNvJOdmIwvrrAhX3rYhfQQCaf9VJcv7M= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e h1:TsQ7F31D3bUCLeqPT0u+yjp1guoArKaNKmCr22PYgTQ= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/open.go b/open.go new file mode 100644 index 0000000..aae4974 --- /dev/null +++ b/open.go @@ -0,0 +1,64 @@ +package main + +import ( + "bufio" + "fmt" + "io/ioutil" + "log" + "os" + "os/exec" + "strings" + + "github.com/gabriel-vasile/mimetype" +) + +func main() { + if len(os.Args) != 2 { + log.Fatal("'open' get's exactly one argument") + } + + file := os.Args[1] + home := os.Getenv("HOME") + + var prog string + + mtype, err := mimetype.DetectFile(file) + if err != nil { + log.Fatalf("%v", err) + } + dirpath := home + "/.open/" + os.MkdirAll(dirpath, 0775) + opener_file := dirpath + mtype.Extension() + + if _, err := os.Stat(opener_file); err == nil { + content, err := ioutil.ReadFile(opener_file) + if err != nil { + log.Fatalf("%v", err) + } + prog = string(content) + } else { + fmt.Printf("Don't know how to open '%s' file. What program should I use? ", mtype.Extension()) + reader := bufio.NewReader(os.Stdin) + prog_string, err := reader.ReadString('\n') + if err != nil { + log.Fatal(err) + } + prog_string = string(prog_string[0 : len(prog_string)-1]) + prog = strings.Clone(prog_string) + s := []byte(prog_string) + err = ioutil.WriteFile(opener_file, s, 0644) + if err != nil { + log.Fatal(err) + } + + } + + command := strings.Split(prog, " ") + out, err := exec.Command(command[0], command[1:]...).Output() + if err != nil { + log.Fatal(err) + } + + fmt.Println(string(out)) + +}