showterm 0.2.1.pre.2 → 0.2.1.pre.3

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 (3) hide show
  1. data/lib/showterm.rb +60 -40
  2. data/showterm.gemspec +1 -1
  3. metadata +1 -1
@@ -25,6 +25,38 @@ module Showterm
25
25
  ret
26
26
  end
27
27
 
28
+ # Get the current width of the terminal
29
+ #
30
+ # @return [Integer] number of columns
31
+ def terminal_width
32
+ guess = `tput cols`.to_i
33
+ guess == 0 ? 80 : guess
34
+ end
35
+
36
+ # Upload the termshow to showterm.io
37
+ #
38
+ # @param [String] scriptfile The ANSI dump of the terminal
39
+ # @param [String] timingfile The timings
40
+ # @param [Integer] cols The width of the terminal
41
+ def upload!(scriptfile, timingfile, cols=terminal_width)
42
+ puts 'uploading, please wait.'
43
+ request = Net::HTTP::Post.new("/scripts")
44
+ request.set_form_data(:scriptfile => scriptfile,
45
+ :timingfile => timingfile,
46
+ :cols => cols)
47
+
48
+ response = http(request)
49
+ raise response.body unless Net::HTTPSuccess === response
50
+ puts response.body
51
+ rescue => e
52
+ raise if retried
53
+ retried = true
54
+ retry
55
+ end
56
+
57
+ private
58
+
59
+ # Get a temporary file that will be deleted when the program exits.
28
60
  def temp_file
29
61
  f = Tempfile.new('showterm')
30
62
  f.close(false)
@@ -32,11 +64,33 @@ module Showterm
32
64
  f
33
65
  end
34
66
 
67
+ # Should we try recording using `script`?
68
+ #
69
+ # This is a hard question to answer, so we just try it and see whether it
70
+ # looks like it gives sane results.
71
+ #
72
+ # We prefer to use script if it works because ttyrec gives really horrible
73
+ # errors about missing ptys. This might be fixable by compiling with the
74
+ # correct flags; but as script seems to work on these platforms, let's just
75
+ # use that.
76
+ #
77
+ # @return [Boolean] whether the script command looks like it's working.
78
+ def use_script?
79
+ scriptfile, timingfile = record_with_script('echo', 'foo')
80
+
81
+ scriptfile =~ /foo/ && timingfile =~ /^[0-9]/
82
+ end
83
+
84
+ # Record using the modern version of 'script'
85
+ #
86
+ # @param [*String] command to run
87
+ # @return [scriptfile, timingfile]
35
88
  def record_with_script(*cmd)
36
89
  scriptfile, timingfile = [temp_file, temp_file]
37
90
 
38
91
  args = ['script']
39
92
  args << '-c' + cmd.join(" ") if cmd.size > 0
93
+ args << '-q'
40
94
  args << '-t'
41
95
  args << scriptfile.path
42
96
 
@@ -45,15 +99,13 @@ module Showterm
45
99
  [scriptfile.open.read, timingfile.open.read]
46
100
  end
47
101
 
48
- def use_script?
49
- scriptfile, timingfile = record_with_script('echo', 'foo')
50
-
51
- scriptfile =~ /foo/ && timingfile =~ /^[0-9]/
52
- end
53
102
 
103
+ # Record using the bundled version of 'ttyrec'
104
+ #
105
+ # @param [*String] command to run
106
+ # @return [scriptfile, timingfile]
54
107
  def record_with_ttyrec(*cmd)
55
- scriptfile = Tempfile.new('showterm.script')
56
- scriptfile.close(false)
108
+ scriptfile = temp_file
57
109
 
58
110
  args = [File.join(File.dirname(File.dirname(__FILE__)), 'ext/ttyrec')]
59
111
  if cmd.size > 0
@@ -63,41 +115,9 @@ module Showterm
63
115
 
64
116
  system(*args)
65
117
 
66
- ret = scriptfile.open.read
67
- scriptfile.close(true)
68
- convert(ret)
69
- end
70
-
71
- # Get the current width of the terminal
72
- #
73
- # @return [Integer] number of columns
74
- def terminal_width
75
- guess = `tput cols`.to_i
76
- guess == 0 ? 80 : guess
118
+ convert(scriptfile.open.read)
77
119
  end
78
120
 
79
- # Upload the termshow to showterm.io
80
- #
81
- # @param [String] scriptfile The ANSI dump of the terminal
82
- # @param [String] timingfile The timings
83
- # @param [Integer] cols The width of the terminal
84
- def upload!(scriptfile, timingfile, cols=terminal_width)
85
- puts 'uploading, please wait.'
86
- request = Net::HTTP::Post.new("/scripts")
87
- request.set_form_data(:scriptfile => scriptfile,
88
- :timingfile => timingfile,
89
- :cols => cols)
90
-
91
- response = http(request)
92
- raise response.body unless Net::HTTPSuccess === response
93
- puts response.body
94
- rescue => e
95
- raise if retried
96
- retried = true
97
- retry
98
- end
99
-
100
- private
101
121
 
102
122
  # The original version of showterm used the 'script' binary.
103
123
  #
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "showterm"
3
- s.version = "0.2.1.pre.2"
3
+ s.version = "0.2.1.pre.3"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.author = "Conrad Irwin"
6
6
  s.email = "conrad.irwin@gmail.com"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: showterm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1.pre.2
4
+ version: 0.2.1.pre.3
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors: