package hinters import ( "github.com/liamg/darktile/internal/app/darktile/termutil" "github.com/skratchdot/open-golang/open" "mvdan.cc/xurls" ) func init() { register(&URLHinter{}, PriorityHigh) } type URLHinter struct { target string } func (h *URLHinter) Match(text string, cursorIndex int) (matched bool, offset int, length int) { matches := xurls.Strict.FindAllStringIndex(text, -1) for _, match := range matches { if match[0] <= cursorIndex && match[1] > cursorIndex { return true, match[0], match[1] - match[0] } } return } func (h *URLHinter) Activate(api HintAPI, match string, start termutil.Position, end termutil.Position) error { h.target = match api.Highlight(start, end, "CTRL + CLICK: Open in browser", nil) api.SetCursorToPointer() return nil } func (h *URLHinter) Deactivate(api HintAPI) error { api.ClearHighlight() api.ResetCursor() return nil } func (h *URLHinter) Click(api HintAPI) error { api.ShowMessage("Launching URL in your browser...") return open.Run(h.target) }