scriptty 0.9.0-java → 1.0.0-java

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.0
1
+ 1.0.0
@@ -0,0 +1,138 @@
1
+ begin
2
+ require 'sinatra/base'
3
+ require 'scriptty/request_dispatcher'
4
+ require 'scriptty/util/transcript/writer'
5
+ require 'optparse'
6
+ rescue LoadError
7
+ retry if require 'rubygems' # try loading rubygems (only once) if necessary
8
+ raise
9
+ end
10
+
11
+ ##
12
+ ## Parse command line
13
+ ##
14
+
15
+ options = {}
16
+ OptionParser.new do |opts|
17
+ opts.banner = "#{opts.program_name} [options] HOST [PORT]"
18
+ opts.separator "RequestDispatcher demo"
19
+ opts.separator ""
20
+ opts.on("-u", "--user NAME", "Set login username") do |optarg|
21
+ options[:user] = optarg
22
+ end
23
+ opts.on("-p", "--password PASSWORD", "Set login password") do |optarg|
24
+ options[:password] = optarg
25
+ end
26
+ opts.on("--password-file FILE", "Read password from FILE") do |optarg|
27
+ options[:password] = File.read(optarg).strip.split("\n").first.strip
28
+ end
29
+ opts.on("-o", "--output FILE", "Write transcript to FILE") do |optarg|
30
+ options[:output] = optarg
31
+ end
32
+ opts.on("-a", "--append", "Append to transcript instead of overwriting") do |optarg|
33
+ options[:append] = optarg
34
+ end
35
+ end.parse!
36
+
37
+ host, port = ARGV
38
+ unless host
39
+ $stderr.puts "error: No host specified"
40
+ exit 1
41
+ end
42
+ port ||= 23 # Default port 23
43
+
44
+ ##
45
+ ## Set up dispatcher
46
+ ##
47
+ t_writer = options[:output] && ScripTTY::Util::Transcript::Writer.new(File.open(options[:output], options[:append] ? "a" : "w"))
48
+ DISPATCHER = ScripTTY::RequestDispatcher.new
49
+ DISPATCHER.after_init(:call) do |e|
50
+ e.transcript_writer_autoclose = false
51
+ e.transcript_writer = t_writer
52
+ e[:username] = options[:user]
53
+ e[:password] = options[:password]
54
+ end
55
+ DISPATCHER.after_init do
56
+ load_screens "start_screen.txt"
57
+ load_screens "done_screen.txt"
58
+ load_screens "vim_screen.txt"
59
+ init_term "xterm"
60
+ set_timeout 5.0
61
+ connect [host, port]
62
+ eval_script_file "../telnet-nego.rb"
63
+ eval_script_file "login.rb"
64
+ end
65
+ DISPATCHER.before_each_request do
66
+ # Set the prompt to place "START" in the bottom-right corner of the screen,
67
+ # and clear the screen.
68
+ send("PS1=$'\\033[24;75HSTART'; clear\n")
69
+
70
+ # Wait for the start screen, then ready the prompt to place "DONE" in the
71
+ # bottom-right corner of the screen after the next command executes.
72
+ expect screen(:start_screen)
73
+ send("PS1=$'\\033[24;76HDONE' ; ")
74
+ end
75
+
76
+ # Start the dispatcher thread
77
+ DISPATCHER.start
78
+
79
+ ##
80
+ ## Sinatra webserver configuration
81
+ ##
82
+
83
+ class DemoWebServer < Sinatra::Base
84
+ # Show the version of vim installed
85
+ get '/vim/version' do
86
+ version = DISPATCHER.request do
87
+ send("vim\n")
88
+ expect screen(:vim_screen)
89
+ send(":q\n")
90
+ capture["version"].strip
91
+ end
92
+ "Vim version #{version} is installed."
93
+ end
94
+
95
+ # Show the vim splash screen
96
+ get '/vim/splash' do
97
+ splash = nil
98
+ DISPATCHER.request do
99
+ send("vim\n")
100
+ expect screen(:vim_screen)
101
+ splash = term.text
102
+ send(":q\n")
103
+ end
104
+ content_type "text/plain", :charset => "UTF-8"
105
+ splash.join("\n")
106
+ end
107
+
108
+ # Show the logged in users
109
+ get '/w' do
110
+ screen_lines = nil
111
+ DISPATCHER.request do
112
+ send("clear ; w\n") # Clear the screen and execute the "w" command
113
+ expect screen(:done_screen)
114
+ screen_lines = term.text # Capture the screen lines
115
+ end
116
+ content_type "text/plain", :charset => "UTF-8"
117
+ screen_lines.join("\n")
118
+ end
119
+
120
+ # Index page with links
121
+ get '/' do
122
+ <<EOF
123
+ <html>
124
+ <head><title>RequestDispatcher demo</title></head>
125
+ <body>
126
+ <h1>RequestDispatcher demo</h1>
127
+ <ul>
128
+ <li><a href="/vim/version">Vim version</a></li>
129
+ <li><a href="/vim/splash">Vim splash screen</a></li>
130
+ <li><a href="/w">Logged in users</a></li>
131
+ </ul>
132
+ </body>
133
+ </html>
134
+ EOF
135
+ end
136
+ end
137
+
138
+ DemoWebServer.run!
@@ -0,0 +1,33 @@
1
+ [done_screen]
2
+ size: (24, 80)
3
+ char_cursor: "@"
4
+ char_ignore: " "
5
+ text: <<END
6
+ +--------------------------------------------------------------------------------+
7
+ | |
8
+ | |
9
+ | |
10
+ | |
11
+ | |
12
+ | |
13
+ | |
14
+ | |
15
+ | |
16
+ | |
17
+ | |
18
+ | |
19
+ | |
20
+ | |
21
+ | |
22
+ | |
23
+ | |
24
+ | |
25
+ | |
26
+ | |
27
+ | |
28
+ | |
29
+ | |
30
+ | DONE@|
31
+ +--------------------------------------------------------------------------------+
32
+
33
+ END
@@ -0,0 +1,8 @@
1
+ puts "Logging in..."
2
+ expect("login:")
3
+ send("#{@username}\n")
4
+ expect("Password:")
5
+ send("#{@password}\n")
6
+ expect(":~$") # prompt
7
+ send("export TERM=xterm\n")
8
+ send("clear\n")
@@ -0,0 +1,33 @@
1
+ [start_screen]
2
+ size: (24, 80)
3
+ char_cursor: "@"
4
+ char_ignore: "?"
5
+ text: <<END
6
+ +--------------------------------------------------------------------------------+
7
+ | |
8
+ | |
9
+ | |
10
+ | |
11
+ | |
12
+ | |
13
+ | |
14
+ | |
15
+ | |
16
+ | |
17
+ | |
18
+ | |
19
+ | |
20
+ | |
21
+ | |
22
+ | |
23
+ | |
24
+ | |
25
+ | |
26
+ | |
27
+ | |
28
+ | |
29
+ | |
30
+ | START@|
31
+ +--------------------------------------------------------------------------------+
32
+
33
+ END
@@ -0,0 +1,34 @@
1
+ [vim_screen]
2
+ size: (24, 80)
3
+ cursor_pos: (0, 0)
4
+ char_ignore: "?"
5
+ char_field: "#"
6
+ text: <<END
7
+ +--------------------------------------------------------------------------------+
8
+ | |
9
+ |~ |
10
+ |~ |
11
+ |~ |
12
+ |~ |
13
+ |~ |
14
+ |~ VIM - Vi IMproved |
15
+ |~ |
16
+ |~ version ############# | ("version")
17
+ |~ by Bram Moolenaar et al. |
18
+ |~ Vim is open source and freely distributable |
19
+ |~ |
20
+ |~ ??????????????????????????????????????????????? |
21
+ |~ ??????????????????????????????????????????????? |
22
+ |~ ??????????????????????????????????????????????? |
23
+ |~ ??????????????????????????????????????????????? |
24
+ |~ ??????????????????????????????????????????????? |
25
+ |~ ??????????????????????????????????????????????? |
26
+ |~ ??????????????????????????????????????????????? |
27
+ |~ ??????????????????????????????????????????????? |
28
+ |~ |
29
+ |~ |
30
+ |~ |
31
+ | 0,0-1 All |
32
+ +--------------------------------------------------------------------------------+
33
+
34
+ END
@@ -36,6 +36,7 @@ module ScripTTY
36
36
  alias match capture # "match" is the deprecated name for "capture"
