tmuxinator 3.3.4 → 3.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0cb65a3fb5e0efb97b014caaf4bd1592508b5ee6502ed97b4088c66504750b46
4
- data.tar.gz: 617eb45c7c9f093c2dc25ebe266ba620cc1a27d85970ceef0fa0eb4eeb4d73d0
3
+ metadata.gz: e954effc3cf016798540aa6c25ddf5465797a6653fb9400616d288892bde9c9c
4
+ data.tar.gz: b501066e62a1cb5b46d286e86bfc866ebeefbbadf157e588a4934dbdd41eb7d4
5
5
  SHA512:
6
- metadata.gz: 71a996aab90fa249664b58ae6c7b70bbb1f2d49fa9dbc93437b836813155ac119e5643504cfc8291f0fca2854b826c363d2466f0e294585d46d7a73c26dc23db
7
- data.tar.gz: 596e41873c37d199fd954c0078f026996dad916f5f9dc8b394f670cbadda44e3a8e371f3c7e7e855f36c83f9b4b0055d57e1d80856365853865e60ee55c6e431
6
+ metadata.gz: e29c29f221505b683afb040e11b9e771a3a6b4526e5f716c8c52fe06c27dc642577c6e1f02ff2ead907bcac72ce81b778e65c9763b1adfc0b5d3d4c621b5caad
7
+ data.tar.gz: 4429eb7736ef16c2d78acb2a70c27df6843bd7dcb1d6abef1940e7852735436e6d8d709e5ac8b6de5041968232cd062b727a03dd3f92af9eb31ba7944677c33d
@@ -1,22 +1,17 @@
1
1
  function __fish_tmuxinator_using_command
2
- set cmd (commandline -opc)
3
- if [ (count $cmd) -gt 1 ]
4
- if [ $argv[1] = $cmd[2] ]
5
- return 0
2
+ set cmd (commandline -opc)
3
+ if [ (count $cmd) -gt 1 ]
4
+ if [ $argv[1] = $cmd[2] ]
5
+ return 0
6
+ end
6
7
  end
7
- end
8
- return 1
8
+ return 1
9
9
  end
10
10
 
11
- set __fish_tmuxinator_program_cmd (commandline -o)[1]
12
-
13
- function __fish_tmuxinator_program
14
- eval "$__fish_tmuxinator_program_cmd $argv"
15
- end
16
-
17
- complete -f -c $__fish_tmuxinator_program_cmd -a '(__fish_tmuxinator_program completions start)'
18
- complete -f -c $__fish_tmuxinator_program_cmd -n '__fish_use_subcommand' -x -a "(__fish_tmuxinator_program commands)"
19
- complete -f -c $__fish_tmuxinator_program_cmd -n '__fish_tmuxinator_using_command start' -a "(__fish_tmuxinator_program completions start)"
20
- complete -f -c $__fish_tmuxinator_program_cmd -n '__fish_tmuxinator_using_command open' -a "(__fish_tmuxinator_program completions open)"
21
- complete -f -c $__fish_tmuxinator_program_cmd -n '__fish_tmuxinator_using_command copy' -a "(__fish_tmuxinator_program completions copy)"
22
- complete -f -c $__fish_tmuxinator_program_cmd -n '__fish_tmuxinator_using_command delete' -a "(__fish_tmuxinator_program completions delete)"
11
+ complete --no-files --command tmuxinator --condition __fish_use_subcommand --exclusive --argument "(tmuxinator commands)"
12
+ complete --no-files --command tmuxinator --condition '__fish_tmuxinator_using_command start' --argument "(tmuxinator completions start)"
13
+ complete --no-files --command tmuxinator --condition '__fish_tmuxinator_using_command open' --argument "(tmuxinator completions open)"
14
+ complete --no-files --command tmuxinator --condition '__fish_tmuxinator_using_command edit' --argument "(tmuxinator completions open)"
15
+ complete --no-files --command tmuxinator --condition '__fish_tmuxinator_using_command copy' --argument "(tmuxinator completions copy)"
16
+ complete --no-files --command tmuxinator --condition '__fish_tmuxinator_using_command delete' --argument "(tmuxinator completions delete)"
17
+ complete --no-files --command tmuxinator --condition '__fish_tmuxinator_using_command debug' --argument "(tmuxinator completions start)"
@@ -15,25 +15,26 @@ module Tmuxinator
15
15
  COMMANDS = {
16
16
  commands: "Lists commands available in tmuxinator",
17
17
  completions: "Used for shell completion",
18
- new: "Create a new project file and open it in your editor",
18
+ copy: %w{
19
+ Copy an existing project to a new project and
20
+ open it in your editor
21
+ }.join(" "),
22
+ debug: "Output the shell commands that are generated by tmuxinator",
23
+ delete: "Deletes given project",
24
+ doctor: "Look for problems in your configuration",
19
25
  edit: "Alias of new",
26
+ implode: "Deletes all tmuxinator projects",
27
+ local: "Start a tmux session using ./.tmuxinator.y[a]ml",
28
+ list: "Lists all tmuxinator projects",
29
+ new: "Create a new project file and open it in your editor",
20
30
  open: "Alias of new",
21
31
  start: %w{
22
32
  Start a tmux session using a project's name (with an optional [ALIAS]
23
33
  for project reuse) or a path to a project config file (via the -p flag)
24
34
  }.join(" "),
