Skip to content

Commit

Permalink
Add TTY::Link::Terminals::Alacritty to detect hyperlinks support in A…
Browse files Browse the repository at this point in the history
…lacritty
  • Loading branch information
piotrmurach committed Aug 18, 2024
1 parent 76dec09 commit 62bcc34
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 0 deletions.
71 changes: 71 additions & 0 deletions lib/tty/link/terminals/alacritty.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# frozen_string_literal: true

require_relative "abstract"

module TTY
class Link
module Terminals
# Responsible for detecting hyperlink support in the Alacritty terminal
#
# @api private
class Alacritty < Abstract
# The Alacritty terminal name pattern
#
# @return [Regexp]
#
# @api private
ALACRITTY = /alacritty/x.freeze
private_constant :ALACRITTY

# The term environment variable name
#
# @return [String]
#
# @api private
TERM = "TERM"
private_constant :TERM

private

# Detect Alacritty terminal
#
# @example
# alacritty.name?
# # => true
#
# @return [Boolean]
#
# @api private
def name?
!(term =~ ALACRITTY).nil?
end

# Detect any Alacritty version to support terminal hyperlinks
#
# @example
# alacritty.version?
# # => true
#
# @return [Boolean]
#
# @api private
def version?
true
end

# Read the term environment variable
#
# @example
# alacritty.term
# # => "alacritty"
#
# @return [String, nil]
#
# @api private
def term
env[TERM]
end
end # Alacritty
end # Terminals
end # Link
end # TTY
33 changes: 33 additions & 0 deletions spec/unit/terminals/alacritty_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# frozen_string_literal: true

RSpec.describe TTY::Link::Terminals::Alacritty, "#link?" do
let(:semantic_version) { TTY::Link::SemanticVersion }

it "supports links on any version" do
env = {"TERM" => "alacritty"}
alacritty = described_class.new(semantic_version, env)

expect(alacritty.link?).to eq(true)
end

it "supports a terminal name with a '-direct' suffix" do
env = {"TERM" => "alacritty-direct"}
alacritty = described_class.new(semantic_version, env)

expect(alacritty.link?).to eq(true)
end

it "doesn't support links without a terminal name" do
env = {"TERM" => nil}
alacritty = described_class.new(semantic_version, env)

expect(alacritty.link?).to eq(false)
end

it "doesn't support links with a non-Alacritty terminal name" do
env = {"TERM" => "non-Alacritty"}
iterm = described_class.new(semantic_version, env)

expect(iterm.link?).to eq(false)
end
end

0 comments on commit 62bcc34

Please sign in to comment.