Skip to content

Commit dad1ad2

Browse files
committed
支持 --open 浏览器自动打开网址
1 parent 74c0abc commit dad1ad2

File tree

4 files changed

+68
-5
lines changed

4 files changed

+68
-5
lines changed

main.go

+15-5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main
22

33
import (
44
"flag"
5+
"fmt"
56
"log"
67
"net/http"
78
"os"
@@ -10,13 +11,15 @@ import (
1011
)
1112

1213
var dir string
13-
var port string
14+
var port int
1415
var version bool
16+
var open bool
1517

1618
func init() {
17-
flag.StringVar(&port, "p", "8100", "port to serve on")
19+
flag.IntVar(&port, "p", 8100, "port to serve on")
1820
flag.StringVar(&dir, "path", "./", "the directory of static file to host")
1921
flag.BoolVar(&version, "version", false, "print program version")
22+
flag.BoolVar(&open, "open", false, "open with default browser")
2023
flag.Parse()
2124

2225
if version {
@@ -32,10 +35,17 @@ func init() {
3235
}
3336
func main() {
3437

35-
http.Handle("/", FileServer(Dir(abs(dir))))
38+
if open {
39+
go func() {
40+
if err := Open(fmt.Sprintf("http://127.0.0.1:%d", port)); err != nil {
41+
log.Printf("can not open default browser %s", err)
42+
}
3643

37-
log.Printf("Serving %s on HTTP port: %s\n", abs(dir), port)
38-
log.Fatal(http.ListenAndServe(":"+port, nil))
44+
}()
45+
}
46+
http.Handle("/", FileServer(Dir(abs(dir))))
47+
log.Printf("Serving %s on HTTP port: %d\n", abs(dir), port)
48+
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", port), nil))
3949
}
4050

4151
func abs(dir string) string {

open.go

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//go:build !windows || !darwin
2+
// +build !windows !darwin
3+
4+
package main
5+
6+
import (
7+
"fmt"
8+
"os/exec"
9+
)
10+
11+
func Open(url string) error {
12+
bin, err := exec.LookPath("xdg-open")
13+
if err != nil {
14+
return fmt.Errorf("can not find xdg-open, %s", err.Error())
15+
}
16+
return exec.Command(bin, url).Run()
17+
}

open_darwin.go

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//go:build darwin
2+
// +build darwin
3+
4+
package main
5+
6+
func Open(url string) error {
7+
bin, err := exec.LookPath("open")
8+
if err != nil {
9+
return fmt.Errorf("can not find open, %s", err.Error())
10+
}
11+
return exec.Command(bin, url).Run()
12+
}

open_windows.go

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
//go:build windows
2+
// +build windows
3+
4+
package main
5+
6+
// start up cmd.exe then run start command to open default browser
7+
func Open(url string) error {
8+
bin, err := exec.LookPath("cmd")
9+
if err != nil {
10+
return fmt.Errorf("can not find start, %s", err.Error())
11+
}
12+
c := exec.Cmd{
13+
Path: bin,
14+
}
15+
w, err := c.StdinPipe()
16+
if err != nil {
17+
return err
18+
}
19+
c.Start()
20+
w.Write([]byte(fmt.Sprintf("start %s\n", url)))
21+
time.Sleep(time.Second)
22+
w.Close()
23+
return c.Wait()
24+
}

0 commit comments

Comments
 (0)