Skip to content

Commit

Permalink
Add TTY::Link::Terminals::Jediterm to detect hyperlinks support in Je…
Browse files Browse the repository at this point in the history
…diTerm
  • Loading branch information
piotrmurach committed Aug 24, 2024
1 parent a75a8c6 commit 83d5098
Show file tree
Hide file tree
Showing 3 changed files with 113 additions and 0 deletions.
71 changes: 71 additions & 0 deletions lib/tty/link/terminals/jediterm.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 JediTerm terminal
#
# @api private
class Jediterm < Abstract
# The JediTerm terminal name pattern
#
# @return [Regexp]
#
# @api private
JEDITERM = /JediTerm/i.freeze
private_constant :JEDITERM

# The terminal emulator environment variable name
#
# @return [String]
#
# @api private
TERMINAL_EMULATOR = "TERMINAL_EMULATOR"
private_constant :TERMINAL_EMULATOR

private

# Detect JediTerm terminal
#
# @example
# jediterm.name?
# # => true
#
# @return [Boolean]
#
# @api private
def name?
!(terminal_emulator =~ JEDITERM).nil?
end

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

# Read the terminal emulator environment variable
#
# @example
# jediterm.terminal_emulator
# # => "JetBrains-JediTerm"
#
# @return [String, nil]
#
# @api private
def terminal_emulator
env[TERMINAL_EMULATOR]
end
end # Jediterm
end # Terminals
end # Link
end # TTY
9 changes: 9 additions & 0 deletions spec/unit/link_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,15 @@
end
end

context "when JediTerm" do
it "supports links on any version" do
env = {"TERMINAL_EMULATOR" => "JetBrains-JediTerm"}
link = described_class.new(env: env, output: output)

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

context "when VTE" do
it "supports links above the 0.50.1 version" do
env = {"VTE_VERSION" => "5001"}
Expand Down
33 changes: 33 additions & 0 deletions spec/unit/terminals/jediterm_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::Jediterm, "#link?" do
let(:semantic_version) { TTY::Link::SemanticVersion }

it "supports links on any version" do
env = {"TERMINAL_EMULATOR" => "JetBrains-JediTerm"}
jediterm = described_class.new(semantic_version, env)

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

it "supports a terminal name without the 'JetBrains-' prefix" do
env = {"TERMINAL_EMULATOR" => "jediterm"}
jediterm = described_class.new(semantic_version, env)

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

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

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

it "doesn't support links with a non-JediTerm terminal name" do
env = {"TERMINAL_EMULATOR" => "other-terminal"}
jediterm = described_class.new(semantic_version, env)

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

0 comments on commit 83d5098

Please sign in to comment.