diff --git a/command/webbrowser/native.go b/command/webbrowser/native.go index 4e8281ce1..77d503a2c 100644 --- a/command/webbrowser/native.go +++ b/command/webbrowser/native.go @@ -2,6 +2,8 @@ package webbrowser import ( "github.com/pkg/browser" + "os/exec" + "strings" ) // NewNativeLauncher creates and returns a Launcher that will attempt to interact @@ -13,6 +15,18 @@ func NewNativeLauncher() Launcher { type nativeLauncher struct{} +func hasProgram(name string) bool { + _, err := exec.LookPath(name) + return err == nil +} + func (l nativeLauncher) OpenURL(url string) error { + // Windows Subsystem for Linux (bash for Windows) doesn't have xdg-open available + // but you can execute cmd.exe from there; try to identify it + if !hasProgram("xdg-open") && hasProgram("cmd.exe") { + r := strings.NewReplacer("&", "^&") + exec.Command("cmd.exe", "/c", "start", r.Replace(url)).Run() + } + return browser.OpenURL(url) }