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 +4 -4
- data/completion/tmuxinator.fish +13 -18
- data/lib/tmuxinator/cli.rb +38 -17
- data/lib/tmuxinator/config.rb +16 -4
- data/lib/tmuxinator/project.rb +44 -42
- data/lib/tmuxinator/util.rb +4 -0
- data/lib/tmuxinator/version.rb +1 -1
- data/lib/tmuxinator/window.rb +2 -2
- data/lib/tmuxinator.rb +0 -1
- data/spec/lib/tmuxinator/cli_spec.rb +34 -17
- data/spec/lib/tmuxinator/config_spec.rb +5 -5
- data/spec/lib/tmuxinator/project_spec.rb +5 -1
- data/spec/lib/tmuxinator/wemux_support_spec.rb +1 -1
- data/spec/spec_helper.rb +2 -3
- metadata +23 -57
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e954effc3cf016798540aa6c25ddf5465797a6653fb9400616d288892bde9c9c
|
4
|
+
data.tar.gz: b501066e62a1cb5b46d286e86bfc866ebeefbbadf157e588a4934dbdd41eb7d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e29c29f221505b683afb040e11b9e771a3a6b4526e5f716c8c52fe06c27dc642577c6e1f02ff2ead907bcac72ce81b778e65c9763b1adfc0b5d3d4c621b5caad
|
7
|
+
data.tar.gz: 4429eb7736ef16c2d78acb2a70c27df6843bd7dcb1d6abef1940e7852735436e6d8d709e5ac8b6de5041968232cd062b727a03dd3f92af9eb31ba7944677c33d
|
data/completion/tmuxinator.fish
CHANGED
@@ -1,22 +1,17 @@
|
|
1
1
|
function __fish_tmuxinator_using_command
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
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
|
-
|
8
|
-
return 1
|
8
|
+
return 1
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
complete -
|
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)"
|
data/lib/tmuxinator/cli.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
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
|
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
|
-
|
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",
|
data/lib/tmuxinator/config.rb
CHANGED
@@ -20,7 +20,7 @@ module Tmuxinator
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def home
|
23
|
-
ENV[
|
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
|
-
|
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
|
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
|
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)
|
data/lib/tmuxinator/project.rb
CHANGED
@@ -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
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
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
|
-
|
58
|
-
|
60
|
+
def parse_settings(args)
|
61
|
+
settings = args.select { |x| x.match(/.*=.*/) }
|
62
|
+
args.reject! { |x| x.match(/.*=.*/) }
|
59
63
|
|
60
|
-
|
61
|
-
|
62
|
-
|
64
|
+
settings.map! do |setting|
|
65
|
+
parts = setting.split("=", 2)
|
66
|
+
[parts[0], parts[1]]
|
67
|
+
end
|
63
68
|
|
64
|
-
|
65
|
-
parts = setting.split("=")
|
66
|
-
[parts[0], parts[1]]
|
69
|
+
Hash[settings]
|
67
70
|
end
|
68
71
|
|
69
|
-
|
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 =
|
164
|
-
|
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
|
-
"
|
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
|
-
"
|
415
|
-
"
|
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
|
|
data/lib/tmuxinator/util.rb
CHANGED
data/lib/tmuxinator/version.rb
CHANGED
data/lib/tmuxinator/window.rb
CHANGED
@@ -29,7 +29,7 @@ module Tmuxinator
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def layout
|
32
|
-
yaml["layout"]
|
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
|
-
|
142
|
+
[true, "before"].include?(synchronize)
|
143
143
|
end
|
144
144
|
|
145
145
|
def synchronize_after?
|
data/lib/tmuxinator.rb
CHANGED
@@ -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(
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
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(
|
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 "
|
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(:`).
|
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
|
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
|
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
|
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
|
+
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-
|
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.
|
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.
|
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.
|
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.
|
41
|
+
version: 1.4.0
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
43
|
+
name: amazing_print
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
46
|
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: '
|
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.
|
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: '
|
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: '
|
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.
|
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.
|
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:
|
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:
|
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.
|
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.
|
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:
|
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:
|
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.
|
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: '
|
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.
|
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:
|
241
|
+
version: '2.7'
|
276
242
|
requirements: []
|
277
243
|
rubygems_version: 3.5.22
|
278
244
|
signing_key:
|