tmuxinator 0.6.10.pre → 0.6.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7cf9390018701842df43e662ae82659def0a7493
4
- data.tar.gz: 57c891da937c5418bec18526d553fb2e1c6c7953
3
+ metadata.gz: ab460ec84cf4b9f4c3d6cbb6e80e21533657708b
4
+ data.tar.gz: 3afe10dbb7aef84ffca0703f6b5a91f6ba42af95
5
5
  SHA512:
6
- metadata.gz: eeabb93033c3714f2fe4778e7c6a1da3b29fa4256163364bf6009807176f422d49233d7a4e61aee6448acb96682f1f1cebdeadef9b262fbc3365d050c684780c
7
- data.tar.gz: 1907c39aab69f71534513707cd437d04cf06c042bf021a0cd5e0b1135bb03fbdca440d00fdabb11a158d7cb6f4e1d40bdea7d4f6c0e922ffb7552478a94b5cde
6
+ metadata.gz: 5ae774646eaa73bd3c08439a0ca6c9df1cbcac3e845e9d276a77a76759f2e6496c4eaa5f9bed078a9c3fb46d80f7c261d8327eb58652592d5663350c20204bc2
7
+ data.tar.gz: aadf6b72458ea3808703b46fa95fbda6958c8e8cf9d683ddcfe4dff8558bf63bfea7dec282685c2b32e6da49840b400173187fff5b91888d75f424ed13c409a9
data/bin/mux CHANGED
@@ -7,7 +7,7 @@ require "tmuxinator"
7
7
  if ARGV.length == 1
8
8
  name = ARGV[0]
9
9
 
10
- if Tmuxinator::Cli.new.command_hash.keys.include?(name.to_sym)
10
+ if Tmuxinator::Cli::COMMANDS.keys.include?(name.to_sym)
11
11
  Tmuxinator::Cli.start
12
12
  elsif Tmuxinator::Config.exists?(name)
13
13
  Tmuxinator::Cli.new.start(name)
data/bin/tmuxinator CHANGED
@@ -7,7 +7,7 @@ require "tmuxinator"
7
7
  if ARGV.length == 1
8
8
  name = ARGV[0]
9
9
 
10
- if Tmuxinator::Cli.new.command_hash.keys.include?(name.to_sym)
10
+ if Tmuxinator::Cli::COMMANDS.keys.include?(name.to_sym)
11
11
  Tmuxinator::Cli.start
12
12
  elsif Tmuxinator::Config.exists?(name)
13
13
  Tmuxinator::Cli.new.start(name)
@@ -18,6 +18,9 @@ root: ~/
18
18
  # Change the command to call tmux. This can be used by derivatives/wrappers like byobu.
19
19
  # tmux_command: byobu
20
20
 
21
+ # Specifies (by name or index) which window will be selected on project startup. If not set, the first window is used.
22
+ # startup_window: logs
23
+
21
24
  windows:
22
25
  - editor:
23
26
  layout: main-vertical
@@ -13,7 +13,11 @@ if [ "$?" -eq 1 ]; then
13
13
  <%= pre %>
14
14
 
15
15
  # Create the session and the first window.
16
+ <%- if windows.first.root? -%>
17
+ TMUX= <%= tmux %> new-session -d -s <%= name %> -n <%= windows.first.name %> <%= Tmuxinator::Config.default_path_option %> <%= windows.first.root %>
18
+ <%- else -%>
16
19
  TMUX= <%= tmux %> new-session -d -s <%= name %> -n <%= windows.first.name %>
20
+ <%- end -%>
17
21
 
18
22
  <%- if Tmuxinator::Config.version < 1.7 -%>
19
23
  # Set the default path for versions prior to 1.7
@@ -57,7 +61,7 @@ if [ "$?" -eq 1 ]; then
57
61
  <%- end -%>
58
62
  <%- end -%>
59
63
 
60
- <%= tmux %> select-window -t <%= base_index %>
64
+ <%= tmux %> select-window -t <%= startup_window %>
61
65
  fi
62
66
 
63
67
  if [ -z "$TMUX" ]; then
@@ -50,7 +50,7 @@ if [ "$?" -eq 127 ]; then
50
50
  <%- end -%>
51
51
  <%- end -%>
52
52
 
53
- <%= tmux %> select-window -t <%= base_index %>
53
+ <%= tmux %> select-window -t <%= startup_window %>
54
54
  fi
55
55
 
56
56
  wemux attach
@@ -2,44 +2,38 @@ module Tmuxinator
2
2
  class Cli < Thor
3
3
  include Tmuxinator::Util
