i2cssh 1.12.0 → 1.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (7) hide show
  1. checksums.yaml +4 -4
  2. data/README.markdown +25 -8
  3. data/VERSION +1 -1
  4. data/bin/i2cssh +133 -35
  5. data/i2cssh.gemspec +3 -3
  6. data/lib/i2cssh.rb +71 -29
  7. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8171c7a47f59b5123c257de295eb24bc5794e6f9
4
- data.tar.gz: 6b06917e9c767722a263b09641f37dbd9dc54c70
3
+ metadata.gz: c0b81c1ed4337a2a5d055b5856fc1aec9285020b
4
+ data.tar.gz: 56daca4591c06fa6b439c4e6fc88991420d558ab
5
5
  SHA512:
6
- metadata.gz: d944ab75241dcbf9d782c87a3c8a7fbeaaaa1e64d0a8f049c6eca9fbd7ff482a94818c883c43a8e162b64f6a7c10a33fc7a066a9bfe4c8db2a222ff4aef908aa
7
- data.tar.gz: c4bec965f29bf041c9bbdee2ab69e3f9506ae6ccff902eea306ac49bcc877261a4f4191fcab3fdf65a8f969e3e1b6a40cbd276e675e0590dc7446f491b5e96b3
6
+ metadata.gz: 0dfa9d489d8eeef193b4e8b59ba538a534e588f63da4d2f804d19fcfe36918ece3a0eb8e00916d2a22dc1201e41ac6c63a9c4bdb5bce5343b60970571f7b779e
7
+ data.tar.gz: bd48eb7b7bdb22242b00c2f412cdda2ddbee2c20549718eef57fb8429096f5d6fdd2b0101da5752bfdd2ef97adb4fef88993b6cf62c60ef5cec298b4413e793c
data/README.markdown CHANGED
@@ -9,10 +9,16 @@ to all sessions.
9
9
  $ gem install i2cssh
10
10
 
11
11
  ## Usage
