diff --git a/go.mod b/go.mod index 97e8a0bf..8dc077f0 100644 --- a/go.mod +++ b/go.mod @@ -21,12 +21,14 @@ require ( github.com/alecthomas/chroma v0.10.0 // indirect github.com/aymanbagabas/go-osc52 v1.0.3 // indirect github.com/aymerick/douceur v0.2.0 // indirect + github.com/cli/browser v1.1.0 // indirect github.com/cli/safeexec v1.0.0 // indirect github.com/containerd/console v1.0.3 // indirect github.com/dlclark/regexp2 v1.7.0 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/go-playground/locales v0.14.0 // indirect github.com/go-playground/universal-translator v0.18.0 // indirect + github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/gorilla/css v1.0.0 // indirect github.com/henvic/httpretty v0.1.0 // indirect github.com/inconshreveable/mousetrap v1.0.1 // indirect diff --git a/go.sum b/go.sum index 6809e10f..ecc3cb24 100644 --- a/go.sum +++ b/go.sum @@ -19,6 +19,8 @@ github.com/charmbracelet/lipgloss v0.6.0 h1:1StyZB9vBSOyuZxQUcUwGr17JmojPNm87ini github.com/charmbracelet/lipgloss v0.6.0/go.mod h1:tHh2wr34xcHjC2HCXIlGSG1jaDF0S0atAUvBMP6Ppuk= github.com/charmbracelet/log v0.1.1 h1:XBqTzrgT+7BenzFkb4DP3rt6VKLtx/zpgNMfJMAdbCc= github.com/charmbracelet/log v0.1.1/go.mod h1:nbG+jJlMwbPM8v2wFyPG6qCr9flLQ1XTS+fhzUWd6JE= +github.com/cli/browser v1.1.0 h1:xOZBfkfY9L9vMBgqb1YwRirGu6QFaQ5dP/vXt5ENSOY= +github.com/cli/browser v1.1.0/go.mod h1:HKMQAt9t12kov91Mn7RfZxyJQQgWgyS/3SZswlZ5iTI= github.com/cli/go-gh/v2 v2.0.0 h1:JAgQY7VNHletsO0Eqr+/PzF7fF5QEjhY2t2+Tev3vmk= github.com/cli/go-gh/v2 v2.0.0/go.mod h1:2/ox3Dnc8wDBT5bnTAH1aKGy6Qt1ztlFBe10EufnvoA= github.com/cli/safeexec v1.0.0 h1:0VngyaIyqACHdcMNWfo6+KdUYnqEr2Sg+bSP1pdF+dI= @@ -45,6 +47,8 @@ github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/j github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= github.com/go-playground/validator/v10 v10.11.0 h1:0W+xRM511GY47Yy3bZUbJVitCNg2BOGlCyvTqsp/xIw= github.com/go-playground/validator/v10 v10.11.0/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw= @@ -146,6 +150,7 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210319071255-635bc2c9138d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/ui/ui.go b/ui/ui.go index 46aded76..057c0a6f 100644 --- a/ui/ui.go +++ b/ui/ui.go @@ -2,6 +2,7 @@ package ui import ( "fmt" + "os" "sort" "strings" "time" @@ -12,6 +13,7 @@ import ( tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/lipgloss" log "github.com/charmbracelet/log" + "github.com/cli/go-gh/v2/pkg/browser" "github.com/dlvhdr/gh-dash/config" "github.com/dlvhdr/gh-dash/data" "github.com/dlvhdr/gh-dash/ui/common" @@ -27,7 +29,6 @@ import ( "github.com/dlvhdr/gh-dash/ui/context" "github.com/dlvhdr/gh-dash/ui/keys" "github.com/dlvhdr/gh-dash/ui/theme" - "github.com/dlvhdr/gh-dash/utils" ) type Model struct { @@ -171,8 +172,12 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case key.Matches(msg, m.keys.OpenGithub): var currRow = m.getCurrRowData() + b := browser.New("", os.Stdout, os.Stdin) if currRow != nil { - utils.OpenBrowser(currRow.GetUrl()) + err := b.Browse(currRow.GetUrl()) + if err != nil { + log.Fatal(err) + } } case key.Matches(msg, m.keys.Refresh): diff --git a/utils/utils.go b/utils/utils.go index 0b4a68b1..7d39a8fd 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -1,15 +1,9 @@ package utils import ( - "fmt" "math" - "os/exec" - "runtime" "strconv" - "strings" "time" - - log "github.com/charmbracelet/log" ) const ( @@ -32,43 +26,6 @@ func Min(a, b int) int { return b } -func openInLinuxBrowser(url string) error { - var err error - providers := []string{"xdg-open", "x-www-browser", "www-browser", "wslview"} - - for _, provider := range providers { - if _, err = exec.LookPath(provider); err == nil { - err = exec.Command(provider, url).Start() - if err != nil { - return err - } - return nil - } - } - - return &exec.Error{Name: strings.Join(providers, ","), Err: exec.ErrNotFound} -} - -func OpenBrowser(url string) { - var err error - - switch runtime.GOOS { - case "linux": - err = openInLinuxBrowser(url) - case "windows": - err = exec.Command("rundll32", "url.dll,FileProtocolHandler", url).Start() - case "darwin": - err = exec.Command("open", url).Start() - case "android": - err = exec.Command("termux-open-url", url).Start() - default: - err = fmt.Errorf("unsupported platform") - } - if err != nil { - log.Fatal(err) - } -} - func TimeElapsed(then time.Time) string { var parts []string var text string