4
4
 
5
- attr_reader :command_hash
6
-
7
- def initialize(*args)
8
- super
9
-
10
- @command_hash = {
11
- commands: "Lists commands available in tmuxinator",
12
- completions: "Used for shell completion",
13
- new: "Create a new project file and open it in your editor",
14
- open: "Alias of new",
15
- start: "Start a tmux session using a project's tmuxinator config",
16
- debug: "Output the shell commands that are generated by tmuxinator",
17
- copy: "Copy an existing project to a new project and open it in your editor",
18
- delete: "Deletes given project",
19
- implode: "Deletes all tmuxinator projects",
20
- version: "Display installed tmuxinator version",
21
- doctor: "Look for problems in your configuration"
22
- }
23
-
24
- end
5
+ COMMANDS = {
6
+ commands: "Lists commands available in tmuxinator",
7
+ completions: "Used for shell completion",
8
+ new: "Create a new project file and open it in your editor",
9
+ open: "Alias of new",
10
+ start: "Start a tmux session using a project's tmuxinator config",
11
+ debug: "Output the shell commands that are generated by tmuxinator",
12
+ copy: "Copy an existing project to a new project and open it in your editor",
13
+ delete: "Deletes given project",
14
+ implode: "Deletes all tmuxinator projects",
15
+ version: "Display installed tmuxinator version",
16
+ doctor: "Look for problems in your configuration",
17
+ list: "Lists all tmuxinator projects"
18
+ }
25
19
 
26
20
  package_name "tmuxinator" unless Gem::Version.create(Thor::VERSION) < Gem::Version.create("0.18")
27
21
 
28
- desc "commands", "Lists commands available in tmuxinator"
22
+ desc "commands", COMMANDS[:commands]
29
23
 
30
24
  def commands(shell = nil)
31
25
  out = if shell == "zsh"
32
- command_hash.map do |command, desc|
26
+ COMMANDS.map do |command, desc|
33
27
  "#{command}:#{desc}"
34
28
  end.join("\n")
35
29
  else
36
- command_hash.keys.join("\n")
30
+ COMMANDS.keys.join("\n")
37
31
  end
38
32
 
39
33
  puts out
40
34
  end
41
35
 
42
- desc "completions [arg1 arg2]", "Used for shell completion"
36
+ desc "completions [arg1 arg2]", COMMANDS[:completions]
43
37
 
44
38
  def completions(arg)
45
39
  if %w(start open copy delete).include?(arg)
@@ -48,9 +42,11 @@ module Tmuxinator
48
42
  end
49
43
  end
50
44
 
51
- desc "new [PROJECT]", "Create a new project file and open it in your editor"
45
+ desc "new [PROJECT]", COMMANDS[:new]
52
46
  map "open" => :new
47
+ map "edit" => :new
53
48
  map "o" => :new
49
+ map "e" => :new
54
50
  map "n" => :new
55
51
 
56
52
  def new(name)
@@ -65,7 +61,7 @@ module Tmuxinator
65
61
  Kernel.system("$EDITOR #{config}") || doctor
66
62
  end
67
63
 
68
- desc "start [PROJECT]", "Start a tmux session using a project's tmuxinator config"
64
+ desc "start [PROJECT]", COMMANDS[:start]
69
65
  map "s" => :start
70
66
 
71
67
  def start(name)
@@ -81,14 +77,14 @@ module Tmuxinator
81
77
  Kernel.exec(project.render)
82
78
  end
83
79
 
84
- desc "debug [PROJECT]", "Output the shell commands that are generated by tmuxinator"
80
+ desc "debug [PROJECT]", COMMANDS[:debug]
85
81
 
86
82
  def debug(name)
87
83
  project = Tmuxinator::Config.validate(name)
88
84
  puts project.render
89
85
  end
90
86
 
91
- desc "copy [EXISTING] [NEW]", "Copy an existing project to a new project and open it in your editor"
87
+ desc "copy [EXISTING] [NEW]", COMMANDS[:copy]
92
88
  map "c" => :copy
93
89
  map "cp" => :copy
94
90
 
@@ -106,7 +102,7 @@ module Tmuxinator
106
102
  Kernel.system("$EDITOR #{new_config_path}")
107
103
  end
108
104
 
109
- desc "delete [PROJECT]", "Deletes given project"
105
+ desc "delete [PROJECT]", COMMANDS[:delete]
110
106
  map "d" => :delete
111
107
  map "rm" => :delete
112
108
 
@@ -123,7 +119,7 @@ module Tmuxinator
123
119
  end
124
120
  end
125
121
 
126
- desc "implode", "Deletes all tmuxinator projects"
122
+ desc "implode", COMMANDS[:implode]
127
123
  map "i" => :implode
128
124
 
129
125
  def implode
@@ -133,7 +129,7 @@ module Tmuxinator
133
129
  end
134
130
  end
135
131
 
136
- desc "list", "Lists all tmuxinator projects"
132
+ desc "list", COMMANDS[:list]
137
133
  map "l" => :list
138
134
  map "ls" => :list
139
135
 
@@ -143,14 +139,14 @@ module Tmuxinator
143
139
  print_in_columns Tmuxinator::Config.configs
144
140
  end
145
141
 
146
- desc "version", "Display installed tmuxinator version"
142
+ desc "version", COMMANDS[:version]
147
143
  map "-v" => :version
148
144
 
149
145
  def version
150
146
  say "tmuxinator #{Tmuxinator::VERSION}"
151
147
  end
152
148
 
153
- desc "doctor", "Look for problems in your configuration"
149
+ desc "doctor", COMMANDS[:doctor]
154
150
 
155
151
  def doctor
156
152
  say "Checking if tmux is installed ==> "
@@ -44,7 +44,7 @@ module Tmuxinator
44
44
 
45
45
  def project(name)
46
46
  projects = Dir.glob("#{root}/**/*.yml")
47
- project_file = projects.detect { |project| project =~ /^#{name}.yml$/ }
47
+ project_file = projects.detect { |project| File.basename(project, ".yml") == name }
48
48
  project_file || "#{root}/#{name}.yml"
49
49
  end
50
50
 
@@ -71,7 +71,7 @@ module Tmuxinator
71
71
  config_path = Tmuxinator::Config.project(name)
72
72
 
73
73
  yaml = begin
74
- YAML.load(File.read(config_path))
74
+ YAML.load(Erubis::Eruby.new(File.read(config_path)).result(binding))
75
75
  rescue SyntaxError, StandardError
76
76
  puts "Failed to parse config file. Please check your formatting."
77
77
  exit!
@@ -26,7 +26,8 @@ module Tmuxinator
26
26
  end
27
27
 
28
28
  def tmux_split_command
29
- "#{project.tmux} splitw -t #{tab.tmux_window_target}"
29
+ path = tab.root? ? "#{Tmuxinator::Config.default_path_option} #{tab.root}" : nil
30
+ "#{project.tmux} splitw #{path} -t #{tab.tmux_window_target}"
30
31
  end
31
32
 
32
33
  def last?
@@ -95,6 +95,10 @@ module Tmuxinator
95
95
  get_pane_base_index ? get_pane_base_index.to_i : get_base_index.to_i
96
96
  end
97
97
 
98
+ def startup_window
99
+ yaml["startup_window"] || base_index
100
+ end
101
+
98
102
  def tmux_options?
99
103
  yaml["tmux_options"]
100
104
  end
@@ -1,3 +1,3 @@
1
1
  module Tmuxinator
2
- VERSION = "0.6.10.pre"
2
+ VERSION = "0.6.10"
3
3
  end
@@ -2,10 +2,11 @@ module Tmuxinator
2
2
  class Window
3
3
  include Tmuxinator::Util
4
4
 
5
- attr_reader :name, :panes, :layout, :commands, :index, :project
5
+ attr_reader :name, :root, :panes, :layout, :commands, :index, :project
6
6
 
7
7
  def initialize(window_yaml, index, project)
8
8
  @name = !window_yaml.keys.first.nil? ? window_yaml.keys.first.shellescape : nil
9
+ @root = nil
9
10
  @panes = []
10
11
  @layout = nil
11
12
  @pre = nil
@@ -17,6 +18,7 @@ module Tmuxinator
17
18
  if value.is_a?(Hash)
18
19
  @layout = value["layout"] ? value["layout"].shellescape : nil
19
20
  @pre = value["pre"] if value["pre"]
21
+ @root = value["root"] ? File.expand_path(value["root"]).shellescape : project.root? ? project.root : nil
20
22
 
21
23
  @panes = build_panes(value["panes"])
22
24
  else
@@ -58,6 +60,10 @@ module Tmuxinator
58
60
  end
59
61
  end
60
62
 
63
+ def root?
64
+ !root.nil?
65
+ end
66
+
61
67
  def panes?
62
68
  panes.any?
63
69
  end
@@ -75,7 +81,7 @@ module Tmuxinator
75
81
  end
76
82
 
77
83
  def tmux_new_window_command
78
- path = project.root? ? "#{Tmuxinator::Config.default_path_option} #{File.expand_path(project.root)}" : nil
84
+ path = root? ? "#{Tmuxinator::Config.default_path_option} #{root}" : nil
79
85
  "#{project.tmux} new-window #{path} -t #{tmux_window_target} -n #{name}"
80
86
  end
81
87
 
@@ -1,6 +1,6 @@
1
1
  FactoryGirl.define do
2
2
  factory :project, :class => Tmuxinator::Project do
3
- ignore do
3
+ transient do
4
4
  file { YAML.load(File.read("#{File.expand_path("spec/fixtures/sample.yml")}")) }
5
5
  end
6
6
 
@@ -8,7 +8,7 @@ FactoryGirl.define do
8
8
  end
9
9
 
10
10
  factory :project_with_deprecations, :class => Tmuxinator::Project do
11
- ignore do
11
+ transient do
12
12
  file { YAML.load(File.read("#{File.expand_path("spec/fixtures/sample.deprecations.yml")}")) }
13
13
  end
14
14
 
@@ -16,7 +16,7 @@ FactoryGirl.define do
16
16
  end
17
17
 
18
18
  factory :wemux_project, :class => Tmuxinator::Project do
19
- ignore do
19
+ transient do
20
20
  file { YAML.load(File.read("#{File.expand_path("spec/fixtures/sample_wemux.yml")}")) }
21
21
  end
22
22
 
@@ -36,7 +36,7 @@ describe Tmuxinator::Cli do
36
36
 
37
37
  it "lists the commands" do
38
38
  out, _ = capture_io { cli.start }
39
- expect(out).to eq "#{%w(commands completions new open start debug copy delete implode version doctor).join("\n")}\n"
39
+ expect(out).to eq "#{%w(commands completions new open start debug copy delete implode version doctor list).join("\n")}\n"
40
40
  end
41
41
  end
42
42
 
@@ -206,6 +206,24 @@ describe Tmuxinator::Project do
206
206
  end
207
207
  end
208
208
 
209
+ describe "#startup_window" do
210
+ context "startup window specified" do
211
+ it "gets the startup window from project config" do
212
+ project.yaml["startup_window"] = "logs"
213
+
214
+ expect(project.startup_window).to eq("logs")
215
+ end
216
+ end
217
+
218
+ context "startup window not specified" do
219
+ it "returns base index instead" do
220
+ allow(project).to receive_messages(:base_index => 8)
221
+
222
+ expect(project.startup_window).to eq 8
223
+ end
224
+ end
225
+ end
226
+
209
227
  describe "#window" do
210
228
  it "gets the window and index for tmux" do
211
229
  expect(project.window(1)).to eq "sample:1"
@@ -12,11 +12,29 @@ describe Tmuxinator::Window do
12
12
  }
