screenxtv 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/lib/screenxtv.rb +52 -15
  2. data/lib/version.rb +3 -0
  3. metadata +13 -8
  4. checksums.yaml +0 -7
data/lib/screenxtv.rb CHANGED
@@ -7,9 +7,21 @@ require 'yaml'
7
7
  require 'optparse'
8
8
  require 'readline'
9
9
  require 'tempfile'
10
+ require './lib/version.rb'
11
+
12
+ if `which screen`.empty?
13
+ print %(Warning: you don't have gnu screen in your machine.)
14
+ commands = [
15
+ ['zsh','RPROMPT'=>'(screenxtv)% '],
16
+ ['bash','PS1'=>'bash(screenxtv)$ '],
17
+ ['sh','PS1'=>'sh(screenxtv)$ ']
18
+ ]
19
+ exec_cmd, env = commands.find{|cmd, _| !`which #{cmd}`.empty?}
20
+ env.each{|k,v|ENV[k]=v}
21
+ end
10
22
 
11
23
  def showVersion
12
- print "ScreenX TV Ruby Client 0.0.11\n" #is there any good way to do this?
24
+ print "ScreenX TV Ruby Client #{ScreenXTV::VERSION}\n" #is there any good way to do this?
13
25
  exit
14
26
  end
15
27
  def showHelp
@@ -23,6 +35,7 @@ Options:
23
35
  -t, [--title]    # Select a title (e.g. Joe's Codestream)
24
36
  -r, [--reset]    # Reset your default configuration (e.g. url, color, title)
25
37
  -f CONFIG_FILE   # Path to a preset configuration
38
+ -e, [--execute] # Execute specified Program
26
39
  -p, [--private]  # Broadcast your terminal privately (anyone who has the link can access)
27
40
  -h, [--help]     # Show this help message and quit
28
41
  -v, [--version]  # Show ScreenX TV Ruby Client version number and quit
@@ -82,7 +95,7 @@ def readpswd(prompt='> ')
82
95
  else
83
96
  print "\a"
84
97
  end
85
- print "\r\e[K#{prompt}#{s.gsub /./,'*'}"
98
+ print "\r\e[K#{prompt}#{s.gsub /./,'*'}" # delete this
86
99
  end
87
100
  }
88
101
  end
@@ -121,7 +134,7 @@ end
121
134
 
122
135
  def auth(conf)
123
136
  loop do
124
- username=readline "user name> "
137
+ username=readline "username> "
125
138
  return false if username.size==0
126
139
  password=readpswd "password> "
127
140
  return false if password.nil? || password.size==0
@@ -162,6 +175,8 @@ parser=OptionParser.new do |op|
162
175
  op.on("-c [color]"){|v|argv[:color]=v||true}
163
176
  op.on("-t [title]"){|v|argv[:title]=v||true}
164
177
  op.on("--reset"){|v|argv[:new]=true}
178
+ op.on("-e program"){|v|exec_cmd=v}
179
+ op.on("--execute program"){|v|exec_cmd=v}
165
180
  op.on("-p"){|v|argv[:private]=true}
166
181
  op.on("--private"){|v|argv[:private]=true}
167
182
  op.on("-f config_file"){|v|argv[:file]=v}
@@ -190,6 +205,7 @@ else
190
205
  conf['url']=argv[:url]==true ? nil : argv[:url] if argv[:url]
191
206
  conf['title']=argv[:title]==true ? nil : argv[:title] if argv[:title]
192
207
  conf['color']=argv[:color]==true ? nil : argv[:color] if argv[:color]
208
+ conf['execute']=argv[:execute]==true ? nil : argv[:execute] if argv[:execute]
193
209
  end
194
210
 
195
211
  conf_scan.delete :url if argv[:private]
@@ -262,24 +278,45 @@ info={
262
278
  }
263
279
  ENV['SCREENXTV_BROADCASTING']=info.to_json
264
280
  show_info(info)
281
+ message="http://#{HOST}/#{info['url']} #{conf['title']}"
265
282
 
266
283
  print "\npress enter to start broadcasting"
267
284
  readline
268
285
 
269
- screenrc=Tempfile.new("screenrc");
270
- begin
286
+ unless exec_cmd
287
+ unless File.exists? "#{ENV['HOME']}/.screenrc"
288
+ begin
289
+ #disable C-a if not screen user
290
+ Tempfile.open("screenrc_sxtv_alt_conf") do |f|
291
+ f.write "term xterm-256color\n"
292
+ f.write "escape ^Jj\n"
293
+ ENV['SCREENRC']=f.path
294
+ end
295
+ rescue
296
+ end
297
+ end
298
+
271
299
  begin
272
- File.open("#{ENV['HOME']}/.screenrc"){|file|
273
- screenrc.write "#{file.read}\n"
274
- }
300
+ #screenxtv -> screen(target)
301
+ #screenxtv -> screen(hardstatus) -> screen(target)
302
+ status_rc=Tempfile.open("screenrc_sxtv_status") do |f|
303
+ f.write "term xterm-256color\n"
304
+ f.write "hardstatus alwayslastline #{message.inspect}\n"
305
+ f.write "escape ^Qq\n"
306
+ f.write "autodetach off\n"
307
+ next f
308
+ end
275
309
  rescue
276
310
  end
277
- screenrc.write "term xterm-256color\n"
278
- screenrc.write "hardstatus alwayslastline 'http://#{HOST}/#{url}'\n"
279
- screenrc.flush
280
- rescue
311
+
312
+ screen_name=argv[:private] ? conf['screen_private'] : conf['screen']
313
+
314
+ cmd_stat=["screen","-c",status_rc.path,"-S","sx.#{url.gsub('/','.')}.tv"]
315
+ cmd_attach=["screen","-x",screen_name,"-R"]
316
+ exec_cmd=cmd_stat+cmd_attach
281
317
  end
282
- ENV['SCREENRC']=screenrc.path
318
+
319
+
283
320
 
284
321
  Thread.new{
285
322
  begin
@@ -293,8 +330,8 @@ Thread.new{
293
330
 
294
331
  begin
295
332
  ENV['LANG']='en_US.UTF-8'
296
- screen_name=argv[:private] ? conf['screen_private'] : conf['screen']
297
- PTY::getpty "screen -x #{screen_name} -R" do |rr,ww|
333
+
334
+ PTY::getpty *exec_cmd do |rr,ww|
298
335
  winsize=->{
299
336
  height,width=ww.winsize=rr.winsize=STDOUT.winsize
300
337
  socket.send 'winch',{width:width,height:height}.to_json
data/lib/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ module ScreenXTV
2
+ VERSION = '0.0.12'
3
+ end
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: screenxtv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Tomoya Ishida
@@ -13,15 +14,17 @@ dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: json
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - '>='
19
+ - - ! '>='
18
20
  - !ruby/object:Gem::Version
19
21
  version: '0'
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
- - - '>='
27
+ - - ! '>='
25
28
  - !ruby/object:Gem::Version
26
29
  version: '0'
27
30
  description: Software for broadcasting your terminal to http://screenx.tv/
@@ -32,28 +35,30 @@ extensions: []
32
35
  extra_rdoc_files: []
33
36
  files:
34
37
  - lib/screenxtv.rb
38
+ - lib/version.rb
35
39
  - bin/screenxtv
36
40
  homepage: http://screenx.tv/
37
41
  licenses: []
38
- metadata: {}
39
42
  post_install_message:
40
43
  rdoc_options: []
41
44
  require_paths:
42
45
  - lib
43
46
  required_ruby_version: !ruby/object:Gem::Requirement
47
+ none: false
44
48
  requirements:
45
- - - '>='
49
+ - - ! '>='
46
50
  - !ruby/object:Gem::Version
47
51
  version: '0'
48
52
  required_rubygems_version: !ruby/object:Gem::Requirement
53
+ none: false
49
54
  requirements:
50
- - - '>='
55
+ - - ! '>='
51
56
  - !ruby/object:Gem::Version
52
57
  version: '0'
53
58
  requirements: []
54
59
  rubyforge_project:
55
- rubygems_version: 2.0.0
60
+ rubygems_version: 1.8.24
56
61
  signing_key:
57
- specification_version: 4
62
+ specification_version: 3
58
63
  summary: ScreenX TV client
59
64
  test_files: []
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 979011c1517589151acb14fe09ae8e5fab986533
4
- data.tar.gz: 2b50177569b9092a9ab67affd1db0d8fd084bd56
5
- SHA512:
6
- metadata.gz: baf303d80164a5dea891b652c90ae84bb70fc347e356a44615bc56b87454a42956cf4febb9b79dfea97daaaf96984d2fa583a221c727fcb833e8b18c86742187
7
- data.tar.gz: 765daed474392f54b31e9ddd023f67f8fd8619bde843040a6d717595c2ef6c9196d097d8efca082ce57f98a2c87a83ff54cdda0ae6b56e8880b220918cad9efe