diff --git a/lib/tty/link/terminals/jediterm.rb b/lib/tty/link/terminals/jediterm.rb new file mode 100644 index 0000000..9e063eb --- /dev/null +++ b/lib/tty/link/terminals/jediterm.rb @@ -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 diff --git a/spec/unit/link_spec.rb b/spec/unit/link_spec.rb index fbd4263..17da17c 100644 --- a/spec/unit/link_spec.rb +++ b/spec/unit/link_spec.rb @@ -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"} diff --git a/spec/unit/terminals/jediterm_spec.rb b/spec/unit/terminals/jediterm_spec.rb new file mode 100644 index 0000000..5cf4b6d --- /dev/null +++ b/spec/unit/terminals/jediterm_spec.rb @@ -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