Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python. How to print text to console as hyperlink?

I'm working on a console application. My application uses urwid lib. In some cases, I need to show very long hyperlinks as short text inside table columns. I want to open links in the browser when I click on the text inside the column.

So, my question is:

It is possible to print text as a hyperlink to the console?

Can you provide a small example of how to print text as a hyperlink using python?

like image 481
Danila Ganchar Avatar asked Nov 04 '16 09:11

Danila Ganchar


3 Answers

Yes, using some tools, like gNewt or Curses, you could create a button and 'on click' do an action (like open a browser to a given url).

gNewt : http://gnewt.sourceforge.net/

nCurses : https://docs.python.org/3.7/library/curses.html

Otherwise, it's the terminal application that will manage the text you give it, and if it doesn't implement uri's recognition your program won't work as you'd like.

like image 58
Loïc Avatar answered Oct 07 '22 20:10

Loïc


No, some consoles do recognize urls and convert them to a clickable hyperlink. All you can do is make it easy to recognize for console applications by putting a http:// in your url.

Also see How does bash recognize a link?

like image 33
vriesdemichael Avatar answered Oct 07 '22 20:10

vriesdemichael


A bit late, but there totally is a way to do that now, without curses or anything, just pure text and collaboration from your terminal emulator.

def link(uri, label=None):
    if label is None: 
        label = uri
    parameters = ''

    # OSC 8 ; params ; URI ST <name> OSC 8 ;; ST 
    escape_mask = '\033]8;{};{}\033\\{}\033]8;;\033\\'

    return escape_mask.format(parameters, uri, label)

Call that function with link('https://example.com/') to get a simple, clickable link, or link('https://example.com/', 'example') for a custom label.

Note that links are faintly underlined in your terminal, and not all of them support the feature.

like image 3
WayToDoor Avatar answered Oct 07 '22 19:10

WayToDoor