37
37
 
38
38
  attr_accessor :transcript_writer # Set this to an instance of ScripTTY::Util::Transcript::Writer
39
+ attr_accessor :transcript_writer_autoclose # Set this to false to disable closing transcript_writer on exit
39
40
 
40
41
  # Initialize the Expect object.
41
42
  def initialize(options={})
@@ -51,6 +52,7 @@ module ScripTTY
51
52
  @timeout = nil
52
53
  @timeout_timer = nil
53
54
  @transcript_writer = options[:transcript_writer]
55
+ @transcript_writer_autoclose = options[:transcript_writer_autoclose].nil? ? true : options[:transcript_writer_autoclose]
54
56
  @screen_patterns = {}
55
57
  end
56
58
 
@@ -271,7 +273,7 @@ module ScripTTY
271
273
  @transcript_writer.info("Script executing command", "exit") if @transcript_writer
272
274
  @net.exit
273
275
  dispatch until @net.done?
274
- @transcript_writer.close if @transcript_writer
276
+ @transcript_writer.close if @transcript_writer && @transcript_writer_autoclose
275
277
  end
276
278
 
277
279
  # Generate a ScreenPattern from the current terminal state, and optionally
@@ -0,0 +1,241 @@
1
+ # = Request dispatcher
2
+ # Copyright (C) 2010 Infonium Inc.
3
+ #
4
+ # This file is part of ScripTTY.
5
+ #
6
+ # ScripTTY is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Lesser General Public License as published
8
+ # by the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # ScripTTY is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Lesser General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public License
17
+ # along with ScripTTY. If not, see <http://www.gnu.org/licenses/>.
18
+ #
19
+ # = Documentation
20
+ # See the documentation for the RequestDispatcher for more information.
21
+
22
+ require 'scriptty/expect'
23
+ require 'thread'
24
+
25
+ module ScripTTY
26
+
27
+ # Request dispatcher thread
28
+ #
29
+ # RequestDispatcher allows a single ScripTTY instance to maintain a
30
+ # single, persistent connection to a remote host while multiple threads
31
+ # perform requests via that connection.
32
+ #
33
+ # RequestDispatcher can be used, for example, to provide an HTTP interface to
34
+ # functions of a screen-scraped terminal.
35
+ class RequestDispatcher
36
+ def initialize
37
+ # Graceful shutdown flag
38
+ @finishing_lock = Mutex.new
39
+ @finishing = false
40
+
41
+ # Request queue
42
+ @queue_lock = Mutex.new
43
+ @queue = []
44
+
45
+ # Hooks
46
+ @hooks_lock = Mutex.new
47
+ @hooks = {}
48
+ end
49
+
50
+ # Specify a block that will be called every time a new ScripTTY::Expect object is initialized.
51
+ #
52
+ # This can be used to specify a transcript_writer or to execute a login script.
53
+ #
54
+ # See the add_hook method for a descripton of how the arguments are interpreted.
55
+ def after_init(how=nil, &block)
56
+ add_hook(:after_init, how, &block)
57
+ end
58
+
59
+ # Add a block that will be called just before finally disconnecting, when the finish method is called.
60
+ #
61
+ # See the add_hook method for a descripton of how the arguments are interpreted.
62
+ def before_finish(how=nil, &block)
63
+ add_hook(:before_finish, how, &block)
64
+ end
65
+
66
+ # Add a block that will be called before each request is performed.
67
+ #
68
+ # See the add_hook method for a descripton of how the arguments are interpreted.
69
+ def before_each_request(how=nil, &block)
70
+ add_hook(:before_each_request, how, &block)
71
+ end
72
+
73
+ # Add a block that will be called before each request is performed.
74
+ #
75
+ # See the add_hook method for a descripton of how the arguments are interpreted.
76
+ def after_each_request(how=nil, &block)
77
+ add_hook(:after_each_request, how, &block)
78
+ end
79
+
80
+ # Start the dispatcher thread
81
+ def start
82
+ raise ArgumentError.new("Already started") if @thread
83
+ @thread = Thread.new{ main }
84
+ nil
85
+ end
86
+
87
+ # Stop the dispatcher thread
88
+ def finish
89
+ @finishing_lock.synchronize{ @finishing = true }
90
+ @thread.join
91
+ nil
92
+ end
93
+
94
+ # Queue a request and wait for it to complete
95
+ def request(how=nil, &block)
96
+ cv_mutex = Mutex.new
97
+ cv = ConditionVariable.new
98
+
99
+ # Build the request
100
+ request = {:block => block, :cv_mutex => cv_mutex, :cv => cv }
101
+
102
+ # Queue the request
103
+ @queue_lock.synchronize{ @queue << request }
104
+
105
+ # Wait for the request to complete
106
+ cv_mutex.synchronize{ cv.wait(cv_mutex) }
107
+
108
+ # Raise an exception if there was any.
109
+ raise request[:exception] if request[:exception]
110
+
111
+ # Return the result
112
+ request[:result]
113
+ end
114
+
115
+ protected
116
+
117
+ def main
118
+ loop do
119
+ break if finishing?
120
+ begin
121
+ handle_one_request
122
+ rescue => exc
123
+ # Log & swallow exception
124
+ show_exception(exc)
125
+ close_expect rescue nil # Ignore errors while closing the connection
126
+ sleep 0.5 # Delay just a tiny bit to keep an exception loop from consuming all available resources.
127
+ end
128
+ end
129
+ execute_hooks(:before_finish)
130
+ ensure
131
+ close_expect
132
+ end
133
+
134
+ def handle_one_request
135
+ ensure_expect_alive
136
+ until (request = dequeue)
137
+ return if finishing?
138
+ idle
139
+ end
140
+
141
+ # Run the before_each_request hooks. If an exception is raised,
142
+ # put the request back on the queue before re-raising the error.
143
+ begin
144
+ execute_hooks(:before_each_request)
145
+ rescue
146
+ requeue(request)
147
+ raise
148
+ end
149
+
150
+ # Execute the request
151
+ begin
152
+ request[:result] = block_eval(request[:block_how], &request[:block])
153
+ rescue => exc
154
+ show_exception(exc, "in request")
155
+ request[:exception] = exc
156
+ close_expect rescue nil
157
+ end
158
+ request[:cv_mutex].synchronize { request[:cv].signal }
159
+
160
+ # Execute the after_each_request hooks.
161
+ execute_hooks(:after_each_request)
162
+ end
163
+
164
+ def dequeue
165
+ @queue_lock.synchronize { @queue.shift }
166
+ end
167
+
168
+ def requeue(request)
169
+ @queue_lock.synchronize { @queue.unshift(request) }
170
+ end
171
+
172
+ def ensure_expect_alive
173
+ return if @expect
174
+ @expect = construct_expect
175
+ execute_hooks(:after_init)
176
+ nil
177
+ end
178
+
179
+ def close_expect
180
+ return unless @expect
181
+ @expect.exit
182
+ ensure
183
+ @expect = nil
184
+ end
185
+
186
+ def finishing?
187
+ @finishing_lock.synchronize { @finishing }
188
+ end
189
+
190
+ # Add a new hook of the specified type.
191
+ #
192
+ # The how argument determines how the block is called:
193
+ # [:instance_eval]
194
+ # The block is passed to Expect#instance_eval
195
+ # [:call]
196
+ # The block is called normally, and the Expect object is passed as its
197
+ # first argument.
198
+ #
199
+ # Hooks are executed in the order that they are set.
200
+ def add_hook(type, how, &block)
201
+ @hooks_lock.synchronize{
202
+ @hooks[type] ||= []
203
+ @hooks[type] << [how, block]
204
+ }
205
+ nil
206
+ end
207
+
208
+ def execute_hooks(type)
209
+ @hooks_lock.synchronize{ (@hooks[type] || []).dup }.each do |how, block|
210
+ block_eval(how, &block)
211
+ end
212
+ nil
213
+ end
214
+
215
+ def block_eval(how, &block)
216
+ case how # how specifies how the block will be called.
217
+ when :instance_eval, nil
218
+ @expect.instance_eval(&block)
219
+ when :call
220
+ block.call(@expect)
221
+ else
222
+ raise ArgumentError.new("Unsupported how: #{how.inspect}")
223
+ end
224
+ end
225
+
226
+ def construct_expect
227
+ ScripTTY::Expect.new
228
+ end
229
+
230
+ def idle
231
+ @expect.sleep(0.1)
232
+ end
233
+
234
+ def show_exception(exc, context=nil)
235
+ output = ["Exception #{context || "in #{self}"}: #{exc} (#{exc.class.name})"]
236
+ output += exc.backtrace.map { |line| " #{line}" }
237
+ $stderr.puts output.join("\n")
238
+ true # true means to re-raise the exception
239
+ end
240
+ end
241
+ end
metadata CHANGED
@@ -3,44 +3,44 @@ name: scriptty
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
- - 0
7
- - 9
8
- - 0
9
- version: 0.9.0
6
+ - 1
7
+ - 0
8
+ - 0
9
+ version: 1.0.0
10
10
  platform: java
11
11
  authors:
12
- - Dwayne Litzenberger
12
+ - Dwayne Litzenberger
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-06 00:00:00 -04:00
17
+ date: 2010-05-13 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: treetop
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
- version: "0"
30
- type: :runtime
31
- version_requirements: *id001
32
- - !ruby/object:Gem::Dependency
33
- name: multibyte
34
- prerelease: false
35
- requirement: &id002 !ruby/object:Gem::Requirement
36
- requirements:
37
- - - ">="
38
- - !ruby/object:Gem::Version
39
- segments:
40
- - 0
41
- version: "0"
42
- type: :runtime
43
- version_requirements: *id002
20
+ - !ruby/object:Gem::Dependency
21
+ name: treetop
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :runtime
31
+ version_requirements: *id001
32
+ - !ruby/object:Gem::Dependency
33
+ name: multibyte
34
+ prerelease: false
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ segments:
40
+ - 0
41
+ version: "0"
42
+ type: :runtime
43
+ version_requirements: *id002
44
44
  description: |
45
45
  ScripTTY is a JRuby application and library that lets you control full-screen
46
46
  terminal applications using an expect-like scripting language and a full-screen
@@ -48,111 +48,117 @@ description: |
48
48
 
49
49
  email: dlitz@infonium.ca
50
50
  executables:
51
- - scriptty-capture
52
- - scriptty-dump-screens
53
- - scriptty-replay
54
- - scriptty-term-test
55
- - scriptty-transcript-parse
51
+ - scriptty-capture
52
+ - scriptty-dump-screens
53
+ - scriptty-replay
54
+ - scriptty-term-test
55
+ - scriptty-transcript-parse
56
56
  extensions: []
57
57
 
58
58
  extra_rdoc_files:
59
- - README.rdoc
59
+ - README.rdoc
60
60
  files:
61
- - .gitattributes
62
- - .gitignore
63
- - COPYING
64
- - COPYING.LESSER
65
- - README.rdoc
66
- - Rakefile
67
- - VERSION
68
- - bin/scriptty-capture
69
- - bin/scriptty-dump-screens
70
- - bin/scriptty-replay
71
- - bin/scriptty-term-test
72
- - bin/scriptty-transcript-parse
73
- - examples/captures/xterm-overlong-line-prompt.bin
74
- - examples/captures/xterm-vim-session.bin
75
- - examples/demo-capture.rb
76
- - examples/demo-telnet-session-screens.txt
77
- - examples/demo-telnet-session.rb
78
- - examples/telnet-nego.rb
79
- - lib/scriptty/apps/capture_app.rb
80
- - lib/scriptty/apps/dump_screens_app.rb
81
- - lib/scriptty/apps/replay_app.rb
82
- - lib/scriptty/apps/term_test_app.rb
83
- - lib/scriptty/apps/transcript_parse_app.rb
84
- - lib/scriptty/cursor.rb
85
- - lib/scriptty/exception.rb
86
- - lib/scriptty/expect.rb
87
- - lib/scriptty/multiline_buffer.rb
88
- - lib/scriptty/net/console.rb
89
- - lib/scriptty/net/event_loop.rb
90
- - lib/scriptty/net/password_prompt.rb
91
- - lib/scriptty/screen_pattern.rb
92
- - lib/scriptty/screen_pattern/generator.rb
93
- - lib/scriptty/screen_pattern/parser.rb
94
- - lib/scriptty/term.rb
95
- - lib/scriptty/term/dg410.rb
96
- - lib/scriptty/term/dg410/dg410-client-escapes.txt
97
- - lib/scriptty/term/dg410/dg410-escapes.txt
98
- - lib/scriptty/term/dg410/parser.rb
99
- - lib/scriptty/term/xterm.rb
100
- - lib/scriptty/term/xterm/xterm-escapes.txt
101
- - lib/scriptty/util/fsm.rb
102
- - lib/scriptty/util/fsm/definition_parser.rb
103
- - lib/scriptty/util/fsm/scriptty_fsm_definition.treetop
104
- - lib/scriptty/util/transcript/reader.rb
105
- - lib/scriptty/util/transcript/writer.rb
106
- - test.watchr
107
- - test/apps/capture_app_test.rb
108
- - test/apps/transcript_parse_app_test.rb
109
- - test/cursor_test.rb
110
- - test/expect/screens.txt
111
- - test/expect_test.rb
112
- - test/fsm_definition_parser_test.rb
113
- - test/fsm_test.rb
114
- - test/multiline_buffer_test.rb
115
- - test/net/event_loop_test.rb
116
- - test/screen_pattern/generator_test.rb
117
- - test/screen_pattern/parser_test.rb
118
- - test/screen_pattern/parser_test/explicit_cursor_pattern.txt
119
- - test/screen_pattern/parser_test/explicit_fields.txt
120
- - test/screen_pattern/parser_test/multiple_patterns.txt
121
- - test/screen_pattern/parser_test/simple_pattern.txt
122
- - test/screen_pattern/parser_test/truncated_heredoc.txt
123
- - test/screen_pattern/parser_test/utf16bebom_pattern.bin
124
- - test/screen_pattern/parser_test/utf16lebom_pattern.bin
125
- - test/screen_pattern/parser_test/utf8_pattern.bin
126
- - test/screen_pattern/parser_test/utf8_unix_pattern.bin
127
- - test/screen_pattern/parser_test/utf8bom_pattern.bin
128
- - test/term/dg410/parser_test.rb
129
- - test/term/xterm_test.rb
130
- - test/test_helper.rb
131
- - test/util/transcript/reader_test.rb
132
- - test/util/transcript/writer_test.rb
61
+ - .gitattributes
62
+ - .gitignore
63
+ - COPYING
64
+ - COPYING.LESSER
65
+ - README.rdoc
66
+ - Rakefile
67
+ - VERSION
68
+ - bin/scriptty-capture
69
+ - bin/scriptty-dump-screens
70
+ - bin/scriptty-replay
71
+ - bin/scriptty-term-test
72
+ - bin/scriptty-transcript-parse
73
+ - examples/captures/xterm-overlong-line-prompt.bin
74
+ - examples/captures/xterm-vim-session.bin
75
+ - examples/demo-capture.rb
76
+ - examples/demo-telnet-session-screens.txt
77
+ - examples/demo-telnet-session.rb
78
+ - examples/rdispatch/demo-request-dispatcher.rb
79
+ - examples/rdispatch/done_screen.txt
80
+ - examples/rdispatch/login.rb
81
+ - examples/rdispatch/start_screen.txt
82
+ - examples/rdispatch/vim_screen.txt
83
+ - examples/telnet-nego.rb
84
+ - lib/scriptty/apps/capture_app.rb
85
+ - lib/scriptty/apps/dump_screens_app.rb
86
+ - lib/scriptty/apps/replay_app.rb
87
+ - lib/scriptty/apps/term_test_app.rb
88
+ - lib/scriptty/apps/transcript_parse_app.rb
89
+ - lib/scriptty/cursor.rb
90
+ - lib/scriptty/exception.rb
91
+ - lib/scriptty/expect.rb
92
+ - lib/scriptty/multiline_buffer.rb
93
+ - lib/scriptty/net/console.rb
94
+ - lib/scriptty/net/event_loop.rb
95
+ - lib/scriptty/net/password_prompt.rb
96
+ - lib/scriptty/request_dispatcher.rb
97
+ - lib/scriptty/screen_pattern.rb
98
+ - lib/scriptty/screen_pattern/generator.rb
99
+ - lib/scriptty/screen_pattern/parser.rb
100
+ - lib/scriptty/term.rb
101
+ - lib/scriptty/term/dg410.rb
102
+ - lib/scriptty/term/dg410/dg410-client-escapes.txt
103
+ - lib/scriptty/term/dg410/dg410-escapes.txt
104
+ - lib/scriptty/term/dg410/parser.rb
105
+ - lib/scriptty/term/xterm.rb
106
+ - lib/scriptty/term/xterm/xterm-escapes.txt
107
+ - lib/scriptty/util/fsm.rb
108
+ - lib/scriptty/util/fsm/definition_parser.rb
109
+ - lib/scriptty/util/fsm/scriptty_fsm_definition.treetop
110
+ - lib/scriptty/util/transcript/reader.rb
111
+ - lib/scriptty/util/transcript/writer.rb
112
+ - test.watchr
113
+ - test/apps/capture_app_test.rb
114
+ - test/apps/transcript_parse_app_test.rb
115
+ - test/cursor_test.rb
116
+ - test/expect/screens.txt
117
+ - test/expect_test.rb
118
+ - test/fsm_definition_parser_test.rb
119
+ - test/fsm_test.rb
120
+ - test/multiline_buffer_test.rb
121
+ - test/net/event_loop_test.rb
122
+ - test/screen_pattern/generator_test.rb
123
+ - test/screen_pattern/parser_test.rb
124
+ - test/screen_pattern/parser_test/explicit_cursor_pattern.txt
125
+ - test/screen_pattern/parser_test/explicit_fields.txt
126
+ - test/screen_pattern/parser_test/multiple_patterns.txt
127
+ - test/screen_pattern/parser_test/simple_pattern.txt
128
+ - test/screen_pattern/parser_test/truncated_heredoc.txt
129
+ - test/screen_pattern/parser_test/utf16bebom_pattern.bin
130
+ - test/screen_pattern/parser_test/utf16lebom_pattern.bin
131
+ - test/screen_pattern/parser_test/utf8_pattern.bin
132
+ - test/screen_pattern/parser_test/utf8_unix_pattern.bin
133
+ - test/screen_pattern/parser_test/utf8bom_pattern.bin
134
+ - test/term/dg410/parser_test.rb
135
+ - test/term/xterm_test.rb
136
+ - test/test_helper.rb
137
+ - test/util/transcript/reader_test.rb
138
+ - test/util/transcript/writer_test.rb
133
139
  has_rdoc: true
134
140
  homepage: http://github.com/infonium/scriptty
135
141
  licenses: []
136
142
 
137
143
  post_install_message:
138
144
  rdoc_options:
139
- - --charset=UTF-8
145
+ - --charset=UTF-8
140
146
  require_paths:
141
- - lib
147
+ - lib
142
148
  required_ruby_version: !ruby/object:Gem::Requirement
143
149
  requirements:
144
- - - ">="
145
- - !ruby/object:Gem::Version
146
- segments:
147
- - 0
148
- version: "0"
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ segments:
153
+ - 0
154
+ version: "0"
149
155
  required_rubygems_version: !ruby/object:Gem::Requirement
150
156
  requirements:
151
- - - ">="
152
- - !ruby/object:Gem::Version
153
- segments:
154
- - 0
155
- version: "0"
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ segments:
160
+ - 0
161
+ version: "0"
156
162
  requirements: []
157
163
 
158
164
  rubyforge_project:
@@ -161,21 +167,23 @@ signing_key:
161
167
  specification_version: 3
162
168
  summary: write expect-like script to control full-screen terminal-based applications
163
169
  test_files:
164
- - test/cursor_test.rb
165
- - test/expect_test.rb
166
- - test/fsm_definition_parser_test.rb
167
- - test/fsm_test.rb
168
- - test/multiline_buffer_test.rb
169
- - test/test_helper.rb
170
- - test/apps/capture_app_test.rb
171
- - test/apps/transcript_parse_app_test.rb
172
- - test/net/event_loop_test.rb
173
- - test/screen_pattern/generator_test.rb
174
- - test/screen_pattern/parser_test.rb
175
- - test/term/xterm_test.rb
176
- - test/term/dg410/parser_test.rb
177
- - test/util/transcript/reader_test.rb
178
- - test/util/transcript/writer_test.rb
179
- - examples/demo-capture.rb
180
- - examples/demo-telnet-session.rb
181
- - examples/telnet-nego.rb
170
+ - test/apps/capture_app_test.rb
171
+ - test/apps/transcript_parse_app_test.rb
172
+ - test/cursor_test.rb
173
+ - test/expect_test.rb
174
+ - test/fsm_definition_parser_test.rb
175
+ - test/fsm_test.rb
176
+ - test/multiline_buffer_test.rb
177
+ - test/net/event_loop_test.rb
178
+ - test/screen_pattern/generator_test.rb
179
+ - test/screen_pattern/parser_test.rb
180
+ - test/term/dg410/parser_test.rb
181
+ - test/term/xterm_test.rb
182
+ - test/test_helper.rb
183
+ - test/util/transcript/reader_test.rb
184
+ - test/util/transcript/writer_test.rb
185
+ - examples/demo-capture.rb
186
+ - examples/demo-telnet-session.rb
187
+ - examples/rdispatch/demo-request-dispatcher.rb
188
+ - examples/rdispatch/login.rb
189
+ - examples/telnet-nego.rb