25
35
  stop: "Stop a tmux session using a project's tmuxinator config",
26
- local: "Start a tmux session using ./.tmuxinator.y[a]ml",
27
- debug: "Output the shell commands that are generated by tmuxinator",
28
- copy: %w{
29
- Copy an existing project to a new project and
30
- open it in your editor
31
- }.join(" "),
32
- delete: "Deletes given project",
33
- implode: "Deletes all tmuxinator projects",
36
+ stop_all: "Stop all tmux sessions which are using tmuxinator projects",
34
37
  version: "Display installed tmuxinator version",
35
- doctor: "Look for problems in your configuration",
36
- list: "Lists all tmuxinator projects"
37
38
  }.freeze
38
39
 
39
40
  # For future reference: due to how tmuxinator currently consumes
@@ -93,7 +94,7 @@ module Tmuxinator
93
94
 
94
95
  no_commands do
95
96
  def new_project(name)
96
- project_file = find_project_file(name, options[:local])
97
+ project_file = find_project_file(name, local: options[:local])
97
98
  Kernel.system("$EDITOR #{project_file}") || doctor
98
99
  end
99
100
 
@@ -145,14 +146,14 @@ module Tmuxinator
145
146
  end
146
147
  }
147
148
 
148
- path = config_path(name, options[:local])
149
+ path = config_path(name, local: options[:local])
149
150
  File.open(path, "w") do |f|
150
151
  f.write(YAML.dump(yaml))
151
152
  end
152
153
  end
153
154
 
154
- def find_project_file(name, local = false)
155
- path = config_path(name, local)
155
+ def find_project_file(name, local: false)
156
+ path = config_path(name, local: local)
156
157
  if File.exist?(path)
157
158
  path
158
159
  else
@@ -160,7 +161,7 @@ module Tmuxinator
160
161
  end
161
162
  end
162
163
 
163
- def config_path(name, local = false)
164
+ def config_path(name, local: false)
164
165
  if local
165
166
  Tmuxinator::Config::LOCAL_DEFAULTS[0]
166
167
  else
@@ -215,7 +216,7 @@ module Tmuxinator
215
216
  def show_continuation_prompt
216
217
  say
217
218
  print "Press ENTER to continue."
218
- STDIN.getc
219
+ $stdin.getc
219
220
  end
220
221
 
221
222
  def kill_project(project)
@@ -295,6 +296,26 @@ module Tmuxinator
295
296
  kill_project(project)
296
297
  end
297
298
 
299
+ desc "stop-all", COMMANDS[:stop_all]
300
+ method_option :noconfirm, type: :boolean,
301
+ default: false,
302
+ aliases: "-y",
303
+ desc: "Skip confirmation"
304
+ def stop_all
305
+ # We only need to stop active projects
306
+ configs = Tmuxinator::Config.configs(active: true)
307
+
308
+ unless options[:noconfirm]
309
+ say "Stop all active projects:\n\n", :yellow
310
+ say configs.join("\n")
311
+ say "\n"
312
+
313
+ return unless yes?("Are you sure? (n/y)")
314
+ end
315
+
316
+ Project.stop_all
317
+ end
318
+
298
319
  desc "local", COMMANDS[:local]
299
320
  map "." => :local
300
321
  method_option "suppress-tmux-version-warning",
@@ -20,7 +20,7 @@ module Tmuxinator
20
20
  end
21
21
 
22
22
  def home
23
- ENV["HOME"] + "/.tmuxinator"
23
+ "#{ENV['HOME']}/.tmuxinator"
24
24
  end
25
25
 
26
26
  def home?
@@ -31,7 +31,9 @@ module Tmuxinator
31
31
  # a custom value. (e.g. if $XDG_CONFIG_HOME is set to ~/my-config, the
32
32
  # return value will be ~/my-config/tmuxinator)
33
33
  def xdg
34
- XDG["CONFIG"].to_s + "/tmuxinator"
34
+ xdg_config_directory = ENV.fetch("XDG_CONFIG_HOME", "~/.config")
35
+ config_home = File.expand_path(xdg_config_directory)
36
+ File.join(config_home, "tmuxinator")
35
37
  end
36
38
 
37
39
  def xdg?
@@ -131,7 +133,7 @@ module Tmuxinator
131
133
  `tmux list-sessions -F "#S"`.split("\n")
132
134
  end
133
135
 
134
- # Sorted list of all project .yml file basenames, including duplicates
136
+ # Sorted list of all project file basenames, including duplicates.
135
137
  #
136
138
  # @param active filter configs by active project sessions
137
139
  # @return [Array<String>] list of project names
@@ -147,6 +149,16 @@ module Tmuxinator
147
149
  configs
148
150
  end
149
151
 
152
+ # List the names of all config files relative to the config directory.
153
+ #
154
+ # If sub-folders are used, those are part of the name too.
155
+ #
156
+ # Example:
157
+ # $CONFIG_DIR/project.yml -> project
158
+ # $CONFIG_DIR/sub/project.yml -> sub/project
159
+ # $HOME_CONFIG_DIR/project.yml -> project
160
+ #
161
+ # @return [Array<String] a list of config file names
150
162
  def config_file_basenames
151
163
  directories.flat_map do |directory|
152
164
  Dir["#{directory}/**/*.yml"].map do |path|
@@ -193,7 +205,7 @@ module Tmuxinator
193
205
  name = options[:name]
194
206
  options[:force_attach] ||= false
195
207
  options[:force_detach] ||= false
196
- project_config = options.fetch(:project_config) { false }
208
+ project_config = options.fetch(:project_config, false)
197
209
  project_file = if valid_project_config?(project_config)
198
210
  project_config
199
211
  elsif valid_local_project?(name)
@@ -36,37 +36,49 @@ module Tmuxinator
36
36
  `on_project_exit`) and will be removed in a future release.
37
37
  M
38
38
 
39
- attr_reader :yaml
40
- attr_reader :force_attach
41
- attr_reader :force_detach
42
- attr_reader :custom_name
43
- attr_reader :no_pre_window
44
-
45
- def self.load(path, options = {})
46
- yaml = begin
47
- args = options[:args] || []
48
- @settings = parse_settings(args)
49
- @args = args
50
-
51
- content = render_template(path, binding)
52
- YAML.safe_load(content, aliases: true)
53
- rescue SyntaxError, StandardError => error
54
- raise "Failed to parse config file: #{error.message}"
39
+ attr_reader :yaml, :force_attach, :force_detach, :custom_name,
40
+ :no_pre_window
41
+
42
+ class << self
43
+ include Tmuxinator::Util
44
+
45
+ def load(path, options = {})
46
+ yaml = begin
47
+ args = options[:args] || []
48
+ @settings = parse_settings(args)
49
+ @args = args
50
+
51
+ content = render_template(path, binding)
52
+ YAML.safe_load(content, aliases: true)
53
+ rescue SyntaxError, StandardError => e
54
+ raise "Failed to parse config file: #{e.message}"
55
+ end
56
+
57
+ new(yaml, options)
55
58
  end
56
59
 
57
- new(yaml, options)
58
- end
60
+ def parse_settings(args)
61
+ settings = args.select { |x| x.match(/.*=.*/) }
62
+ args.reject! { |x| x.match(/.*=.*/) }
59
63
 
