vedeu 0.6.65 → 0.6.66
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/api.md +41 -1
- data/docs/dsl.md +21 -2
- data/docs/input.md +23 -0
- data/lib/vedeu/input/all.rb +1 -0
- data/lib/vedeu/input/capture.rb +1 -7
- data/lib/vedeu/input/raw.rb +41 -0
- data/lib/vedeu/input/read.rb +1 -7
- data/lib/vedeu/interfaces/clear.rb +7 -2
- data/lib/vedeu/output/renderers/all.rb +23 -14
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/input/capture_test.rb +4 -5
- data/test/lib/vedeu/input/raw_test.rb +36 -0
- metadata +4 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d3296c4a873190f0059f2603ddce098130fa4ac3
|
|
4
|
+
data.tar.gz: 00cdbf96d644568b7eb6d4cd783b82ab315289d3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9aed24c7e9953e07e443f4183302086010241f6c626934ecd178b8e0416ce82c2ace9c645eb2a670d66051104f3e7af6418ca37d072deac44c6f15540ec6392b
|
|
7
|
+
data.tar.gz: bc86d7cfad0485d4912fb7a4d04c9e485c34f44e064013a5976b32d6352fa8c751d007030776494e6668eb8e4bbe49f2779c05ac37fcd4876baf13bdd19fd44c
|
data/docs/api.md
CHANGED
|
@@ -146,10 +146,14 @@ See {file:docs/events.md}
|
|
|
146
146
|
|
|
147
147
|
### Vedeu.all_commands
|
|
148
148
|
|
|
149
|
+
Returns an array of all commands received by Vedeu.
|
|
150
|
+
|
|
149
151
|
@todo Add more documentation.
|
|
150
152
|
|
|
151
153
|
### Vedeu.all_keypresses
|
|
152
154
|
|
|
155
|
+
Returns an array of all keypresses received by Vedeu.
|
|
156
|
+
|
|
153
157
|
@todo Add more documentation.
|
|
154
158
|
|
|
155
159
|
### Vedeu.background_colours
|
|
@@ -383,10 +387,14 @@ Repository method. Access registered keymaps.
|
|
|
383
387
|
|
|
384
388
|
### Vedeu.last_command
|
|
385
389
|
|
|
390
|
+
Returns the last command entered into Vedeu.
|
|
391
|
+
|
|
386
392
|
@todo Add more documentation.
|
|
387
393
|
|
|
388
394
|
### Vedeu.last_keypress
|
|
389
395
|
|
|
396
|
+
Returns the last keypress entered into Vedeu.
|
|
397
|
+
|
|
390
398
|
@todo Add more documentation.
|
|
391
399
|
|
|
392
400
|
### Vedeu.log
|
|
@@ -419,7 +427,36 @@ Repository method. Access registered menus.
|
|
|
419
427
|
|
|
420
428
|
### Vedeu.read
|
|
421
429
|
|
|
422
|
-
|
|
430
|
+
This allows the direct reading from the terminal, unencumbered by the
|
|
431
|
+
framework.
|
|
432
|
+
|
|
433
|
+
Vedeu.read("some input here") # => programmatic cooked mode
|
|
434
|
+
# (default)
|
|
435
|
+
|
|
436
|
+
Vedeu.read("\e[24;2~", mode: :raw) # => programmatic raw mode
|
|
437
|
+
# (provides :shift_f12 in
|
|
438
|
+
# this example)
|
|
439
|
+
|
|
440
|
+
Vedeu.read(nil, mode: :raw) # => for a single keypress
|
|
441
|
+
|
|
442
|
+
Vedeu.read(nil, mode: :cooked) # => (default mode) for a 'line at
|
|
443
|
+
# a time' (pressing 'return'
|
|
444
|
+
# ends the line)
|
|
445
|
+
|
|
446
|
+
The way that these are used will depend on the mode your terminal is currently set to. Vedeu by default sets this to `:raw` (single character, hidden cursor). `Vedeu.read` by default expects the terminal to be in `:cooked` mode unless you provide the `mode: :raw` option.
|
|
447
|
+
|
|
448
|
+
- In `:cooked` mode (default), it will trigger a `:_command_` event
|
|
449
|
+
with the input provided, meaning you should bind to :command to
|
|
450
|
+
receive the input.
|
|
451
|
+
- In `:raw` mode, it will trigger a `:_keypress_` event with the input
|
|
452
|
+
provided, meaning you should bind to `:key` to receive the input.
|
|
453
|
+
|
|
454
|
+
You can also access the input given using the API methods:
|
|
455
|
+
|
|
456
|
+
Vedeu.all_commands
|
|
457
|
+
Vedeu.all_keypresses
|
|
458
|
+
Vedeu.last_command
|
|
459
|
+
Vedeu.last_keypress
|
|
423
460
|
|
|
424
461
|
### Vedeu.ready!
|
|
425
462
|
|
|
@@ -513,4 +550,7 @@ Repository method. Access registered renderers.
|
|
|
513
550
|
|
|
514
551
|
### Vedeu.write
|
|
515
552
|
|
|
553
|
+
This allows the direct writing to the terminal, unencumbered by the
|
|
554
|
+
framework.
|
|
555
|
+
|
|
516
556
|
@todo Add more documentation.
|
data/docs/dsl.md
CHANGED
|
@@ -78,6 +78,10 @@ end
|
|
|
78
78
|
|
|
79
79
|
{include:Vedeu::Borders::DSL}
|
|
80
80
|
|
|
81
|
+
### Creating a new named border
|
|
82
|
+
|
|
83
|
+
{include:Vedeu::Borders::DSL#border}
|
|
84
|
+
|
|
81
85
|
### Setting a title for the border
|
|
82
86
|
|
|
83
87
|
{include:Vedeu::Borders::DSL#title}
|
|
@@ -107,6 +111,10 @@ end
|
|
|
107
111
|
|
|
108
112
|
{include:Vedeu::Geometries::DSL}
|
|
109
113
|
|
|
114
|
+
### Creating a new named geometry
|
|
115
|
+
|
|
116
|
+
{include:Vedeu::Geometries::DSL#geometry}
|
|
117
|
+
|
|
110
118
|
### Setting the interface dimensions
|
|
111
119
|
|
|
112
120
|
{include:Vedeu::Geometries::DSL#align}
|
|
@@ -131,16 +139,23 @@ end
|
|
|
131
139
|
|
|
132
140
|
{include:Vedeu::Groups::DSL}
|
|
133
141
|
|
|
134
|
-
###
|
|
142
|
+
### Creating a new named group
|
|
135
143
|
|
|
136
144
|
{include:Vedeu::Groups::DSL.group}
|
|
137
145
|
|
|
146
|
+
### Add interfaces to groups
|
|
147
|
+
|
|
148
|
+
{include:Vedeu::Groups::DSL#add}
|
|
149
|
+
|
|
138
150
|
## Keymaps
|
|
139
151
|
|
|
140
152
|
{include:Vedeu::Input::DSL}
|
|
141
|
-
{include:Vedeu::Input::DSL.keymap}
|
|
142
153
|
{include:Vedeu::Input::DSL#name}
|
|
143
154
|
|
|
155
|
+
### Creating a new named group
|
|
156
|
+
|
|
157
|
+
{include:Vedeu::Input::DSL.keymap}
|
|
158
|
+
|
|
144
159
|
## Menus
|
|
145
160
|
|
|
146
161
|
{include:Vedeu::Menus::DSL}
|
|
@@ -148,6 +163,10 @@ end
|
|
|
148
163
|
{include:Vedeu::Menus::DSL#items}
|
|
149
164
|
{include:Vedeu::Menus::DSL#name}
|
|
150
165
|
|
|
166
|
+
### Creating a new named menu
|
|
167
|
+
|
|
168
|
+
{include:Vedeu::Menus::DSL.menu}
|
|
169
|
+
|
|
151
170
|
## Views
|
|
152
171
|
|
|
153
172
|
{include:Vedeu::DSL::View}
|
data/docs/input.md
CHANGED
|
@@ -124,3 +124,26 @@ Accessing the input can be achieved in the following ways:
|
|
|
124
124
|
Vedeu.bind(:command) do
|
|
125
125
|
# ... do something with the command
|
|
126
126
|
end
|
|
127
|
+
|
|
128
|
+
## Providing Input
|
|
129
|
+
|
|
130
|
+
Input can be provided in a couple of ways, automatic and manually.
|
|
131
|
+
|
|
132
|
+
### Automatically
|
|
133
|
+
|
|
134
|
+
Dependent on the terminal mode as mentioned previously.
|
|
135
|
+
|
|
136
|
+
- In `:raw` mode, a keypress (a single character e.g. `b`, or
|
|
137
|
+
modifier+character e.g. Shift+F12), can be bound via the keymaps
|
|
138
|
+
functionality.
|
|
139
|
+
- In `:cooked` mode, a group of keypresses, terminated with the
|
|
140
|
+
`return` key will trigger the `:command` event which you can bind to
|
|
141
|
+
and perform actions dependent on the input provided.
|
|
142
|
+
- In `:fake` mode, Vedeu emulates the terminal allowing you all the
|
|
143
|
+
benefits of `:cooked` mode but with Vedeu's in-built editor. The
|
|
144
|
+
input can be accessed using the API calls as mentioned in
|
|
145
|
+
{file:docs/input.md#accessing_input}.
|
|
146
|
+
|
|
147
|
+
### Manually (semi-automatic)
|
|
148
|
+
|
|
149
|
+
See {file:docs/api.md#vedeuread}
|
data/lib/vedeu/input/all.rb
CHANGED
data/lib/vedeu/input/capture.rb
CHANGED
|
@@ -91,13 +91,7 @@ module Vedeu
|
|
|
91
91
|
#
|
|
92
92
|
# @return [String]
|
|
93
93
|
def input
|
|
94
|
-
keys =
|
|
95
|
-
|
|
96
|
-
if keys.ord == Vedeu::ESCAPE_KEY_CODE
|
|
97
|
-
keys << console.read_nonblock(4) rescue nil
|
|
98
|
-
keys << console.read_nonblock(3) rescue nil
|
|
99
|
-
keys << console.read_nonblock(2) rescue nil
|
|
100
|
-
end
|
|
94
|
+
keys = Vedeu::Input::Raw.read
|
|
101
95
|
|
|
102
96
|
return Vedeu::Input::Mouse.click(keys) if click?(keys)
|
|
103
97
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Vedeu
|
|
2
|
+
|
|
3
|
+
module Input
|
|
4
|
+
|
|
5
|
+
class Raw
|
|
6
|
+
|
|
7
|
+
# @see Vedeu::Input::Raw#initialize
|
|
8
|
+
def self.read
|
|
9
|
+
new.read
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Returns a new instance of Vedeu::Input::Raw.
|
|
13
|
+
#
|
|
14
|
+
# @return [Vedeu::Input::Raw]
|
|
15
|
+
def initialize; end
|
|
16
|
+
|
|
17
|
+
# @return [String]
|
|
18
|
+
def read
|
|
19
|
+
keys = console.getch
|
|
20
|
+
|
|
21
|
+
if keys.ord == Vedeu::ESCAPE_KEY_CODE
|
|
22
|
+
keys << console.read_nonblock(4) rescue nil
|
|
23
|
+
keys << console.read_nonblock(3) rescue nil
|
|
24
|
+
keys << console.read_nonblock(2) rescue nil
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
keys
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
# @return [IO]
|
|
33
|
+
def console
|
|
34
|
+
@console ||= Vedeu::Terminal.console
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end # Raw
|
|
38
|
+
|
|
39
|
+
end # Input
|
|
40
|
+
|
|
41
|
+
end # Vedeu
|
data/lib/vedeu/input/read.rb
CHANGED
|
@@ -77,13 +77,7 @@ module Vedeu
|
|
|
77
77
|
console.gets.chomp
|
|
78
78
|
|
|
79
79
|
else
|
|
80
|
-
keys =
|
|
81
|
-
|
|
82
|
-
if keys.ord == Vedeu::ESCAPE_KEY_CODE
|
|
83
|
-
keys << console.read_nonblock(4) rescue nil
|
|
84
|
-
keys << console.read_nonblock(3) rescue nil
|
|
85
|
-
keys << console.read_nonblock(2) rescue nil
|
|
86
|
-
end
|
|
80
|
+
keys = Vedeu::Input::Raw.read
|
|
87
81
|
|
|
88
82
|
Vedeu::Input::Translator.translate(keys)
|
|
89
83
|
|
|
@@ -137,11 +137,11 @@ module Vedeu
|
|
|
137
137
|
Vedeu.timer("Optimised clearing #{clearing}: '#{name}'".freeze) do
|
|
138
138
|
height.times.map do |iy|
|
|
139
139
|
[
|
|
140
|
-
|
|
140
|
+
position(y + iy, x),
|
|
141
141
|
colour.to_s,
|
|
142
142
|
chars,
|
|
143
143
|
].join
|
|
144
|
-
end.join +
|
|
144
|
+
end.join + position(y, x)
|
|
145
145
|
end
|
|
146
146
|
end
|
|
147
147
|
|
|
@@ -175,6 +175,11 @@ module Vedeu
|
|
|
175
175
|
end
|
|
176
176
|
end
|
|
177
177
|
|
|
178
|
+
# @return [Vedeu::Geometries::Position]
|
|
179
|
+
def position(pos_y, pos_x)
|
|
180
|
+
Vedeu::Geometries::Position.new(pos_y, pos_x).to_s
|
|
181
|
+
end
|
|
182
|
+
|
|
178
183
|
# @return [Fixnum]
|
|
179
184
|
def width
|
|
180
185
|
@width ||= if content_only?
|
|
@@ -18,14 +18,9 @@ module Vedeu
|
|
|
18
18
|
# @return [Array<void>]
|
|
19
19
|
def clear
|
|
20
20
|
storage.map do |renderer|
|
|
21
|
-
|
|
22
|
-
message: "Clearing via #{renderer.class.name}".freeze)
|
|
21
|
+
log('Clearing', renderer)
|
|
23
22
|
|
|
24
|
-
|
|
25
|
-
mutex.synchronize do
|
|
26
|
-
toggle_cursor { renderer.clear }
|
|
27
|
-
end
|
|
28
|
-
end
|
|
23
|
+
threaded(renderer) { renderer.clear }
|
|
29
24
|
end.each(&:join) if Vedeu.ready?
|
|
30
25
|
|
|
31
26
|
''
|
|
@@ -51,14 +46,9 @@ module Vedeu
|
|
|
51
46
|
# @return [Array<void>]
|
|
52
47
|
def render(output)
|
|
53
48
|
storage.map do |renderer|
|
|
54
|
-
|
|
55
|
-
message: "Rendering via #{renderer.class.name}".freeze)
|
|
49
|
+
log('Rendering', renderer)
|
|
56
50
|
|
|
57
|
-
|
|
58
|
-
mutex.synchronize do
|
|
59
|
-
toggle_cursor { renderer.render(output) }
|
|
60
|
-
end
|
|
61
|
-
end
|
|
51
|
+
threaded(renderer) { renderer.render(output) }
|
|
62
52
|
end.each(&:join) if Vedeu.ready?
|
|
63
53
|
|
|
64
54
|
output
|
|
@@ -96,6 +86,14 @@ module Vedeu
|
|
|
96
86
|
Set.new
|
|
97
87
|
end
|
|
98
88
|
|
|
89
|
+
# @param message [String]
|
|
90
|
+
# @param renderer [Class]
|
|
91
|
+
# @return [void]
|
|
92
|
+
def log(message, renderer)
|
|
93
|
+
Vedeu.log(type: :render,
|
|
94
|
+
message: "#{message} via #{renderer.class.name}".freeze)
|
|
95
|
+
end
|
|
96
|
+
|
|
99
97
|
# @return [Mutex]
|
|
100
98
|
def mutex
|
|
101
99
|
@mutex ||= Mutex.new
|
|
@@ -106,6 +104,17 @@ module Vedeu
|
|
|
106
104
|
@storage ||= in_memory
|
|
107
105
|
end
|
|
108
106
|
|
|
107
|
+
# @return [void]
|
|
108
|
+
def threaded(renderer)
|
|
109
|
+
Thread.new(renderer) do
|
|
110
|
+
mutex.synchronize do
|
|
111
|
+
toggle_cursor do
|
|
112
|
+
yield
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
109
118
|
# @return [void]
|
|
110
119
|
def toggle_cursor
|
|
111
120
|
Vedeu.trigger(:_hide_cursor_)
|
data/lib/vedeu/version.rb
CHANGED
|
@@ -48,8 +48,9 @@ module Vedeu
|
|
|
48
48
|
let(:registered) { false }
|
|
49
49
|
|
|
50
50
|
before do
|
|
51
|
-
Vedeu::
|
|
52
|
-
Vedeu::Input::Mapper.stubs(:registered?).with(translated, _name)
|
|
51
|
+
Vedeu::Input::Raw.stubs(:read).returns(keypress)
|
|
52
|
+
Vedeu::Input::Mapper.stubs(:registered?).with(translated, _name)
|
|
53
|
+
.returns(registered)
|
|
53
54
|
Vedeu.interfaces.stubs(:by_name).returns(interface)
|
|
54
55
|
end
|
|
55
56
|
|
|
@@ -157,9 +158,7 @@ module Vedeu
|
|
|
157
158
|
context 'when the terminal mode is :raw' do
|
|
158
159
|
let(:is_raw_mode) { true }
|
|
159
160
|
|
|
160
|
-
before
|
|
161
|
-
Vedeu::Terminal.console.stubs(:getch).returns(keypress)
|
|
162
|
-
end
|
|
161
|
+
before { Vedeu::Input::Raw.stubs(:read).returns(keypress) }
|
|
163
162
|
|
|
164
163
|
context 'when the keypress is an escape sequence' do
|
|
165
164
|
context 'when the key is :shift_f5 (read_nonblock(7))' do
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
module Vedeu
|
|
4
|
+
|
|
5
|
+
module Input
|
|
6
|
+
|
|
7
|
+
describe Raw do
|
|
8
|
+
|
|
9
|
+
let(:described) { Vedeu::Input::Raw }
|
|
10
|
+
let(:instance) { described.new }
|
|
11
|
+
|
|
12
|
+
describe '#initialize' do
|
|
13
|
+
it { instance.must_be_instance_of(described) }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe '.read' do
|
|
17
|
+
let(:keypress) { 'a' }
|
|
18
|
+
|
|
19
|
+
before do
|
|
20
|
+
Vedeu::Terminal.console.stubs(:getch).returns(keypress)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
subject { described.read }
|
|
24
|
+
|
|
25
|
+
it { subject.must_equal(keypress) }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe '#read' do
|
|
29
|
+
it { instance.must_respond_to(:read) }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end # Raw
|
|
33
|
+
|
|
34
|
+
end # Input
|
|
35
|
+
|
|
36
|
+
end # Vedeu
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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.66
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Gavin Laking
|
|
@@ -440,6 +440,7 @@ files:
|
|
|
440
440
|
- lib/vedeu/input/keymap.rb
|
|
441
441
|
- lib/vedeu/input/mapper.rb
|
|
442
442
|
- lib/vedeu/input/mouse.rb
|
|
443
|
+
- lib/vedeu/input/raw.rb
|
|
443
444
|
- lib/vedeu/input/read.rb
|
|
444
445
|
- lib/vedeu/input/repository.rb
|
|
445
446
|
- lib/vedeu/input/store.rb
|
|
@@ -625,6 +626,7 @@ files:
|
|
|
625
626
|
- test/lib/vedeu/input/keymap_test.rb
|
|
626
627
|
- test/lib/vedeu/input/mapper_test.rb
|
|
627
628
|
- test/lib/vedeu/input/mouse_test.rb
|
|
629
|
+
- test/lib/vedeu/input/raw_test.rb
|
|
628
630
|
- test/lib/vedeu/input/read_test.rb
|
|
629
631
|
- test/lib/vedeu/input/repository_test.rb
|
|
630
632
|
- test/lib/vedeu/input/store_test.rb
|
|
@@ -839,6 +841,7 @@ test_files:
|
|
|
839
841
|
- test/lib/vedeu/input/keymap_test.rb
|
|
840
842
|
- test/lib/vedeu/input/mapper_test.rb
|
|
841
843
|
- test/lib/vedeu/input/mouse_test.rb
|
|
844
|
+
- test/lib/vedeu/input/raw_test.rb
|
|
842
845
|
- test/lib/vedeu/input/read_test.rb
|
|
843
846
|
- test/lib/vedeu/input/repository_test.rb
|
|
844
847
|
- test/lib/vedeu/input/store_test.rb
|