12
- Usage: i2cssh [options] [(username@host [username@host] | username@cluster)]
12
+ Usage: i2cssh [options] [(username@host [username@host] | username@cluster)]
13
+ -c, --clusters clus1,clus2 Comma-separated list of clusters specified in ~/.i2csshrc
14
+ -m, --machines a,b,c Comma-separated list of hosts
15
+ -f, --file FILE Cluster file (one hostname per line)
16
+ -t, --tab-split Split servers/clusters into tabs (group arguments)
17
+ -T, --tab-split-nogroup Split servers/clusters into tabs (don't group arguments)
13
18
  -A, --forward-agent Enable SSH agent forwarding
14
19
  -l, --login LOGIN SSH login name
15
20
  -e, --environment KEY=VAL Send environment vars (comma-separated list, need to start with LC_)
21
+ -r, --rank Send LC_RANK with the host number as environment variable
16
22
  -F, --fullscreen Make the window fullscreen
17
23
  -C, --columns COLUMNS Number of columns (rows will be calculated)
18
24
  -R, --rows ROWS Number of rows (columns will be calculated)
@@ -21,11 +27,8 @@ to all sessions.
21
27
  -p, --profile PROFILE Name of the iTerm2 profile (default: Default)
22
28
  -2, --iterm2 Use iTerm2 instead of iTerm
23
29
  -i, --itermname NAME Name of the application to use (default: iTerm)
24
- -f, --file FILE Cluster file (one hostname per line)
25
- -c, --cluster CLUSTERNAME Name of the cluster specified in ~/.i2csshrc
26
- -r, --rank Send LC_RANK with the host number as environment variable
27
- -m, --machines a,b,c Comma-separated list of hosts
28
30
  -s, --sleep SLEEP Number of seconds to sleep between creating SSH sessions
31
+ -d, --direction DIRECTION Direction that new sessions are created (default: column)
29
32
  -X, --extra EXTRA_PARAM Additional ssh parameters (e.g. -Xi=myidentity.pem)
30
33
 
31
34
  i2cssh will assume you want to connect to a cluster when only one host is given.
@@ -37,6 +40,10 @@ The following commands are exactly the same, however, they might serve different
37
40
  $ i2cssh -m user1@host1,user2@host2
38
41
  $ i2cssh user1@host1 user2@host2
39
42
 
43
+ You can combine these options and use them multiple times:
44
+
45
+ $ i2cssh -m user1@host1,user2@host2 -m user3@host3 user4@host4 user5@host5
46
+
40
47
  Using the `-l` option will override all usernames:
41
48
 
42
49
  $ i2cssh -l foo user1@host1 user2@host2
@@ -57,7 +64,7 @@ The `i2csshrc` file is a YAML formatted file that contains the following structu
57
64
  - host1
58
65
  - host2
59
66
 
60
- Optional parameters can be used globablly or per cluster and include:
67
+ Optional parameters can be used globally or per cluster and include:
61
68
 
62
69
  broadcast: (true/false) # Enable/disable broadcast on start
63
70
  login: <username> # Use this username for login
@@ -133,9 +140,9 @@ Name of the application to use (default: iTerm). It happens sometimes iTerm isn'
133
140
 
134
141
  Will read nodes from a file. These will be added to any hosts specified on the command line or in the config
135
142
 
136
- ### -c, --cluster
143
+ ### -c, --clusters clus1,clus2
137
144
 
138
- Connect to a cluster that is specified in the config
145
+ Connect to one or more clusters that are specified in the config
139
146
 
140
147
  ### -r, --rank
141
148
 
@@ -145,6 +152,16 @@ Send a LC_RANK environment variable different for each host (from 0 to n)
145
152
 
146
153
  Connect to the machines a, b and c
147
154
 
155
+ ### -t, --tab-split
156
+
157
+ Split servers/clusters into tabs, grouping arguments.
158
+ Tabs are created as follows: hosts after a -m option are put in one tab, each cluster is always in its own tab, all the arguments are in one tab.
159
+
160
+ ### -T, --tab-split-nogroup
161
+
162
+ Split servers/clusters into tabs, *not* grouping arguments.
163
+ Tabs are created as follows: hosts after a -m option are put in one tab, each cluster is always in its own tab, each argument is in its own tab.
164
+
148
165
  ### -s, --sleep SLEEP
149
166
 
150
167
  Wait SLEEP seconds between starting each ssh session. This will take decimals as well (0.5 for half a second)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.12.0
1
+ 1.13.0
data/bin/i2cssh CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/ruby
1
+ #!/usr/bin/env ruby
2
2
  require 'rubygems'
3
3
  require 'optparse'
4
4
  require 'i2cssh'
@@ -6,51 +6,71 @@ require 'yaml'
6
6
 
7
7
  @config_file = File.expand_path "~/.i2csshrc"
8
8
 
9
- @i2_options, ssh_options, @servers, @clusters, @ssh_environment, opts_from_cmdline = {}, [], [], {}, {}, {}
9
+ @i2_options, ssh_options, @servers, @clusters, @ssh_environment, opts_from_cmdline = [], [], [], {}, [], {}
10
10
 
11
11
  def get_hosts(c)
12
- if c =~ /(.+)@(.+)/ then
13
- login_from_cli = $1
14
- c = $2
15
- end
12
+ c.each do |clus|
16
13
 
17
- cluster = @clusters[c]
14
+ if clus =~ /(.+)@(.+)/
15
+ login_from_cli = $1
16
+ clus = $2
17
+ end
18
18
 
19
- if cluster
20
- set_options(cluster, login_from_cli)
19
+ cluster = @clusters[clus]
20
+ if cluster
21
+ set_options(cluster, login_from_cli)
21
22
 
22
- if @i2_options[:login] then
23
- @servers += cluster["hosts"].map{|h| "#{@i2_options[:login]}@#{h}"}
23
+ if @i2_options.last[:login]
24
+ @servers << cluster["hosts"].map{|h| "#{@i2_options.last[:login]}@#{h}"}
25
+ else
26
+ @servers << cluster["hosts"]
27
+ end
24
28
  else
25
- @servers += cluster["hosts"]
29
+ puts "ERROR: unknown cluster #{c}. Check your #{@config_file}"
30
+ exit 1
26
31
  end
27
- else
28
- puts "ERROR: unknown cluster #{c}. Check your #{@config_file}"
29
- exit 1
30
32
  end
33
+
31
34
  end
32
35
 
33
36
  def set_options(config_hash, login_override=nil)
34
- if config_hash["columns"] and config_hash["rows"] then
37
+ if config_hash["columns"] and config_hash["rows"]
35
38
  puts "CONFIG ERROR: rows and columns can't be used at the same time"
36
39
  exit 1
37
40
  end
41
+
42
+ if @i2_options.size == 0
43
+ @i2_options << {}
44
+ else
45
+ # The first member includes the default options from the conf file
46
+ @i2_options << @i2_options.first.clone
47
+ end
38
48
 
39
49
  [:broadcast, :profile, :rank, :iterm2, :login, :columns, :rows, :sleep, :direction, :itermname].each do |p|
40
- @i2_options[p] = config_hash[p.to_s].nil? ? @i2_options[p] : config_hash[p.to_s]
50
+ @i2_options.last[p] = config_hash[p.to_s].nil? ? @i2_options.last[p] : config_hash[p.to_s]
51
+ end
52
+
53
+ @i2_options.last[:login] = login_override if login_override
54
+ @i2_options.last[:direction] ||= :column
55
+ @i2_options.last[:direction] = @i2_options.last[:direction].to_sym
56
+ if config_hash["environment"]
57
+ if @ssh_environment.empty?
58
+ @ssh_environment << {}
59
+ else
60
+ # We have some global env so copy it
61
+ @ssh_environment << @ssh_environment.first.clone
62
+ end
63
+
64
+ @ssh_environment.last.merge!(config_hash["environment"].inject({}){|m, v| m.merge(v)})
41
65
  end
42
66
 
43
- @i2_options[:login] = login_override if login_override
44
- @i2_options[:direction] ||= :column
45
- @i2_options[:direction] = @i2_options[:direction].to_sym
46
- @ssh_environment.merge!(config_hash["environment"].inject({}){|m, v| m.merge(v)}) if config_hash["environment"]
47
67
  end
48
68
 
49
69
  if File.exists?(@config_file)
50
70
  config_hash = YAML.load File.read @config_file
51
71
 
52
72
  # Read config and set defaults from config
53
- if config_hash["version"] && config_hash["version"].to_i >= 2 then
73
+ if config_hash["version"] && config_hash["version"].to_i >= 2
54
74
  set_options(config_hash)
55
75
  @clusters = config_hash["clusters"]
56
76
  else
@@ -62,24 +82,51 @@ else
62
82
  set_options({})
63
83
  end
64
84
 
85
+
65
86
  optparse = OptionParser.new do |opts|
66
87
  opts.banner = "Usage: #{File.basename(__FILE__)} [options] [(username@host [username@host] | username@cluster)]"
67
88
 
68
89
  # Check if we have a cluster.
69
- opts.on '-c', '--cluster CLUSTERNAME',
70
- 'Name of the cluster specified in ~/.i2csshrc' do |c|
90
+ opts.on '-c', '--clusters clus1,clus2', Array,
91
+ 'Comma-separated list of clusters specified in ~/.i2csshrc' do |c|
71
92
  get_hosts(c)
72
93
  end
73
94
 
95
+
74
96
  opts.on '-m', '--machines a,b,c', Array,
75
97
  'Comma-separated list of hosts' do |h|
76
- @servers += h
98
+
99
+ # Add to servers array and get a clone of default options
100
+ @servers << h
101
+ @i2_options << @i2_options.first.clone
102
+ if @ssh_environment.empty?
103
+ @ssh_environment << {}
104
+ else
105
+ @ssh_environment << @ssh_environment.first.clone
106
+ end
77
107
  end
78
108
 
79
109
  # Hosts
80
110
  opts.on '-f', '--file FILE',
81
111
  'Cluster file (one hostname per line)' do |f|
82
- @servers += File.read(f).split "\n"
112
+ @servers << File.read(f).split("\n")
113
+ @i2_options << @i2_options.first.clone
114
+ if @ssh_environment.empty?
115
+ @ssh_environment << {}
116
+ else
117
+ @ssh_environment << @ssh_environment.first.clone
118
+ end
119
+ end
120
+
121
+ opts.on '-t', '--tab-split',
122
+ 'Split servers/clusters into tabs (group arguments)' do
123
+ opts_from_cmdline[:tabs] = true
124
+ end
125
+
126
+ opts.on '-T', '--tab-split-nogroup',
127
+ 'Split servers/clusters into tabs (don\'t group arguments)' do
128
+ opts_from_cmdline[:tabs] = true
129
+ opts_from_cmdline[:tabs_nogroup] = true
83
130
  end
84
131
 
85
132
  # Command line options override config file
@@ -89,15 +136,19 @@ optparse = OptionParser.new do |opts|
89
136
  'Enable SSH agent forwarding' do
90
137
  ssh_options << '-A'
91
138
  end
139
+
92
140
  opts.on '-l', '--login LOGIN',
93
141
  'SSH login name' do |u|
94
142
  opts_from_cmdline[:login] = u
95
143
 
96
144
  end
145
+
97
146
  opts.on '-e', '--environment KEY=VAL',
98
147
  'Send environment vars (comma-separated list, need to start with LC_)' do |e|
99
- @ssh_environment = e.split(",").inject({}) {|m, x| key, val = x.split("="); m[key] = val; m}
148
+ #Overwrite global ssh environment from config file
149
+ @ssh_environment[0] = e.split(",").inject({}) {|m, x| key, val = x.split("="); m[key] = val; m}
100
150
  end
151
+
101
152
  opts.on '-r', '--rank',
102
153
  'Send LC_RANK with the host number as environment variable' do
103
154
  opts_from_cmdline[:rank] = true
@@ -108,6 +159,7 @@ optparse = OptionParser.new do |opts|
108
159
  'Make the window fullscreen' do
109
160
  opts_from_cmdline[:fullscreen] = true
110
161
  end
162
+
111
163
  opts.on '-C', '--columns COLUMNS', Integer,
112
164
  'Number of columns (rows will be calculated)' do |c|
113
165
  if opts_from_cmdline[:rows]
@@ -154,7 +206,7 @@ optparse = OptionParser.new do |opts|
154
206
  end
155
207
  opts.on "-d", '--direction DIRECTION', String,
156
208
  'Direction that new sessions are created (default: column)' do |d|
157
- unless ["row", "column"].include?(d) then
209
+ unless ["row", "column"].include?(d)
158
210
  puts "ERROR: -d requires 'row' or 'column'"
159
211
  puts optparse.help
160
212
  exit 1
@@ -170,19 +222,65 @@ optparse = OptionParser.new do |opts|
170
222
  end
171
223
  optparse.parse!
172
224
 
173
- if ARGV.length == 1 then
174
- c = ARGV[0]
225
+ if opts_from_cmdline[:tabs]
226
+ puts 'Disabling broadcast for tab split mode...'
227
+ opts_from_cmdline[:broadcast] = false
228
+ end
229
+
230
+ # One argument = one cluster
231
+ if ARGV.length == 1
232
+ c = [ARGV[0]]
175
233
  get_hosts(c)
176
- elsif ARGV.length > 1 then
177
- @servers = ARGV
234
+
235
+ # Otherwise we have a list of hosts
236
+ elsif ARGV.length > 1
237
+ if opts_from_cmdline[:tabs_nogroup]
238
+ ARGV.each do |serv|
239
+ @servers << [serv]
240
+ if @i2_options.size > 1 # We added stuff in with cmdline options
241
+ @i2_options << @i2_options.first.clone
242
+ if @ssh_environment.empty?
243
+ @ssh_environment << {}
244
+ else
245
+ @ssh_environment << @ssh_environment.first.clone
246
+ end
247
+ end
248
+ end
249
+ else
250
+ @servers << ARGV
251
+ if @i2_options.size > 1 # We added stuff in with cmdline options
252
+ @i2_options << @i2_options.first.clone
253
+ if @ssh_environment.empty?
254
+ @ssh_environment << {}
255
+ else
256
+ @ssh_environment << @ssh_environment.first.clone
257
+ end
258
+ end
259
+ end
178
260
  end
179
261
 
180
- @i2_options.merge!(opts_from_cmdline)
181
262
 
182
- if @i2_options[:login] then
183
- @servers = @servers.map{|h| "#{@i2_options[:login]}@#{h.gsub(/.+@/,'')}"}
263
+ # Drop default options
264
+ if @i2_options.size > @servers.size
265
+ @i2_options.shift
266
+ end
267
+
268
+ if @ssh_environment.size > @servers.size
269
+ @ssh_environment.shift
184
270
  end
185
271
 
272
+
273
+ @i2_options.each do |opt|
274
+ opt.merge!(opts_from_cmdline)
275
+ end
276
+
277
+ @i2_options.each_with_index do |opt, i|
278
+ if opt[:login]
279
+ @servers[i] = @servers[i].map{|h| "#{opt[:login]}@#{h.gsub(/.+@/,'')}"}
280
+ end
281
+ end
282
+
283
+
186
284
  if @servers.empty?
187
285
  puts "ERROR: no servers given"
188
286
  puts optparse.help
data/i2cssh.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "i2cssh"
8
- s.version = "1.12.0"
8
+ s.version = "1.13.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Wouter de Bie"]
12
- s.date = "2014-02-23"
12
+ s.date = "2015-03-19"
13
13
  s.description = "csshX like cluster ssh using iTerm2 panes"