13
13
  }
14
14
  end
15
+ let(:yaml_root) do
16
+ {
17
+ "editor" => {
18
+ "root" => "/project/override",
19
+ "root?" => true,
20
+ "pre" => ["echo 'I get run in each pane. Before each pane command!'", nil],
21
+ "layout" => "main-vertical",
22
+ "panes" => panes
23
+ }
24
+ }
25
+ end
15
26
 
16
27
  let(:window) { Tmuxinator::Window.new(yaml, 0, project) }
28
+ let(:window_root) { Tmuxinator::Window.new(yaml_root, 0, project) }
17
29
 
18
30
  before do
19
- allow(project).to receive_messages(:tmux => "tmux", :name => "test", :base_index => 1)
31
+ allow(project).to receive_messages(
32
+ :tmux => "tmux",
33
+ :name => "test",
34
+ :base_index => 1,
35
+ :root => "/project/tmuxinator",
36
+ :root? => true
37
+ )
20
38
  end
21
39
 
22
40
  describe "#initialize" do
@@ -25,6 +43,20 @@ describe Tmuxinator::Window do
25
43
  end
26
44
  end
27
45
 
46
+ describe "#root" do
47
+ context "without window root" do
48
+ it "gets the project root" do
49
+ expect(window.root).to include("/project/tmuxinator")
50
+ end
51
+ end
52
+
53
+ context "with window root" do
54
+ it "gets the window root" do
55
+ expect(window_root.root).to include("/project/override")
56
+ end
57
+ end
58
+ end
59
+
28
60
  describe "#panes" do
29
61
  let(:pane) { double(:pane) }
30
62
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tmuxinator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.10.pre
4
+ version: 0.6.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Allen Bargi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-01 00:00:00.000000000 Z
11
+ date: 2015-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor