instalatron 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,6 +5,60 @@ require 'instalatron'
5
5
  require 'yaml'
6
6
  require 'mixlib/cli'
7
7
 
8
+ #
9
+ # From http://www.alecjacobson.com/weblog/?p=75
10
+ #
11
+ def read_char
12
+ begin
13
+ # save previous state of stty
14
+ old_state = `stty -g`
15
+ # disable echoing and enable raw (not having to press enter)
16
+ system "stty raw -echo"
17
+ c = STDIN.getc.chr
18
+ # gather next two characters of special keys
19
+ if(c=="\e")
20
+ extra_thread = Thread.new{
21
+ c = c + STDIN.getc.chr
22
+ c = c + STDIN.getc.chr
23
+ }
24
+ # wait just long enough for special keys to get swallowed
25
+ extra_thread.join(0.00001)
26
+ # kill thread so not-so-long special keys don't wait on getc
27
+ extra_thread.kill
28
+ end
29
+ rescue => ex
30
+ puts "#{ex.class}: #{ex.message}"
31
+ puts ex.backtrace
32
+ ensure
33
+ # restore previous state of stty
34
+ system "stty #{old_state}"
35
+ end
36
+ return c
37
+ end
38
+
39
+ def capture_sequence(vm_name)
40
+ sequence = ""
41
+ loop do
42
+ b = read_char
43
+ capture = b
44
+ if b.chomp.empty?
45
+ capture = "<enter>"
46
+ elsif b == "\t"
47
+ capture = "<tab>"
48
+ elsif b == 32
49
+ capture = " "
50
+ elsif b == "$"
51
+ break
52
+ else
53
+ capture = b
54
+ end
55
+ Instalatron.command_window(capture, vm_name)
56
+ print capture
57
+ sequence << capture
58
+ end
59
+ sequence
60
+ end
61
+
8
62
  def record_session(vm_name, session_name = "instalatron_rec_" + Time.now.strftime("%F_%H%M"))
9
63
  puts "Recording session #{session_name}\n\n"
10
64
  script = []
@@ -24,11 +78,8 @@ def record_session(vm_name, session_name = "instalatron_rec_" + Time.now.strftim
24
78
  step[:name] = $stdin.gets.strip.chomp
25
79
 
26
80
  # Capture key sequence
27
- print "Key sequence: "
28
- step[:sequence] = $stdin.gets.strip.chomp
29
- if step[:sequence].empty?
30
- step[:sequence] = "<Enter>"
31
- end
81
+ print "Key sequence (press $ to end): "
82
+ step[:sequence] = capture_sequence(vm_name)
32
83
 
33
84
  # Copy screenshot to session dir
34
85
  step[:image] = "#{step[:name].gsub(' ','_').downcase}.png"
@@ -36,7 +87,7 @@ def record_session(vm_name, session_name = "instalatron_rec_" + Time.now.strftim
36
87
 
37
88
  script << step
38
89
  puts
39
- Instalatron.command_window(step[:sequence], vm_name)
90
+ puts
40
91
  screen_count += 1
41
92
  print "Press ENTER to grab screen (#{screen_count})..."
42
93
  $stdin.gets
data/lib/instalatron.rb CHANGED
@@ -4,7 +4,7 @@ require 'virtualbox'
4
4
 
5
5
  module Instalatron
6
6
 
7
- VERSION = '0.1.6'
7
+ VERSION = '0.1.7'
8
8
 
9
9
  class ScriptConfig
10
10
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: instalatron
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 6
10
- version: 0.1.6
9
+ - 7
10
+ version: 0.1.7
11
11
  platform: ruby
12
12
  authors:
13
13
  - Sergio Rubio