14
14
  s.email = "wouter@evenflow.se"
15
15
  s.executables = ["i2cssh"]
@@ -34,7 +34,7 @@ Gem::Specification.new do |s|
34
34
  s.homepage = "http://github.com/wouterdebie/i2cssh"
35
35
  s.licenses = ["MIT"]
36
36
  s.require_paths = ["lib"]
37
- s.rubygems_version = "2.0.3"
37
+ s.rubygems_version = "2.0.14"
38
38
  s.summary = "csshX like cluster ssh using iTerm2 panes"
39
39
 
40
40
  if s.respond_to? :specification_version then
data/lib/i2cssh.rb CHANGED
@@ -1,14 +1,13 @@
1
1
  require 'appscript'
2
-
3
2
  class I2Cssh
4
3
  def initialize servers, ssh_options, i2_options, ssh_environment
5
4
  @ssh_prefix = "ssh " + ssh_options.join(' ')
6
5
  @ssh_options = ssh_options
7
- @i2_options = i2_options
6
+ @i2_options = i2_options.clone
8
7
  @servers = servers
9
8
  @ssh_environment = ssh_environment
10
9
 
11
- app_name = (i2_options[:iterm2]) ? 'iTerm2' : ((i2_options[:itermname]) ? i2_options[:itermname] : 'iTerm')
10
+ app_name = (i2_options.first[:iterm2]) ? 'iTerm2' : ((i2_options.first[:itermname]) ? i2_options.first[:itermname] : 'iTerm')
12
11
 
