diff --git a/main.go b/main.go index 1c3752f9c..069c6dd65 100644 --- a/main.go +++ b/main.go @@ -187,16 +187,26 @@ func main() { // GUI if cfg.Options.GUIEnabled && cfg.Options.GUIAddress != "" { - host, port, err := net.SplitHostPort(cfg.Options.GUIAddress) + addr, err := net.ResolveTCPAddr("tcp", cfg.Options.GUIAddress) if err != nil { warnf("Cannot start GUI on %q: %v", cfg.Options.GUIAddress, err) } else { - if len(host) > 0 { - infof("Starting web GUI on http://%s", cfg.Options.GUIAddress) - } else { - infof("Starting web GUI on port %s", port) + var hostOpen, hostShow string + switch { + case addr.IP == nil: + hostOpen = "localhost" + hostShow = "0.0.0.0" + case addr.IP.IsUnspecified(): + hostOpen = "localhost" + hostShow = addr.IP.String() + default: + hostOpen = addr.IP.String() + hostShow = hostOpen } + + infof("Starting web GUI on http://%s:%d/", hostShow, addr.Port) startGUI(cfg.Options.GUIAddress, m) + openURL(fmt.Sprintf("http://%s:%d", hostOpen, addr.Port)) } } diff --git a/openurl.go b/openurl.go new file mode 100644 index 000000000..b75c1d385 --- /dev/null +++ b/openurl.go @@ -0,0 +1,34 @@ +/* +Copyright 2011 Google Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "os/exec" + "runtime" +) + +func openURL(url string) error { + if runtime.GOOS == "windows" { + return exec.Command("cmd.exe", "/C", "start "+url).Run() + } + + if runtime.GOOS == "darwin" { + return exec.Command("open", url).Run() + } + + return exec.Command("xdg-open", url).Run() +}