Преглед на файлове

Add `explore`, to explore new projects

Either displays the first line of the README*, or lists the files in the
directory if none is found.
Lucas Stadler преди 9 години
родител
ревизия
a57ada1118
променени са 1 файла, в които са добавени 64 реда и са изтрити 0 реда
  1. 64 0
      go/explore/explore.go

+ 64 - 0
go/explore/explore.go

@ -0,0 +1,64 @@
1
package main
2
3
import (
4
	"fmt"
5
	"os"
6
	"os/exec"
7
	"path"
8
	"strings"
9
)
10
11
func main() {
12
	dir := "."
13
	if len(os.Args) > 1 {
14
		dir = os.Args[1]
15
	}
16
17
	f, err := os.Open(dir)
18
	if err != nil {
19
		fmt.Println("Error:", err)
20
		os.Exit(1)
21
	}
22
23
	fi, err := f.Stat()
24
	if err != nil {
25
		fmt.Println("Error:", err)
26
		os.Exit(1)
27
	}
28
29
	var cmd *exec.Cmd
30
	if fi.IsDir() {
31
		fis, err := f.Readdir(-1)
32
		if err != nil {
33
			fmt.Println("Error:", err)
34
			os.Exit(1)
35
		}
36
37
		var rs []string
38
		for _, fi := range fis {
39
40
			if fi.IsDir() {
41
				continue
42
			}
43
44
			if strings.HasPrefix(strings.ToLower(fi.Name()), "readme") {
45
				rs = append(rs, fi.Name())
46
			}
47
		}
48
49
		if len(rs) == 0 {
50
			cmd = exec.Command("ls", dir)
51
		} else {
52
			fmt.Printf("'%s':\n", rs[0])
53
			cmd = exec.Command("head", "-n3", path.Join(dir, rs[0]))
54
		}
55
	} else {
56
		cmd = exec.Command("head", "-n3", path.Join(dir, f.Name()))
57
	}
58
59
	cmd.Stdin = os.Stdin
60
	cmd.Stdout = os.Stdout
61
	cmd.Stderr = os.Stderr
62
63
	cmd.Run()
64
}