13
12
  raise Exception.new 'No servers given' if servers.empty?
14
13
 
@@ -19,16 +18,28 @@ class I2Cssh
19
18
  @shell_menu = @sys_events.processes[app_name].menu_bars[1].menu_bar_items["Shell"].menus["Shell"]
20
19
  @term = @iterm.make(:new => :terminal)
21
20
 
22
- @profile = i2_options[:profile] || "Default"
21
+ @profile = i2_options.first[:profile] || "Default"
22
+
23
+ @term.launch_(:session => "Default Session")
24
+
25
+ maximize(app_name) if i2_options.first[:fullscreen]
26
+
23
27
 
24
- session = @term.sessions.after.make :new => :session
25
- session.exec :command => "/bin/bash -l"
28
+ while !@servers.empty? do
29
+ compute_geometry
30
+ split_session
31
+ start_ssh
32
+ enable_broadcast if i2_options.first[:broadcast]
33
+ @servers.shift
34
+ @i2_options.shift
35
+ @ssh_environment.shift
26
36
 
27
- compute_geometry
28
- maximize(app_name) if i2_options[:fullscreen]
29
- split_session
30
- start_ssh
31
- enable_broadcast if i2_options[:broadcast]
37
+ if !@servers.empty? && @i2_options.first[:tabs] then
38
+ # By default, a new session = a new tab
39
+ @term.launch_(:session => "Default Session")
40
+ end
41
+ end
42
+ @term.select(@term.sessions[1])
32
43
  end