60
- def self.parse_settings(args)
61
- settings = args.select { |x| x.match(/.*=.*/) }
62
- args.reject! { |x| x.match(/.*=.*/) }
64
+ settings.map! do |setting|
65
+ parts = setting.split("=", 2)
66
+ [parts[0], parts[1]]
67
+ end
63
68
 
64
- settings.map! do |setting|
65
- parts = setting.split("=")
66
- [parts[0], parts[1]]
69
+ Hash[settings]
67
70
  end
68
71
 
69
- Hash[settings]
72
+ def active
73
+ Tmuxinator::Config.configs(active: true).
74
+ map { |config| Config.validate(name: config) }
75
+ end
76
+
77
+ def stop_all
78
+ active.
79
+ sort_by { |project| project.name == current_session_name ? 1 : 0 }.
80
+ each { |project| Kernel.system(project.kill) }
81
+ end
70
82
  end
71
83
 
72
84
  def validate!
@@ -135,10 +147,6 @@ module Tmuxinator
135
147
  blank?(root) ? nil : File.expand_path(root).shellescape
136
148
  end
137
149
 
138
- def current_session_name
139
- `[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"`.strip
140
- end
141
-
142
150
  def name
143
151
  name =
144
152
  if append?
@@ -160,13 +168,8 @@ module Tmuxinator
160
168
  end
161
169
 
162
170
  def attach?
163
- yaml_attach = if yaml["attach"].nil?
164
- true
165
- else
166
- yaml["attach"]
167
- end
168
- attach = force_attach || !force_detach && yaml_attach
169
- attach
171
+ yaml_attach = yaml["attach"].nil? || yaml["attach"]
172
+ force_attach || !force_detach && yaml_attach
170
173
  end
171
174
 
172
175
  def pre_window
@@ -402,17 +405,16 @@ module Tmuxinator
402
405
 
403
406
  def pane_title_position_not_valid_warning
404
407
  print_warning(
405
- "The specified pane title position " +
406
- "\"#{yaml['pane_title_position']}\" is not valid. " +
407
- "Please choose one of: top, bottom, or off."
408
+ "The specified pane title position '#{yaml['pane_title_position']}' " \
409
+ "is not valid. Please choose one of: top, bottom, or off."
408
410
  )
409
411
  end
410
412
 
411
413
  def pane_titles_not_supported_warning
412
414
  print_warning(
413
- "You have enabled pane titles in your configuration, " +
414
- "but the feature is not supported by your version of tmux.\n" +
415
- "Please consider upgrading to a version that supports it (tmux >=2.6)."
415
+ "You have enabled pane titles in your configuration, but the " \
416
+ "feature is not supported by your version of tmux.\nPlease consider " \
417
+ "upgrading to a version that supports it (tmux >=2.6)."
416
418
  )
417
419
  end
418
420
 
@@ -12,5 +12,9 @@ module Tmuxinator
12
12
  def yes_no(condition)
13
13
  condition ? say("Yes", :green) : say("No", :red)
14
14
  end
15
+
16
+ def current_session_name
17
+ `[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"`.strip
18
+ end
15
19
  end
16
20
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Tmuxinator
4
- VERSION = "3.3.4"
4
+ VERSION = "3.3.5"
5
5
  end
@@ -29,7 +29,7 @@ module Tmuxinator
29
29
  end
30
30
 
31
31
  def layout
32
- yaml["layout"] ? yaml["layout"].shellescape : nil
32
+ yaml["layout"]&.shellescape
33
33
  end
34
34
 
35
35
  def synchronize
@@ -139,7 +139,7 @@ module Tmuxinator
139
139
  end
140
140
 
141
141
  def synchronize_before?
142
- synchronize == true || synchronize == "before"
142
+ [true, "before"].include?(synchronize)
143
143
  end
144
144
 
145
145
  def synchronize_after?
data/lib/tmuxinator.rb CHANGED
@@ -5,7 +5,6 @@ require "fileutils"
5
5
  require "shellwords"
6
6
  require "thor"
7
7
  require "thor/version"
8
- require "xdg"
9
8
  require "yaml"
10
9
 
11
10
  module Tmuxinator
@@ -198,21 +198,24 @@ describe Tmuxinator::Cli do
198
198
 
199
199
  it "lists the commands" do
200
200
  out, _err = capture_io { cli.start }
