screenxtv 0.0.11 → 0.0.12
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/screenxtv.rb +52 -15
- data/lib/version.rb +3 -0
- metadata +13 -8
- 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
|
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 "
|
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
|
-
|
270
|
-
|
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
|
-
|
273
|
-
|
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
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
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
|
-
|
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
|
-
|
297
|
-
PTY::getpty
|
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
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.
|
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:
|
60
|
+
rubygems_version: 1.8.24
|
56
61
|
signing_key:
|
57
|
-
specification_version:
|
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
|