33
44
 
34
45
  private
@@ -44,9 +55,24 @@ class I2Cssh
44
55
  end
45
56
 
46
57
  def compute_geometry
47
- count = @servers.size
48
- @rows = @i2_options[:rows]
49
- @columns = @i2_options[:columns]
58
+ # Keep track of session index for multi-tab mode
59
+ if @session_index then
60
+ @session_index += @rows*@columns
61
+ else
62
+ @session_index = 0
63
+ end
64
+
65
+ # Create geometry when combining and ignore rows/columns preference
66
+ if @servers.size > 1 && !@i2_options.first[:tabs]
67
+ count = 0
68
+ @servers.each do |srv|
69
+ count += srv.size
70
+ end
71
+ else
72
+ count = @servers.first.size
73
+ @rows = @i2_options.first[:rows]
74
+ @columns = @i2_options.first[:columns]
75
+ end
50
76
 
51
77
  if @rows then
52
78
  @columns = (count / @rows.to_f).ceil
@@ -59,7 +85,7 @@ class I2Cssh
59
85
  # Quick hack: iTerms default window only supports up to 11 rows and 22 columns
60
86
  # If we surpass either one, we resort to full screen.
61
87
  if @rows > 11 or @columns > 22 then
62
- @i2_options[:fullscreen] = true
88
+ @i2_options.first[:fullscreen] = true
63
89
  end
