lipgloss icon indicating copy to clipboard operation
lipgloss copied to clipboard

OSC 8 (hyperlink) supports.

Open tartavull opened this issue 2 years ago • 15 comments

https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda OSC8 allows for hyperlinks in terminals that support them. But currently even in terminals that support OSC8, it brakes the rest of the formatting provided by lipgloss. I would love to contribute this if I can be offered some guidance.

tartavull avatar Aug 31 '23 17:08 tartavull

I have this requirement, too.

It looks like termenv, one of the project dependencies, supports hyperlinks. I haven't looked into it other than glancing at hyperlink.go, but I think one could use that to render a hyperlink.

It would be nice to have it wrapped in lipgloss so I can use the same APIs.

tomgeorge avatar Sep 15 '23 03:09 tomgeorge

Hi guys, what's the status of this? Displaying links works but width calculation is all wrong

testinfected avatar May 29 '24 15:05 testinfected

Hey, @testinfected! In terms of width calculation, I believe it's correct now (we've reworked a lot of the underpinnings):

package main

import (
	"fmt"

	"github.com/charmbracelet/lipgloss"
)

func main() {
	const x = "\x1B]8;;http://charm.sh\x1B\\Hello\x1B]8;;\x1B\\\n"
	fmt.Println(lipgloss.Width(x)) // 5
}

Playground

If not, mind opening a separate issue with code to reproduce?

meowgorithm avatar May 29 '24 15:05 meowgorithm

Hey @meowgorithm good to know, thank you. I'm displaying an hyperlink in the spinner title, but part of the hyperlink is not visible unless I resize the terminal horizontally.

Let me double check and open a new issue then.

testinfected avatar May 29 '24 16:05 testinfected

It seems ok with all the latest versions of the libraries. I guess you can close this issue

Thanks for the quick response :-)

testinfected avatar May 29 '24 16:05 testinfected

FYI I had bubbletea 0.25, seems fixed with 0.26.3

testinfected avatar May 29 '24 17:05 testinfected

Okay awesome, that's good to hear. Bubble Tea v0.26.x and Lip Gloss v0.11.x both use our new low level stuff in /x.

Let's keep this issue open until we add an API for hyperlinks, i.e. something like:

lipgloss.Hyperlink("https://charm.sh/", "Charm!")

meowgorithm avatar May 29 '24 20:05 meowgorithm

Actually, I'd probably implement it on a style for control over the output:

str := lipgloss.NewStyle().
    Foreground(lipgloss.Color(63)).
    Underline(true).
    Hyperlink("https://charm.sh").
    Render("Charm!")

meowgorithm avatar May 29 '24 20:05 meowgorithm

I would want to work on this!

Delta456 avatar Jun 03 '24 17:06 Delta456

@Delta456 urgh, I actually have a hyperlink branch open with most of this in place. I'll open up a PR for it in a few minutes and mention you.

meowgorithm avatar Jun 03 '24 18:06 meowgorithm

@Delta456 urgh, I actually have a hyperlink branch open with most of this in place. I'll open up a PR for it in a few minutes and mention you.

Ah well, no worries! The implementation is almost the same as yours :stars:

Delta456 avatar Jun 03 '24 18:06 Delta456

Just a note that you can follow progress on this is #313. Getting it right will be a bit more complicated than meets the eye.

meowgorithm avatar Jun 04 '24 03:06 meowgorithm