201
- expected = %w(commands
202
- completions
203
- new
204
- edit
205
- open
206
- start
207
- stop
208
- local
209
- debug
210
- copy
211
- delete
212
- implode
213
- version
214
- doctor
215
- list)
201
+ expected = %w(
202
+ commands
203
+ completions
204
+ copy
205
+ debug
206
+ delete
207
+ doctor
208
+ edit
209
+ implode
210
+ local
211
+ list
212
+ new
213
+ open
214
+ start
215
+ stop
216
+ stop_all
217
+ version
218
+ )
216
219
  expect(out).to eq "#{expected.join("\n")}\n"
217
220
  end
218
221
  end
@@ -379,6 +382,20 @@ describe Tmuxinator::Cli do
379
382
  end
380
383
  end
381
384
 
385
+ describe "#stop_all" do
386
+ before do
387
+ allow(Tmuxinator::Config).to receive_messages(validate: project)
388
+ allow(Tmuxinator::Config).to receive_messages(version: 1.9)
389
+ end
390
+
391
+ it "stops all projects" do
392
+ ARGV.replace(["stop-all", "--noconfirm"])
393
+ out, err = capture_io { cli.start }
394
+ expect(err).to eq ""
395
+ expect(out).to eq ""
396
+ end
397
+ end
398
+
382
399
  describe "#local" do
383
400
  before do
384
401
  allow(Tmuxinator::Config).to receive_messages(validate: project)
@@ -907,7 +924,7 @@ describe Tmuxinator::Cli do
907
924
  end
908
925
 
909
926
  it "should generate a project file" do
910
- new_path = described_class.new.find_project_file(name, false)
927
+ new_path = described_class.new.find_project_file(name, local: false)
911
928
  expect(new_path).to eq path
912
929
  expect(File).to exist new_path
913
930
  end
@@ -929,7 +946,7 @@ describe Tmuxinator::Cli do
929
946
  end
930
947
 
931
948
  it "should _not_ generate a new project file" do
932
- new_path = described_class.new.find_project_file(name, false)
949
+ new_path = described_class.new.find_project_file(name, local: false)
933
950
  expect(new_path).to eq path
934
951
  expect(File).to exist new_path
935
952
  expect(File.read(new_path)).to match %r{#{extra}}
@@ -55,7 +55,8 @@ describe Tmuxinator::Config do
55
55
 
56
56
  Dir.mktmpdir do |dir|
57
57
  config_parent = "#{dir}/non_existent_parent/s"
58
- allow(XDG).to receive(:[]).with("CONFIG").and_return config_parent
58
+ allow(ENV).to receive(:fetch).with("XDG_CONFIG_HOME", "~/.config").
59
+ and_return config_parent
59
60
  expect(described_class.directory).
60
61
  to eq "#{config_parent}/tmuxinator"
61
62
  expect(File.directory?("#{config_parent}/tmuxinator")).to be true
@@ -69,7 +70,6 @@ describe Tmuxinator::Config do
69
70
  it "is $TMUXINATOR_CONFIG" do
70
71
  allow(ENV).to receive(:[]).with("TMUXINATOR_CONFIG").
71
72
  and_return "expected"
72
- # allow(XDG).to receive(:[]).with("CONFIG").and_return "expected"
73
73
  allow(File).to receive(:directory?).and_return true
74
74
  expect(described_class.environment).to eq "expected"
75
75
  end
@@ -87,7 +87,6 @@ describe Tmuxinator::Config do
87
87
 
88
88
  context "environment variable $TMUXINATOR_CONFIG is set and empty" do
89
89
  it "is an empty string" do
90
- allow(XDG).to receive(:[]).with("CONFIG").and_return ""
91
90
  allow(ENV).to receive(:[]).with("TMUXINATOR_CONFIG").and_return ""
92
91
  expect(described_class.environment).to eq ""
93
92
  end
@@ -136,7 +135,7 @@ describe Tmuxinator::Config do
136
135
 
137
136
  describe "#xdg" do
138
137
  it "is $XDG_CONFIG_HOME/tmuxinator" do
139
- expect(described_class.xdg).to eq "#{XDG['CONFIG_HOME']}/tmuxinator"
138
+ expect(described_class.xdg).to eq File.expand_path("~/.config/tmuxinator")
140
139
  end
141
140
  end
142
141
 
@@ -181,7 +180,8 @@ describe Tmuxinator::Config do
181
180
 
182
181
  before do
183
182
  expect(Tmuxinator::Doctor).to receive(:installed?).and_return(true)
184
- allow_any_instance_of(Kernel).to receive(:`).with(/tmux\s\-V/).
183
+ allow_any_instance_of(Kernel).to receive(:`).
184
+ with(/tmux\s-V/).
185
185
  and_return("tmux #{version}")
186
186
  end
187
187
 
@@ -665,7 +665,7 @@ describe Tmuxinator::Project do
665
665
  end
666
666
 
667
667
  describe "::parse_settings" do
668
- let(:args) { ["one", "two=three"] }
668
+ let(:args) { ["one", "two=three", "four=five=six"] }
669
669
 
670
670
  it "returns settings in a hash" do
671
671
  expect(described_class.parse_settings(args)["two"]).to eq("three")
@@ -675,6 +675,10 @@ describe Tmuxinator::Project do
675
675
  described_class.parse_settings(args)
676
676
  expect(args).to eq(["one"])
677
677
  end
678
+
679
+ it "handles equals signs in values" do
680
+ expect(described_class.parse_settings(args)["four"]).to eq("five=six")
681
+ end
678
682
  end
679
683
 
680
684
  describe "#validate!" do
@@ -12,7 +12,7 @@ describe Tmuxinator::WemuxSupport do
12
12
  it "renders the template" do
13
13
  expect(File).to receive(:read).at_least(:once) { "wemux ls 2>/dev/null" }
14
14
 
15
- expect(instance.render).to match %r{wemux.ls.2>\/dev\/null}
15
+ expect(instance.render).to match %r{wemux.ls.2>/dev/null}
16
16
  end
17
17
  end
18
18
 
data/spec/spec_helper.rb CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  require "pry"
4
4
  require "simplecov"
5
- require "xdg"
6
5
 
7
6
  SimpleCov.start do
8
7
  if ENV["CI"]
@@ -59,11 +58,11 @@ def tmux_config(options = {})
59
58
  "bell-on-alert off",
60
59
  ]
