browser.go 815 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package utils
  2. import (
  3. "os/exec"
  4. "regexp"
  5. "runtime"
  6. )
  7. func checkIfWsl() bool {
  8. out, err := exec.Command("uname", "-a").Output()
  9. if err != nil {
  10. return false
  11. }
  12. // On some cases, uname on wsl outputs microsoft capitalized
  13. if matched, err := regexp.Match(`microsoft|Microsoft`, out); err != nil {
  14. return matched
  15. }
  16. return false
  17. }
  18. // OpenBrowser opens the specified URL in the default browser of the user.
  19. func OpenBrowser(url string) error {
  20. var cmd string
  21. var args []string
  22. switch runtime.GOOS {
  23. case "windows":
  24. cmd = "cmd"
  25. args = []string{"/c", "start"}
  26. case "darwin":
  27. cmd = "open"
  28. default: // "linux", "freebsd", "openbsd", "netbsd"
  29. if checkIfWsl() {
  30. cmd = "explorer.exe"
  31. } else {
  32. cmd = "xdg-open"
  33. }
  34. }
  35. args = append(args, url)
  36. return exec.Command(cmd, args...).Start()
  37. }