diff --git a/client.go b/client.go index 6d78cf4..6b2ac43 100644 --- a/client.go +++ b/client.go @@ -1001,6 +1001,13 @@ func (c *client) handleGemini(u Url) { if strings.Replace(lowerRedirect, lowerOriginal, "", 1) == "/" { c.Visit(capsule.Content) } else { + if !strings.Contains(capsule.Content, "://") { + lnk, lnkErr := gemini.HandleRelativeUrl(capsule.Content, u.Full) + if lnkErr == nil { + capsule.Content = lnk + } + } + c.SetMessage(fmt.Sprintf("Follow redirect (y/n): %s?", capsule.Content), false) c.DrawMessage() ch := cui.Getch() diff --git a/gemini/gemini.go b/gemini/gemini.go index ca1d558..19fbd54 100644 --- a/gemini/gemini.go +++ b/gemini/gemini.go @@ -404,7 +404,7 @@ func parseGemini(b, currentUrl string) (string, []string) { } if strings.Index(link, "://") < 0 { - link, _ = handleRelativeUrl(link, currentUrl) + link, _ = HandleRelativeUrl(link, currentUrl) } links = append(links, link) @@ -423,7 +423,7 @@ func parseGemini(b, currentUrl string) (string, []string) { } // handleRelativeUrl provides link completion -func handleRelativeUrl(relLink, current string) (string, error) { +func HandleRelativeUrl(relLink, current string) (string, error) { base, err := url.Parse(current) if err != nil { return relLink, err