61
60
 
62
- if base_index = options.fetch(:base_index) { 1 }
61
+ if base_index = options.fetch(:base_index, 1)
63
62
  standard_options << "base-index #{base_index}"
64
63
  end
65
64
 
66
- if pane_base_index = options.fetch(:pane_base_index) { 1 }
65
+ if pane_base_index = options.fetch(:pane_base_index, 1)
67
66
  standard_options << "pane-base-index #{pane_base_index}"
68
67
  end
69
68
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tmuxinator
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.4
4
+ version: 3.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Allen Bargi
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2025-03-20 00:00:00.000000000 Z
12
+ date: 2025-08-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: erubi
@@ -17,62 +17,42 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '1.7'
20
+ version: '1.13'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '1.7'
27
+ version: '1.13'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: thor
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: 1.3.0
34
+ version: 1.4.0
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: 1.3.0
41
+ version: 1.4.0
42
42
  - !ruby/object:Gem::Dependency
43
- name: xdg
43
+ name: amazing_print
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '2.2'
49
- - - ">="
50
- - !ruby/object:Gem::Version
51
- version: 2.2.5
52
- type: :runtime
53
- prerelease: false
54
- version_requirements: !ruby/object:Gem::Requirement
55
- requirements:
56
- - - "~>"
57
- - !ruby/object:Gem::Version
58
- version: '2.2'
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: 2.2.5
62
- - !ruby/object:Gem::Dependency
63
- name: awesome_print
64
- requirement: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '1.2'
48
+ version: '1.8'
69
49
  type: :development
70
50
  prerelease: false
71
51
  version_requirements: !ruby/object:Gem::Requirement
72
52
  requirements:
73
53
  - - "~>"
74
54
  - !ruby/object:Gem::Version
75
- version: '1.2'
55
+ version: '1.8'
76
56
  - !ruby/object:Gem::Dependency
77
57
  name: bundler
78
58
  requirement: !ruby/object:Gem::Requirement
@@ -93,98 +73,84 @@ dependencies:
93
73
  requirements:
94
74
  - - "~>"
95
75
  - !ruby/object:Gem::Version
96
- version: '4.8'
76
+ version: '6.5'
97
77
  type: :development