64
90
  end
65
91
 
@@ -84,7 +110,7 @@ class I2Cssh
84
110
  :column => {0 => split_vert, 1 => left, 2 => split_hori, 3=> right, :x => @columns, :y => @rows},
85
111
  :row => {0 => split_hori, 1=> up, 2 => split_vert, 3=> down, :x => @rows, :y => @columns}
86
112
  }
87
- splitconfig = splitmap[@i2_options[:direction]]
113
+ splitconfig = splitmap[@i2_options.first[:direction]]
88
114
 
89
115
  first = true
90
116
  2.upto splitconfig[:x] do
@@ -109,31 +135,47 @@ class I2Cssh
109
135
  end
110
136
 
111
137
  def start_ssh
138
+ old_size = 0
139
+
112
140
  1.upto(@rows*@columns) do |i|
113
- @term.sessions[i].write :text => "/bin/bash -l"
141
+ @term.sessions[@session_index + i].write :text => "/usr/bin/env bash -l"
142
+
143
+ # Without the tab flag, combine all servers and clusters into one window
144
+ if !@servers.empty? && (i - old_size) > @servers.first.size
145
+ old_size = @servers.first.size
146
+ @servers.shift
147
+ @i2_options.shift
148
+ @ssh_environment.shift
149
+ end
150
+
151
+ if @servers.empty?
152
+ server = nil
153
+ else
154
+ server = @servers.first[i-old_size-1]
155
+ end
156
+
114
157
 
115
- server = @servers[i-1]
116
158
  if server then
117
159
  send_env = ""
118
160
 
119
- if @i2_options[:rank] then
120
- @ssh_environment['LC_RANK'] = i-1
161
+ if @i2_options.first[:rank] then
162
+ @ssh_environment.first['LC_RANK'] = i-1
121
163
  end
122
164
 
123
- if !@ssh_environment.empty? then
124
- send_env = "-o SendEnv=#{@ssh_environment.keys.join(",")}"
125
- @term.sessions[i].write :text => "#{@ssh_environment.map{|k,v| "export #{k}=#{v}"}.join('; ')}"
165
+ if !@ssh_environment.empty? && !@ssh_environment.first.empty? then
166
+ send_env = "-o SendEnv=#{@ssh_environment.first.keys.join(",")}"
167
+ @term.sessions[@session_index + i].write :text => "#{@ssh_environment.first.map{|k,v| "export #{k}=#{v}"}.join('; ')}"
126
168
  end
127
- if @i2_options[:sleep] then
128
- sleep @i2_options[:sleep] * i
169
+ if @i2_options.first[:sleep] then
170
+ sleep @i2_options.first[:sleep] * i
129
171
  end
130
- @term.sessions[i].write :text => "unset HISTFILE && echo -e \"\\033]50;SetProfile=#{@profile}\\a\" && #{@ssh_prefix} #{send_env} #{server}"
172
+ @term.sessions[@session_index + i].write :text => "unset HISTFILE && echo -e \"\\033]50;SetProfile=#{@profile}\\a\" && #{@ssh_prefix} #{send_env} #{server}"
131
173
  else
132
174
 
133
- @term.sessions[i].write :text => "unset HISTFILE && echo -e \"\\033]50;SetProfile=#{@profile}\\a\""
175
+ @term.sessions[@session_index + i].write :text => "unset HISTFILE && echo -e \"\\033]50;SetProfile=#{@profile}\\a\""
134
176
  sleep 0.3
135
- @term.sessions[i].foreground_color.set "red"
136
- @term.sessions[i].write :text => "stty -isig -icanon -echo && echo -e '#{"\n"*100}UNUSED' && cat > /dev/null"
177
+ @term.sessions[@session_index + i].foreground_color.set "red"
178
+ @term.sessions[@session_index + i].write :text => "stty -isig -icanon -echo && echo -e '#{"\n"*100}UNUSED' && cat > /dev/null"
137
179
  end
138
180
  end
139
181
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: i2cssh
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.0
4
+ version: 1.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wouter de Bie
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-23 00:00:00.000000000 Z
11
+ date: 2015-03-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -121,7 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
121
  version: '0'
122
122
  requirements: []
123
123
  rubyforge_project:
124
- rubygems_version: 2.0.3
124
+ rubygems_version: 2.0.14
125
125
  signing_key:
126
126
  specification_version: 4
127
127
  summary: csshX like cluster ssh using iTerm2 panes