sesh 0.0.1 → 0.0.3

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/sesh +52 -35
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 471da2a6d1c23302beb0858f3bcaf8dde2ea0730
4
- data.tar.gz: 0c84359f0c8f57327e59cd7a81d4ad86187f56c4
3
+ metadata.gz: 17fc8871ceac325d5a9344163c1dbac6bfad4d0a
4
+ data.tar.gz: 7ae48a72c52d78d6b511e50a4c76878951c7786e
5
5
  SHA512:
6
- metadata.gz: 478ed2e28e910409295fc525752f3d1f1a76c88d8e78b2d66874eb1195c226a6beff0b334db0be9e0abbffaa4e6ff03c4e2a7b912062f0fecbc5250305b03812
7
- data.tar.gz: b308849d0a53fdf43fa86cc1e97c278c497cece0e2958b32ac8eefe562550c3a17587cbfe069bb1e6c14f06ca065348ed62de5c93881dc48a2876459057b5441
6
+ metadata.gz: 0514a6354033fe60c716a24e094a0e6bf464ba74628d03c089ce7915dce42c7b5bf0f1eab5838312b6b16a7b3105abefc719a25833ce4bc65645fd14a1d43081
7
+ data.tar.gz: 1c72f43d3b349a374d48a0fe640e9a4a6a45499ccb2ae9b86c481aec4cb041ce4e37c90687f2f3ee4b10ae4bad913214856f40fc6e3c96768ac1eae985e23524
data/bin/sesh CHANGED
@@ -1,20 +1,22 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- if ARGV.include? '-h' or ARGV.include? '--help' then puts <<-HELP
3
+ if ARGV.empty? or ARGV.include? '-h' or ARGV.include? '--help' then puts <<-HELP
4
4
  Sesh: remote background sessions powered by tmux and tmuxinator.
5
5
  Runs a headless tmuxinator session for remote slave machines to connect to.
6
6
 
7
- Usage: #{File.basename $0} [command] [project]
7
+ Usage: #{File.basename $0} command [project]
8
8
 
9
9
  Commands:
10
10
 
11
11
  sesh new Create a new tmuxinator configuration.
12
- sesh start [project_name] Start a Sesh session for a project.
13
- sesh stop [project_name] Stop a Sesh session for a project.
12
+ sesh start [project] Start a Sesh session for a project.
13
+ sesh stop [project] Stop a Sesh session for a project.
14
14
  sesh list List running Sesh sessions on this machine.
15
15
  sesh connect [project] user@host Connect as a slave to a remote Sesh session.
16
16
  sesh enslave [project] user@host Connect a slave to a local Sesh session.
17
17
 
18
+ Leave project blank to use the name of your current directory.
19
+
18
20
  HELP
19
21
  exit; end
20
22
 
@@ -26,19 +28,19 @@ def debug(msg) $stderr.puts "> #{msg}" end
26
28
  @options = ARGV[1..-1] || []
27
29
  # debug("Options received: #{@options}") if @options.any?
28
30
 
31
+ def is_tmuxinator_project?(name)
32
+ path = File.expand_path("~/.tmuxinator/#{name}.yml")
33
+ File.exist? path
34
+ end
35
+
29
36
  def get_project_name
30
- if @options.any?
31
- pn_opt = if %w(connect enslave).include? @command
32
- @options.shift if @options[1]
33
- else
34
- @options[0]
35
- end
36
- if pn_opt
37
- pn_opt_path = File.expand_path("~/.tmuxinator/#{pn_opt}.yml")
38
- return pn_opt if File.exist? pn_opt_path
39
- end
37
+ if @options.any? && !@options[0].include?('@')
38
+ return @options.shift if is_tmuxinator_project? @options[0]
40
39
  end
41
- `printf '%q\n' "${PWD##*/}"`.strip
40
+ output = `printf '%q\n' "${PWD##*/}"`.strip
41
+ return output if is_tmuxinator_project?(output)
42
+ puts "Sesh project '#{output}' could not be found."
43
+ fatal "Hint: run sesh new or specify an existing project after your commmand."
42
44
  end
43
45
  @project_name = get_project_name
44
46
 
@@ -52,6 +54,16 @@ end
52
54
 
53
55
  @socket = "/tmp/#{@project_name}.sock"
54
56
 