98
78
  prerelease: false
99
79
  version_requirements: !ruby/object:Gem::Requirement
100
80
  requirements:
101
81
  - - "~>"
102
82
  - !ruby/object:Gem::Version
103
- version: '4.8'
83
+ version: '6.5'
104
84
  - !ruby/object:Gem::Dependency
105
85
  name: pry
106
86
  requirement: !ruby/object:Gem::Requirement
107
87
  requirements:
108
88
  - - "~>"
109
89
  - !ruby/object:Gem::Version
110
- version: '0.10'
90
+ version: '0.15'
111
91
  type: :development
112
92
  prerelease: false
113
93
  version_requirements: !ruby/object:Gem::Requirement
114
94
  requirements:
115
95
  - - "~>"
116
96
  - !ruby/object:Gem::Version
117
- version: '0.10'
97
+ version: '0.15'
118
98
  - !ruby/object:Gem::Dependency
119
99
  name: rake
120
100
  requirement: !ruby/object:Gem::Requirement
121
101
  requirements:
122
102
  - - "~>"
123
103
  - !ruby/object:Gem::Version
124
- version: 12.3.3
104
+ version: '13.3'
125
105
  type: :development
126
106
  prerelease: false
127
107
  version_requirements: !ruby/object:Gem::Requirement
128
108
  requirements:
129
109
  - - "~>"
130
110
  - !ruby/object:Gem::Version
131
- version: 12.3.3
111
+ version: '13.3'
132
112
  - !ruby/object:Gem::Dependency
133
113
  name: rspec
134
114
  requirement: !ruby/object:Gem::Requirement
135
115
  requirements:
136
116
  - - "~>"
137
117
  - !ruby/object:Gem::Version
138
- version: '3.3'
118
+ version: '3.13'
139
119
  type: :development
140
120
  prerelease: false
141
121
  version_requirements: !ruby/object:Gem::Requirement
142
122
  requirements:
143
123
  - - "~>"
144
124
  - !ruby/object:Gem::Version
145
- version: '3.3'
125
+ version: '3.13'
146
126
  - !ruby/object:Gem::Dependency
147
127
  name: rubocop
148
128
  requirement: !ruby/object:Gem::Requirement
149
129
  requirements:
150
130
  - - "~>"
151
131
  - !ruby/object:Gem::Version
152
- version: 0.61.1
132
+ version: '1.79'
153
133
  type: :development
154
134
  prerelease: false
155
135
  version_requirements: !ruby/object:Gem::Requirement
156
136
  requirements:
157
137
  - - "~>"
158
138
  - !ruby/object:Gem::Version
159
- version: 0.61.1
139
+ version: '1.79'
160
140
  - !ruby/object:Gem::Dependency
161
141
  name: simplecov
162
142
  requirement: !ruby/object:Gem::Requirement
163
143
  requirements:
164
144
  - - "~>"
165
145
  - !ruby/object:Gem::Version
166
- version: '0.16'
167
- type: :development
168
- prerelease: false
169
- version_requirements: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - "~>"
172
- - !ruby/object:Gem::Version
173
- version: '0.16'
174
- - !ruby/object:Gem::Dependency
175
- name: unicode-display_width
176
- requirement: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - "~>"
179
- - !ruby/object:Gem::Version
180
- version: '1.3'
146
+ version: '0.22'
181
147
  type: :development
182
148
  prerelease: false
183
149
  version_requirements: !ruby/object:Gem::Requirement
184
150
  requirements:
185
151
  - - "~>"
186
152
  - !ruby/object:Gem::Version
187
- version: '1.3'
153
+ version: '0.22'
188
154
  description: Create and manage complex tmux sessions easily.
189
155
  email:
190
156
  - allen.bargi@gmail.com
@@ -267,12 +233,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
267
233
  requirements:
268
234
  - - ">="
269
235
  - !ruby/object:Gem::Version
270
- version: 2.6.7
236
+ version: '2.7'
271
237
  required_rubygems_version: !ruby/object:Gem::Requirement
272
238
  requirements:
273
239
  - - ">="
274
240
  - !ruby/object:Gem::Version
275
- version: 1.8.23
241
+ version: '2.7'
276
242
  requirements: []
277
243
  rubygems_version: 3.5.22
278
244
  signing_key: