tp 0.0.2 → 0.1.0
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/lib/keyboard.rb +58 -2
- data/lib/screen.rb +7 -0
- data/lib/tp/presenter.rb +23 -3
- data/lib/tp/slide_deck.rb +30 -0
- data/lib/tp/version.rb +1 -1
- data/lib/tp.rb +1 -0
- data/spec/lib/keyboard_spec.rb +0 -9
- data/spec/lib/tp/presenter_spec.rb +4 -3
- metadata +2 -1
data/lib/keyboard.rb
CHANGED
@@ -1,7 +1,63 @@
|
|
1
1
|
module Keyboard
|
2
2
|
extend self
|
3
3
|
|
4
|
-
def
|
5
|
-
|
4
|
+
def read
|
5
|
+
begin
|
6
|
+
old_stty = `stty -g`
|
7
|
+
system "stty raw -echo"
|
8
|
+
|
9
|
+
chr = STDIN.getc.chr
|
10
|
+
|
11
|
+
if chr == "\e"
|
12
|
+
extra_thread = Thread.new {
|
13
|
+
chr = chr + STDIN.getc.chr
|
14
|
+
chr = chr + STDIN.getc.chr
|
15
|
+
}
|
16
|
+
|
17
|
+
extra_thread.join 0.00001
|
18
|
+
extra_thread.kill
|
19
|
+
end
|
20
|
+
ensure
|
21
|
+
system "stty #{old_stty}"
|
22
|
+
end
|
23
|
+
|
24
|
+
symbolize chr
|
25
|
+
end
|
26
|
+
|
27
|
+
def wait_for_return
|
28
|
+
loop do
|
29
|
+
result = read
|
30
|
+
|
31
|
+
return result if result == :return
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def symbolize(character)
|
38
|
+
case character
|
39
|
+
when " "
|
40
|
+
:space
|
41
|
+
when "\t"
|
42
|
+
:tab
|
43
|
+
when "\r", "\n"
|
44
|
+
:return
|
45
|
+
when "\e"
|
46
|
+
:escape
|
47
|
+
when "\e[A"
|
48
|
+
:up
|
49
|
+
when "\e[B"
|
50
|
+
:down
|
51
|
+
when "\e[D"
|
52
|
+
:left
|
53
|
+
when "\e[C"
|
54
|
+
:right
|
55
|
+
when "\177"
|
56
|
+
:backspace
|
57
|
+
when "\004"
|
58
|
+
:delete
|
59
|
+
else
|
60
|
+
character
|
61
|
+
end
|
6
62
|
end
|
7
63
|
end
|
data/lib/screen.rb
CHANGED
data/lib/tp/presenter.rb
CHANGED
@@ -7,10 +7,22 @@ module TP
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def present
|
10
|
-
|
10
|
+
Screen.suggest 30, 8
|
11
|
+
Keyboard.wait_for_return
|
12
|
+
|
13
|
+
loop do
|
11
14
|
Screen.clear!
|
12
|
-
|
13
|
-
|
15
|
+
|
16
|
+
show_slide slide_deck.current or break
|
17
|
+
|
18
|
+
case Keyboard.read
|
19
|
+
when :right, :down, :space, :return, 'l', 'k'
|
20
|
+
slide_deck.next
|
21
|
+
when :left, :up, :backspace, 'h', 'j'
|
22
|
+
slide_deck.previous
|
23
|
+
when 'q'
|
24
|
+
break
|
25
|
+
end
|
14
26
|
end
|
15
27
|
|
16
28
|
Screen.clear!
|
@@ -24,7 +36,13 @@ module TP
|
|
24
36
|
result.map { |string| Slide.new string }
|
25
37
|
end
|
26
38
|
|
39
|
+
def slide_deck
|
40
|
+
@slide_deck ||= SlideDeck.new slides
|
41
|
+
end
|
42
|
+
|
27
43
|
def show_slide(slide)
|
44
|
+
return unless slide
|
45
|
+
|
28
46
|
buffer = slide.header.center Screen.width
|
29
47
|
|
30
48
|
if slide.body
|
@@ -38,6 +56,8 @@ module TP
|
|
38
56
|
end
|
39
57
|
|
40
58
|
print buffer
|
59
|
+
|
60
|
+
true
|
41
61
|
end
|
42
62
|
|
43
63
|
def bullet
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module TP
|
2
|
+
class SlideDeck
|
3
|
+
attr_accessor :cursor, :slides
|
4
|
+
|
5
|
+
def initialize(slides)
|
6
|
+
self.cursor = 0
|
7
|
+
self.slides = slides
|
8
|
+
end
|
9
|
+
|
10
|
+
def [](index)
|
11
|
+
slides[index]
|
12
|
+
end
|
13
|
+
|
14
|
+
def current
|
15
|
+
slides[cursor]
|
16
|
+
end
|
17
|
+
|
18
|
+
def next
|
19
|
+
self.cursor += 1
|
20
|
+
|
21
|
+
current
|
22
|
+
end
|
23
|
+
|
24
|
+
def previous
|
25
|
+
self.cursor -= 1
|
26
|
+
|
27
|
+
current
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/tp/version.rb
CHANGED
data/lib/tp.rb
CHANGED
data/spec/lib/keyboard_spec.rb
CHANGED
@@ -19,13 +19,14 @@ describe TP::Presenter do
|
|
19
19
|
}
|
20
20
|
|
21
21
|
before :each do
|
22
|
-
|
22
|
+
Keyboard.stub read: :return
|
23
|
+
Screen.stub width: 20, height: 20, suggest: nil
|
23
24
|
end
|
24
25
|
|
25
26
|
describe "#present" do
|
26
27
|
it "works" do
|
27
|
-
Keyboard.should_receive(:
|
28
|
-
Screen.should_receive(:clear!).exactly(
|
28
|
+
Keyboard.should_receive(:wait_for_return).exactly(1).times
|
29
|
+
Screen.should_receive(:clear!).exactly(5).times
|
29
30
|
|
30
31
|
presenter.should_receive(:print).exactly(3).times
|
31
32
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -97,6 +97,7 @@ files:
|
|
97
97
|
- lib/tp.rb
|
98
98
|
- lib/tp/presenter.rb
|
99
99
|
- lib/tp/slide.rb
|
100
|
+
- lib/tp/slide_deck.rb
|
100
101
|
- lib/tp/version.rb
|
101
102
|
- spec/lib/keyboard_spec.rb
|
102
103
|
- spec/lib/screen_spec.rb
|