Class: Ace::Tmux::CLI::Commands::Window

Inherits:
Support::Cli::Command
  • Object
show all
Includes:
Support::Cli::Base
Defined in:
lib/ace/tmux/cli/commands/window.rb

Overview

Add a window to an existing session from a preset

Instance Method Summary collapse

Instance Method Details

#call(preset: nil, **options) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/ace/tmux/cli/commands/window.rb', line 42

def call(preset: nil, **options)
  config = Tmux.config
  tmux_bin = config.dig("tmux_binary") || "tmux"

  preset ||= config.dig("defaults", "window")
  raise Ace::Support::Cli::Error.new("No preset specified and no default window configured") unless preset

  preset_loader = Molecules::PresetLoader.new(
    gem_root: Tmux.gem_root
  )
  session_builder = Molecules::SessionBuilder.new(
    preset_loader: preset_loader
  )
  executor = Molecules::TmuxExecutor.new
  manager = Organisms::WindowManager.new(
    executor: executor,
    session_builder: session_builder,
    tmux: tmux_bin
  )

  effective_name = options[:name] || (options[:root] ? File.basename(options[:root]) : preset)
  puts "Adding window '#{effective_name}' (preset: #{preset})..." unless options[:quiet]
  manager.add_window(preset, session: options[:session], root: options[:root], name: options[:name])
  puts "Window '#{effective_name}' added." unless options[:quiet]
rescue Ace::Tmux::PresetNotFoundError => e
  raise Ace::Support::Cli::Error.new(e.message)
rescue Ace::Tmux::NotInTmuxError => e
  raise Ace::Support::Cli::Error.new(e.message)
end