Terminal hyperlinks support detection and generation.
TTY::Link detects whether the terminal supports hyperlinks and creates them ready for display in the console. It is a component of the TTY toolkit.
Add this line to your application's Gemfile:
gem "tty-link"And then execute:
$ bundleOr install it yourself as:
$ gem install tty-linkCreate a TTY::Link instance:
link = TTY::Link.newThen use the link_to method to print a hyperlink in the terminal:
puts link.link_to("TTY Toolkit", "https://ttytoolkit.org")This will output a clickable link in the terminal supporting hyperlinks:
TTY ToolkitOr it will print a plain text version with a URL in unsupported terminals:
TTY Toolkit -> https://ttytoolkit.orgBy default, TTY::Link uses the link? method to detect whether the terminal supports hyperlinks:
link.link?Overwrite this automatic detection with the :hyperlink keyword.
For example, to always create hyperlinks in the terminal:
link = TTY::Link.new(hyperlink: :always)Alternatively, use the TTY_LINK_HYPERLINK environment variable to control
hyperlink support detection. The variable takes precedence over the
:hyperlink keyword.
Use the :env keyword to overwrite any environment variables set in the terminal:
link = TTY::Link.new(env: {"TTY_LINK_HYPERLINK" => "always"})As a convenience, the link? and link_to methods are also available on the TTY::Link class. The methods accept all the configuration keywords.
For example, to always output hyperlinks in the terminal:
puts TTY::Link.link_to("TTY Toolkit", "https://ttytoolkit.org", hyperlink: :always)The new method accepts the :env keyword to define environment variables.
The keyword defaults to the ENV object that holds the current environment
variables.
For example, to define only an environment variable TTY_LINK_HYPERLINK with
always value:
link = TTY::Link.new(env: {"TTY_LINK_HYPERLINK" => "always"})The new method accepts the :output keyword to define the output stream. The
keyword defaults to the standard output.
For example, to use the standard error stream:
link = TTY::Link.new(output: $stderr)The new method accepts the :hyperlink keyword to control terminal hyperlink
support detection. The available values are :always, :auto and :never. The
keyword defaults to the :auto value to allow the link? method
to check whether the given terminal supports hyperlinks.
For example, use the :always value to force the link_to method
to create hyperlinks without checking terminal support:
link = TTY::Link.new(hyperlink: :always)Or, use the :never value to force the link_to to create
text-only links:
link = TTY::Link.new(hyperlink: :never)Alternatively, set the TTY_LINK_HYPERLINK environment variable to configure
the :hyperlink value:
TTY_LINK_HYPERLINK=alwaysThe new method accepts the :plain keyword to define a text-only hyperlink
replacement template. The link_to method uses the template to
create a plain URL alternative on terminals without hyperlink support.
The template can contain two tokens, the :name and the :url. The tokens
are optional. The :name -> :url is the default template. The
link_to method replaces the present token with the given
argument.
For example, given a link to https://ttytoolkit.org named TTY Toolkit:
link.link_to("TTY Toolkit", "https://ttytoolkit.org")This will create the following string from the default template:
"TTY toolkit -> https://ttytoolkit.org"To change the default template and display links, for example, with the name and the URL surrounded by brackets:
link = TTY::Link.new(plain: ":name (:url)")Then passing the same arguments to the link_to method:
link.link_to("TTY Toolkit", "https://ttytoolkit.org")This will create the following string from the custom template:
"TTY toolkit (https://ttytoolkit.org)"The link? method detects whether the terminal supports hyperlinks against
supported terminals. The link_to
method uses this detection to decide whether to create a hyperlink or plain
text alternative.
For example, to check the current terminal hyperlink support:
link.link?The link_to method accepts two arguments, the name and the URL. The second
URL argument is optional.
For example, to create a hyperlink to https://ttytoolkit.org
named TTY Toolkit:
link.link_to("TTY Toolkit", "https://ttytoolkit.org")To create a hyperlink where the name is the same as the URL:
link.link_to("https://ttytoolkit.org")The link_to method accepts the :attrs keyword to define attributes for a
hyperlink. Note that currently, hyperlink-capable terminals support only the
id attribute. However, there is no limitation on the attribute names to
allow future support.
For example, to define the id attribute:
link.link_to("TTY Toolkit", "https://ttytoolkit.org", attrs: {id: "tty-toolkit"})To define many attributes such as id, lang and title:
link.link_to("TTY Toolkit", "https://ttytoolkit.org", attrs: {
id: "tty-toolkit", lang: "en", title: "Terminal Apps The Easy Way"
})The TTY::Link supports hyperlink generation in the following terminals:
AlacrittyContourDomTermfootHyperiTerm2JediTermkittyKonsoleminttyRioTabbyTerminologyVSCodeVTE (GNOME, Xfce, ROXTerm, Guake, sakura, Terminator)WezTermWindows Terminal
After checking out the repo, run bin/setup to install dependencies.
Then, run rake spec to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install.
To release a new version, update the version number in version.rb, and then
run bundle exec rake release, which will create a git tag for the version,
push git commits and tags, and push the .gem file to
rubygems.org.
Bug reports and pull requests are welcome on GitHub at https://github.com/piotrmurach/tty-link. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.
The gem is available as open source under the terms of the MIT License.
Everyone interacting in the TTY::Link project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.
Copyright (c) 2019 Piotr Murach. See LICENSE.txt for further details.