screenxtv 0.0.11 → 0.0.12

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 (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