diff --git a/pkg/gocui/gui.go b/pkg/gocui/gui.go index 2f22afe01..ddb356b20 100644 --- a/pkg/gocui/gui.go +++ b/pkg/gocui/gui.go @@ -1763,10 +1763,8 @@ func (g *Gui) onKey(ev *GocuiEvent) error { } if ev.Key.KeyName() == MouseLeft && (ev.Key.Mod()&ModMotion) == 0 && !v.Editable && g.openHyperlink != nil { - if newY >= 0 && newY <= len(v.viewLines)-1 && newX >= 0 && newX <= len(v.viewLines[newY].line)-1 { - if link := v.viewLines[newY].line[newX].hyperlink; link != "" { - return g.openHyperlink(link, v.name) - } + if link := v.hyperlinkAt(newX, newY); link != "" { + return g.openHyperlink(link, v.name) } } diff --git a/pkg/gocui/view.go b/pkg/gocui/view.go index 81ab0acab..e05446207 100644 --- a/pkg/gocui/view.go +++ b/pkg/gocui/view.go @@ -2116,6 +2116,16 @@ func (v *View) onMouseMove(x int, y int) { } } +// hyperlinkAt returns the hyperlink at the given position of the view's +// content, or an empty string if there is none. +func (v *View) hyperlinkAt(x, y int) string { + if y < 0 || y >= len(v.viewLines) || x < 0 || x >= len(v.viewLines[y].line) { + return "" + } + + return v.viewLines[y].line[x].hyperlink +} + func (v *View) findHyperlinkAt(x, y int) *SearchPosition { linkStr := v.viewLines[y].line[x].hyperlink if linkStr == "" {