57
+ def get_remote_address
58
+ @options[@options.length>1 ? 1:0] if @options.any?
59
+ end
60
+ @remote_address = get_remote_address
61
+
62
+ def get_term_app
63
+ output = `osascript -e 'try' -e 'get exists application "iTerm"' -e 'end try'`.strip
64
+ output.length > 0 ? 'iTerm' : fatal("iTerm 2 is not installed.") # 'Terminal'
65
+ end
66
+
55
67
  def project_name_matcher
56
68
  pn = @project_name.gsub '-', '\-'
57
69
  "[t]mux.*[#{pn[0]}]#{pn[1..-1]}"
@@ -66,7 +78,7 @@ def format_command(command) command.gsub(/\ [ ]+/, ' ').strip end
66
78
  def format_and_run_command(command) `#{format_command(command)}`.strip end
67
79
 
68
80
  def issue_server_start_command!
69
- `tmux -vvvv -S "#{@socket}" new-session -d "env TMUX='' mux start #{@project_name}"`
81
+ `tmux -S "#{@socket}" new-session -d "env TMUX='' mux start #{@project_name}"`
70
82
  end
71
83
 
72
84
  def issue_server_stop_command!
@@ -80,17 +92,24 @@ def connection_command(local=false)
80
92
  end
81
93
 
82
94
  def enter_slave_mode_command(local=false)
83
- tell_iterm_app = 'tell application "iTerm"'
84
- tell_iterm_process = 'tell application "System Events" to tell process "iTerm"'
85
- format_command <<-BASH
86
- osascript \
87
- -e '#{tell_iterm_app} to activate' \
88
- -e '#{tell_iterm_process} to keystroke \"n\" using command down' \
89
- -e 'delay 1' \
90
- -e '#{tell_iterm_app} to tell session -1 of current terminal to \
91
- write text "#{connection_command(local).gsub("'", '\\\\\'')}"' \
92
- -e '#{tell_iterm_process} to keystroke return using command down'
93
- BASH
95
+ @term_app ||= get_term_app
96
+ case @term_app
97
+ when 'iTerm'
98
+ tell_term_app = 'tell application "' + @term_app + '"'
99
+ tell_term_process = 'tell application "System Events" to tell process "' +
100
+ @term_app + '"'
101
+ format_command <<-BASH
102
+ osascript \
103
+ -e '#{tell_term_app} to activate' \
104
+ -e '#{tell_term_process} to keystroke \"n\" using command down' \
105
+ -e 'delay 1' \
106
+ -e "#{tell_term_app.gsub('"', '\\"')} to tell session -1 of current \
107
+ terminal to write text \\"#{connection_command(local)}\\"" \
108
+ -e '#{tell_term_process} to keystroke return using command down'
109
+ BASH
110
+ when 'Terminal'
111
+ format_command connection_command(local)
112
+ end
94
113
  end
95
114
 
96
115
  def show_progress_until(condition_lambda, timeout=10)
@@ -160,21 +179,19 @@ if @command
160
179
  fatal "There are no Sesh projects currently running."
161
180
  end
162
181
  when 'connect'
163
- slave_address = @options[0]
164
- if (is_local=slave_address.nil?)
165
- slave_address = @local_ssh_addr
182
+ if (is_local=@remote_address.nil?)
183
+ @remote_address = @local_ssh_addr
166
184
  fatal("Sesh project '#{@project_name}' is not running!") unless already_running?
167
185
  end
168
186
  command = enter_slave_mode_command(is_local)
169
- puts command
170
187
  puts `#{command}`.strip
171
188
  when 'enslave'
172
189
  fatal("Sesh project '#{@project_name}' is not running!") unless already_running?
173
- fatal("You must specify a machine to enslave! Eg: user@ip") unless @options.any?
174
- slave_address = @options[0]
175
- debug "Attempting to connect #{slave_address} to Sesh project '#{@project_name}'..."
190
+ fatal("You must specify a machine to enslave! Eg: user@ip") if @remote_address.nil?
191
+ debug "Attempting to connect #{@remote_address} to Sesh project '#{@project_name}'..."
192
+ # ssh #{@remote_address} "#{enter_slave_mode_command.gsub(/([^\\])"/, '\1\\"')}"
176
193
  output = format_and_run_command <<-BASH
177
- ssh #{slave_address} "#{enter_slave_mode_command.gsub('"', '\"')}"
194
+ #{enter_slave_mode_command} | ssh -T #{@remote_address} 1>/dev/null 2>&1 &
178
195
  BASH
179
196
  puts output
180
197
  if $?
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sesh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - MacKinley Smith