aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/internal/browser/browser.go
blob: 897086f47177ddf06193a194610206fc659cfda5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package browser provides utilities for interacting with users' browsers.
package browser

import (
    "os"
    "os/exec"
    "runtime"
)

// Commands returns a list of possible commands to use to open a url.
func Commands() [][]string {
    var cmds [][]string
    if exe := os.Getenv("BROWSER"); exe != "" {
        cmds = append(cmds, []string{exe})
    }
    switch runtime.GOOS {
    case "darwin":
        cmds = append(cmds, []string{"/usr/bin/open"})
    case "windows":
        cmds = append(cmds, []string{"cmd", "/c", "start"})
    default:
        cmds = append(cmds, []string{"xdg-open"})
    }
    cmds = append(cmds,
        []string{"chrome"},
        []string{"google-chrome"},
        []string{"chromium"},
        []string{"firefox"},
    )
    return cmds
}

// Open tries to open url in a browser and reports whether it succeeded.
func Open(url string) bool {
    for _, args := range Commands() {
        cmd := exec.Command(args[0], append(args[1:], url)...)
        if cmd.Start() == nil {
            return true
        }
    }
    return false
}