vedeu 0.6.38 → 0.6.39
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.
- checksums.yaml +4 -4
- data/docs/cursors.md +19 -0
- data/examples/dsl_alignment.rb +2 -2
- data/examples/dsl_editor.rb +2 -2
- data/examples/dsl_hello_worlds.rb +1 -1
- data/examples/dsl_horizontal_alignment.rb +2 -2
- data/examples/dsl_vertical_alignment.rb +2 -2
- data/lib/vedeu/buffers/buffer.rb +20 -0
- data/lib/vedeu/cursors/cursor.rb +14 -2
- data/lib/vedeu/input/translator.rb +1 -0
- data/lib/vedeu/output/renderers/all.rb +2 -2
- data/lib/vedeu/repositories/repository.rb +1 -0
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/buffers/buffer_test.rb +32 -0
- data/test/lib/vedeu/cursors/cursor_test.rb +2 -0
- data/test/lib/vedeu/output/renderers/all_test.rb +13 -8
- data/test/support/examples/material_colours_app.rb +17 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ba1c61c6e18c58f67aa29538d0f7c7765199fad5
|
|
4
|
+
data.tar.gz: 82dc0fd7e7f3c65bff2fa207d6103cf8784ada1f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b53f28b9940e7f4cb175adec72115203635cceaab007d13f134fca09d39b426fd06fe95ee2526c8a4f6bac591672b40f4217c1fcedfc409e5506c7aad67ff52b
|
|
7
|
+
data.tar.gz: e05e316be1c418cde5c71c4b2d1bfe5b58ac5a119ceeb5bad4b2227c0e83857c9a4586b1fb1b5e6fde1c440f82c081707bfa798b317eef3808e44e5c3e10c9e1
|
data/docs/cursors.md
CHANGED
|
@@ -57,6 +57,8 @@ specified. If 'name' is unknown, using 'Vedeu.focus' will use the
|
|
|
57
57
|
interface currently in focus.
|
|
58
58
|
|
|
59
59
|
### `:\_cursor_left\_`
|
|
60
|
+
Moves the cursor one character left, unless the left-most position
|
|
61
|
+
for the view or terminal is reached.
|
|
60
62
|
|
|
61
63
|
Vedeu.trigger(:_cursor_left_, name)
|
|
62
64
|
Vedeu.trigger(:_cursor_left_, Vedeu.focus)
|
|
@@ -67,6 +69,8 @@ interface currently in focus.
|
|
|
67
69
|
Vedeu.trigger(:_cursor_down_, Vedeu.focus)
|
|
68
70
|
|
|
69
71
|
### `:\_cursor_up\_`
|
|
72
|
+
Moves the cursor one line up, unless the top-most position for the
|
|
73
|
+
view or terminal is reached.
|
|
70
74
|
|
|
71
75
|
Vedeu.trigger(:_cursor_up_, name)
|
|
72
76
|
Vedeu.trigger(:_cursor_up_, Vedeu.focus)
|
|
@@ -76,3 +80,18 @@ interface currently in focus.
|
|
|
76
80
|
Vedeu.trigger(:_cursor_right_, name)
|
|
77
81
|
Vedeu.trigger(:_cursor_right_, Vedeu.focus)
|
|
78
82
|
|
|
83
|
+
### `:\_cursor_top\_`
|
|
84
|
+
Moves the cursor to the top-most position for the view or terminal.
|
|
85
|
+
If the view contains content, then this event will effectively scroll
|
|
86
|
+
to the first line of the content.
|
|
87
|
+
|
|
88
|
+
Vedeu.trigger(:_cursor_top_, name)
|
|
89
|
+
Vedeu.trigger(:_cursor_top_, Vedeu.focus)
|
|
90
|
+
|
|
91
|
+
### `:\_cursor_bottom\_`
|
|
92
|
+
Moves the cursor to the bottom-most position for the view or terminal.
|
|
93
|
+
If the view contains content, then this event will effectively scroll
|
|
94
|
+
to the last line of the content.
|
|
95
|
+
|
|
96
|
+
Vedeu.trigger(:_cursor_bottom_, name)
|
|
97
|
+
Vedeu.trigger(:_cursor_bottom_, Vedeu.focus)
|
data/examples/dsl_alignment.rb
CHANGED
|
@@ -8,8 +8,8 @@ class AlignmentApp
|
|
|
8
8
|
Vedeu.bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
|
|
9
9
|
|
|
10
10
|
Vedeu.configure do
|
|
11
|
-
log '
|
|
12
|
-
renderers Vedeu::Renderers::File.new(filename: '
|
|
11
|
+
log '/tmp/alignment.log'
|
|
12
|
+
renderers Vedeu::Renderers::File.new(filename: '/tmp/alignment.out')
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
Vedeu.interface :top_left_view do
|
data/examples/dsl_editor.rb
CHANGED
|
@@ -8,8 +8,8 @@ class EditorApp
|
|
|
8
8
|
Vedeu.bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
|
|
9
9
|
|
|
10
10
|
Vedeu.configure do
|
|
11
|
-
log '
|
|
12
|
-
renderers Vedeu::Renderers::File.new(filename: '
|
|
11
|
+
log '/tmp/editor.log'
|
|
12
|
+
renderers Vedeu::Renderers::File.new(filename: '/tmp/editor.out')
|
|
13
13
|
fake!
|
|
14
14
|
end
|
|
15
15
|
|
|
@@ -64,8 +64,8 @@ class HorizontalAlignmentApp
|
|
|
64
64
|
Vedeu.bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
|
|
65
65
|
|
|
66
66
|
Vedeu.configure do
|
|
67
|
-
log '
|
|
68
|
-
renderers Vedeu::Renderers::File.new(filename: '
|
|
67
|
+
log '/tmp/horizontal_alignment.log'
|
|
68
|
+
renderers Vedeu::Renderers::File.new(filename: '/tmp/horizontal_alignment.out')
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
Vedeu.interface :left_interface do
|
|
@@ -64,8 +64,8 @@ class VerticalAlignmentApp
|
|
|
64
64
|
Vedeu.bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
|
|
65
65
|
|
|
66
66
|
Vedeu.configure do
|
|
67
|
-
log '
|
|
68
|
-
renderers Vedeu::Renderers::File.new(filename: '
|
|
67
|
+
log '/tmp/vertical_alignment.log'
|
|
68
|
+
renderers Vedeu::Renderers::File.new(filename: '/tmp/vertical_alignment.out')
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
Vedeu.interface :top_interface do
|
data/lib/vedeu/buffers/buffer.rb
CHANGED
|
@@ -123,6 +123,26 @@ module Vedeu
|
|
|
123
123
|
end
|
|
124
124
|
end
|
|
125
125
|
|
|
126
|
+
# Returns the number of lines of content for the buffer or 0 if
|
|
127
|
+
# the buffer is empty.
|
|
128
|
+
#
|
|
129
|
+
# @return [Fixnum]
|
|
130
|
+
def size
|
|
131
|
+
if back?
|
|
132
|
+
back.lines.size
|
|
133
|
+
|
|
134
|
+
elsif front?
|
|
135
|
+
front.lines.size
|
|
136
|
+
|
|
137
|
+
elsif previous?
|
|
138
|
+
previous.lines.size
|
|
139
|
+
|
|
140
|
+
else
|
|
141
|
+
0
|
|
142
|
+
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
126
146
|
private
|
|
127
147
|
|
|
128
148
|
# Returns the default options/attributes for this class.
|
data/lib/vedeu/cursors/cursor.rb
CHANGED
|
@@ -212,12 +212,12 @@ module Vedeu
|
|
|
212
212
|
|
|
213
213
|
# @return [Fixnum]
|
|
214
214
|
def ox
|
|
215
|
-
@ox < 0 ? 0 : @ox
|
|
215
|
+
@ox = @ox < 0 ? 0 : @ox
|
|
216
216
|
end
|
|
217
217
|
|
|
218
218
|
# @return [Fixnum]
|
|
219
219
|
def oy
|
|
220
|
-
@oy < 0 ? 0 : @oy
|
|
220
|
+
@oy = @oy < 0 ? 0 : @oy
|
|
221
221
|
end
|
|
222
222
|
|
|
223
223
|
# Return the position of this cursor.
|
|
@@ -382,6 +382,18 @@ module Vedeu
|
|
|
382
382
|
Vedeu.trigger(:_refresh_cursor_, name)
|
|
383
383
|
end
|
|
384
384
|
|
|
385
|
+
# See {file:docs/cursors.md}
|
|
386
|
+
Vedeu.bind(:_cursor_top_) do |name|
|
|
387
|
+
Vedeu.trigger(:_cursor_reposition_, name, 0, 0)
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
# See {file:docs/cursors.md}
|
|
391
|
+
Vedeu.bind(:_cursor_bottom_) do |name|
|
|
392
|
+
count = Vedeu.buffers.by_name(name).size
|
|
393
|
+
|
|
394
|
+
Vedeu.trigger(:_cursor_reposition_, name, count, 0)
|
|
395
|
+
end
|
|
396
|
+
|
|
385
397
|
# :nocov:
|
|
386
398
|
|
|
387
399
|
end # Vedeu
|
|
@@ -103,11 +103,11 @@ module Vedeu
|
|
|
103
103
|
|
|
104
104
|
# @return [void]
|
|
105
105
|
def toggle_cursor
|
|
106
|
-
Vedeu.
|
|
106
|
+
Vedeu.trigger(:_hide_cursor_)
|
|
107
107
|
|
|
108
108
|
yield
|
|
109
109
|
|
|
110
|
-
Vedeu.
|
|
110
|
+
Vedeu.trigger(:_show_cursor_)
|
|
111
111
|
end
|
|
112
112
|
|
|
113
113
|
end # Renderers
|
data/lib/vedeu/version.rb
CHANGED
|
@@ -149,6 +149,38 @@ module Vedeu
|
|
|
149
149
|
end
|
|
150
150
|
end
|
|
151
151
|
|
|
152
|
+
describe '#size' do
|
|
153
|
+
subject { instance.size }
|
|
154
|
+
|
|
155
|
+
context 'when there is new content on the back buffer' do
|
|
156
|
+
let(:back) {
|
|
157
|
+
Vedeu::Views::View.new(value: [Vedeu::Views::Line.new])
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
it { subject.must_equal(1) }
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
context 'when there is existing content on the front buffer' do
|
|
164
|
+
let(:front) {
|
|
165
|
+
Vedeu::Views::View.new(value: [Vedeu::Views::Line.new])
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
it { subject.must_equal(1) }
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
context 'when there is content on the previous buffer' do
|
|
172
|
+
let(:previous) {
|
|
173
|
+
Vedeu::Views::View.new(value: [Vedeu::Views::Line.new])
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
it { subject.must_equal(1) }
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
context 'when there is no content on any buffer' do
|
|
180
|
+
it { subject.must_equal(0) }
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
152
184
|
end # Buffer
|
|
153
185
|
|
|
154
186
|
end # Buffers
|
|
@@ -11,6 +11,8 @@ module Vedeu
|
|
|
11
11
|
# it { Vedeu.bound?(:_cursor_reset_).must_equal(true) }
|
|
12
12
|
it { Vedeu.bound?(:_cursor_right_).must_equal(true) }
|
|
13
13
|
it { Vedeu.bound?(:_cursor_up_).must_equal(true) }
|
|
14
|
+
it { Vedeu.bound?(:_cursor_top_).must_equal(true) }
|
|
15
|
+
it { Vedeu.bound?(:_cursor_bottom_).must_equal(true) }
|
|
14
16
|
end
|
|
15
17
|
|
|
16
18
|
module Cursors
|
|
@@ -64,8 +64,8 @@ module Vedeu
|
|
|
64
64
|
Vedeu.stubs(:focus).returns(:vedeu_renderers_render)
|
|
65
65
|
Vedeu::Renderers.reset
|
|
66
66
|
Vedeu::Renderers.renderer(DummyRenderer)
|
|
67
|
-
Vedeu.stubs(:
|
|
68
|
-
Vedeu.stubs(:
|
|
67
|
+
Vedeu.stubs(:trigger).with(:_hide_cursor_)
|
|
68
|
+
Vedeu.stubs(:trigger).with(:_show_cursor_)
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
subject { described.render(output) }
|
|
@@ -82,6 +82,17 @@ module Vedeu
|
|
|
82
82
|
.new(value: Vedeu::EscapeSequences::Esc.hide_cursor)
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
+
it 'hides the cursor before rendering the content to avoid cursor ' \
|
|
86
|
+
'flicker' do
|
|
87
|
+
Vedeu.expects(:trigger).with(:_hide_cursor_)
|
|
88
|
+
subject
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it 'shows the cursor after rendering the content' do
|
|
92
|
+
Vedeu.expects(:trigger).with(:_show_cursor_)
|
|
93
|
+
subject
|
|
94
|
+
end
|
|
95
|
+
|
|
85
96
|
it { subject.must_be_instance_of(Vedeu::Models::Escape) }
|
|
86
97
|
end
|
|
87
98
|
|
|
@@ -89,12 +100,6 @@ module Vedeu
|
|
|
89
100
|
it { subject.must_be_instance_of(NilClass) }
|
|
90
101
|
end
|
|
91
102
|
end
|
|
92
|
-
|
|
93
|
-
context 'when no interfaces/view have been defined' do
|
|
94
|
-
before { Vedeu.stubs(:focus).raises(Vedeu::Error::Fatal) }
|
|
95
|
-
|
|
96
|
-
it { proc { subject }.must_raise(Vedeu::Error::Fatal) }
|
|
97
|
-
end
|
|
98
103
|
end
|
|
99
104
|
|
|
100
105
|
describe '.renderer' do
|
|
@@ -97,7 +97,7 @@ class VedeuMaterialColoursApp
|
|
|
97
97
|
x(3)
|
|
98
98
|
xn(64)
|
|
99
99
|
y(15)
|
|
100
|
-
yn(
|
|
100
|
+
yn(34)
|
|
101
101
|
end
|
|
102
102
|
zindex(1)
|
|
103
103
|
end
|
|
@@ -107,6 +107,8 @@ class VedeuMaterialColoursApp
|
|
|
107
107
|
key(:right) { Vedeu.trigger(:_cursor_right_) }
|
|
108
108
|
key(:down) { Vedeu.trigger(:_cursor_down_) }
|
|
109
109
|
key(:left) { Vedeu.trigger(:_cursor_left_) }
|
|
110
|
+
key(:home) { Vedeu.trigger(:_cursor_top_) }
|
|
111
|
+
key(:end) { Vedeu.trigger(:_cursor_bottom_) }
|
|
110
112
|
|
|
111
113
|
key('q') { Vedeu.trigger(:_exit_) }
|
|
112
114
|
key(:escape) { Vedeu.trigger(:_mode_switch_) }
|
|
@@ -202,6 +204,20 @@ class VedeuMaterialColoursApp
|
|
|
202
204
|
}
|
|
203
205
|
stream { left "Move cursor" }
|
|
204
206
|
}
|
|
207
|
+
line {
|
|
208
|
+
stream {
|
|
209
|
+
left "home",
|
|
210
|
+
foreground: '#ffff00', width: 20
|
|
211
|
+
}
|
|
212
|
+
stream { left "Move cursor to first line of content." }
|
|
213
|
+
}
|
|
214
|
+
line {
|
|
215
|
+
stream {
|
|
216
|
+
left "end",
|
|
217
|
+
foreground: '#ffff00', width: 20
|
|
218
|
+
}
|
|
219
|
+
stream { left "Move cursor to last line of content." }
|
|
220
|
+
}
|
|
205
221
|
line {}
|
|
206
222
|
line {
|
|
207
223
|
stream {
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: vedeu
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.6.
|
|
4
|
+
version: 0.6.39
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Gavin Laking
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-10-
|
|
11
|
+
date: 2015-10-26 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: guard
|