raphamorim / rio

A hardware-accelerated GPU terminal emulator focusing to run in desktops and browsers.
https://raphamorim.io/rio
MIT License
4.01k stars 129 forks source link

hyperlink in url #60

Closed avelino closed 1 year ago

avelino commented 1 year ago

make the links (http:// and https://) clickable

example:

Screenshot 2023-05-27 at 15 11 04
OlshaMB commented 1 year ago

@raphamorim In which version this would be implemented? Does this require some work on sugarloaf? How to implement this in sugarloaf?

raphamorim commented 1 year ago

Haven't implemented yet @OlshaMB, the missing piece work that needs to be done is whenever the mouse is over the line, needs to run the regex to check if contains a link and then update the sugar to add underline (is similar of how alacritty works in the source code)

OlshaMB commented 1 year ago

Ok, when I have time I will try and implement it

hustcer commented 1 year ago

Waiting for this feature

raphamorim commented 1 year ago

@OlshaMB alacritty runs the link preview for each draw (to inspire https://github.com/alacritty/alacritty/blob/7ceb638ff80eca99ac63df5fd8cbb2f703d4637a/alacritty/src/display/mod.rs#L813-L840), rio will not do this way since the renderer is not trigger per time interval (unless you use blinking cursor) but for key events and tty updates.

In rio should work like

  1. mouse moved, get the current line and run the regex on it (this needs to be iterated in the PR or after the PR, because the link data is saved through lines/cell)
  2. add the underline for cells that have the links enabled.
raphamorim commented 1 year ago

@OlshaMB did you start? otherwise will pick this issue after the #186 implementation

raphamorim commented 1 year ago

fyi started to implement it

link

OlshaMB commented 1 year ago

@raphamorim Sorry didn't have time, so no, did you start to implement it on main? I think I will try to implement it this weekend

raphamorim commented 1 year ago

I wrote in a branch but haven't finished yet. What works so far is recognize the link, save to cells and update style to underline.

raphamorim commented 1 year ago

Implemented in main for MacOS (holding command and hovering the link allows the click), Linux/BSD does work now with xdg-open with super key but will be changed alt (as windows)

Documentation will be update once all platforms have support (will be wrapped up before next version 0.0.26 release)

raphamorim commented 1 year ago

Implemented for Linux, Windows, BSD and MacOS. Coming for upcoming version

demo-hyperlink-linux demo-hyperlink-macos demo-hyperlink-windows

tauil commented 1 year ago

Great work! One small remark/question: I noticed that the link behavior with the underline only triggers if I move the mouse, so if I just leave the mouse over the link and click the Cmd button, the link doesn't activate, only after moving the mouse. Is it expected to be like that? I know it's just nitpicking but still worth checking! 😄

https://github.com/raphamorim/rio/assets/14328/8937e652-8e85-4974-b94a-64cdda09ca9f

raphamorim commented 1 year ago

Yes, this is known. The way rio implemented the links is to avoid running regex without necessity so you actually need to interact with link to activate. It should be better with time (like press command and hit the link directly, but the handler now is in the mouse moving listener)

tauil commented 1 year ago

To be honest I wouldn't mind having the handler in the Cmd key instead if that's possible.

raphamorim commented 1 year ago

Will do, but next version (needs to be tested carefully don't affect performance for other cases)

lypanov commented 1 year ago

This works well for me here on my (niche) setup - the project as a whole surprised me to be honest as wezterm was a train wreck qua performance on my platform (Android). However it seems that while you have OSC 8 / hyperlink marked as IMPLEMENTED you haven't yet connected the two parts? Is this a safe assumption? Is there any chance there is a plan to do so? I'm currently running xfce4-terminal for the sixels and tilix for the tabbing capabilities but would like to unify (bonus, xfce4-terminal took me hours to get building vs 10 minutes or so for your project, tilix also has too many deps alas)

raphamorim commented 1 year ago

Hey @lypanov thanks for the message.

Rio does implements OSC 8 https://github.com/raphamorim/rio/blob/main/rio/src/performer/handler.rs#L604-L622 , although it will still required to hold the key to enable the click. If OSC8 isn't working for you with the hyperlink in URL, then it's a bug I can take a look

raphamorim commented 1 year ago

Actually never mind, found a bug with OSC 8 implementation that was preventing to show for majority of cases. Added the fix in 3078e63

Screenshot 2023-11-11 at 13 01 18