vedeu 0.3.1 → 0.3.2
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/examples/borders_app.rb +15 -14
- data/examples/colours_app.rb +1 -2
- data/examples/cursor_app.rb +2 -5
- data/examples/geometry_app.rb +141 -0
- data/lib/vedeu.rb +0 -17
- data/lib/vedeu/api.rb +18 -3
- data/lib/vedeu/buffers/all.rb +0 -6
- data/lib/vedeu/buffers/buffer.rb +5 -2
- data/lib/vedeu/cursor/all.rb +0 -13
- data/lib/vedeu/cursor/cursor.rb +1 -1
- data/lib/vedeu/dsl/components/border.rb +94 -12
- data/lib/vedeu/dsl/components/geometry.rb +40 -48
- data/lib/vedeu/dsl/components/keymap.rb +36 -0
- data/lib/vedeu/dsl/interface.rb +20 -5
- data/lib/vedeu/dsl/stream.rb +2 -0
- data/lib/vedeu/events/all.rb +0 -5
- data/lib/vedeu/events/event.rb +2 -1
- data/lib/vedeu/events/trigger.rb +1 -3
- data/lib/vedeu/input/all.rb +7 -12
- data/lib/vedeu/input/keymap.rb +10 -34
- data/lib/vedeu/input/keys.rb +1 -0
- data/lib/vedeu/input/mapper.rb +1 -5
- data/lib/vedeu/models/collection.rb +4 -0
- data/lib/vedeu/models/geometry.rb +2 -1
- data/lib/vedeu/models/model.rb +4 -0
- data/lib/vedeu/models/view/char.rb +10 -0
- data/lib/vedeu/models/view/chars.rb +3 -2
- data/lib/vedeu/models/view/interface.rb +18 -28
- data/lib/vedeu/models/view/interfaces.rb +3 -2
- data/lib/vedeu/models/view/lines.rb +3 -2
- data/lib/vedeu/models/view/stream.rb +1 -1
- data/lib/vedeu/models/view/streams.rb +3 -2
- data/lib/vedeu/output/border.rb +29 -21
- data/lib/vedeu/output/compositor.rb +2 -3
- data/lib/vedeu/output/output.rb +5 -1
- data/lib/vedeu/output/viewport.rb +45 -24
- data/lib/vedeu/output/wordwrap.rb +7 -1
- data/lib/vedeu/output/writer.rb +3 -0
- data/lib/vedeu/presentation/presentation.rb +2 -0
- data/lib/vedeu/repositories/all.rb +107 -1
- data/lib/vedeu/repositories/repository.rb +4 -0
- data/lib/vedeu/support/bounding_area.rb +1 -1
- data/lib/vedeu/support/position_validator.rb +18 -0
- data/test/lib/vedeu/buffers/buffer_test.rb +8 -8
- data/test/lib/vedeu/cursor/move_cursor_test.rb +3 -6
- data/test/lib/vedeu/dsl/components/border_test.rb +53 -4
- data/test/lib/vedeu/dsl/components/geometry_test.rb +0 -24
- data/test/lib/vedeu/dsl/interface_test.rb +11 -3
- data/test/lib/vedeu/events/event_test.rb +2 -2
- data/test/lib/vedeu/models/view/interface_test.rb +1 -25
- data/test/lib/vedeu/models/view/stream_test.rb +8 -0
- data/test/lib/vedeu/output/border_test.rb +159 -81
- data/test/lib/vedeu/output/output_test.rb +1 -2
- data/test/lib/vedeu/output/viewport_test.rb +3 -10
- data/test/lib/vedeu/repositories/all_test.rb +128 -0
- data/test/lib/vedeu/support/content_geometry_test.rb +1 -2
- data/vedeu.gemspec +1 -1
- metadata +3 -13
- data/lib/vedeu/repositories/menus.rb +0 -13
- data/test/lib/vedeu/buffers/all_test.rb +0 -11
- data/test/lib/vedeu/cursor/all_test.rb +0 -33
- data/test/lib/vedeu/events/all_test.rb +0 -11
- data/test/lib/vedeu/input/all_test.rb +0 -11
- data/test/lib/vedeu/repositories/menus_test.rb +0 -15
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'vedeu/models/geometry'
|
2
|
-
require 'vedeu/dsl/shared/
|
2
|
+
require 'vedeu/dsl/shared/all'
|
3
3
|
|
4
4
|
module Vedeu
|
5
5
|
|
@@ -14,6 +14,16 @@ module Vedeu
|
|
14
14
|
|
15
15
|
class << self
|
16
16
|
|
17
|
+
# Specify the geometry of an interface or view with a simple DSL.
|
18
|
+
#
|
19
|
+
# @example
|
20
|
+
# Vedeu.geometry 'some_interface' do
|
21
|
+
# # ...
|
22
|
+
#
|
23
|
+
# @param name [String] The name of the interface or view to which this
|
24
|
+
# geometry belongs.
|
25
|
+
# @param block [Proc]
|
26
|
+
# @return [Vedeu::Geometry]
|
17
27
|
def geometry(name, &block)
|
18
28
|
fail InvalidSyntax, 'block not given' unless block_given?
|
19
29
|
|
@@ -37,14 +47,13 @@ module Vedeu
|
|
37
47
|
# to true.
|
38
48
|
#
|
39
49
|
# @example
|
40
|
-
#
|
41
|
-
#
|
42
|
-
#
|
50
|
+
# geometry 'some_interface' do
|
51
|
+
# centred!
|
52
|
+
# # ...
|
43
53
|
#
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
47
|
-
# ...
|
54
|
+
# geometry 'some_interface' do
|
55
|
+
# centred false
|
56
|
+
# # ...
|
48
57
|
#
|
49
58
|
# @return [Boolean]
|
50
59
|
def centred(value = true)
|
@@ -57,39 +66,23 @@ module Vedeu
|
|
57
66
|
# @param value [Fixnum]
|
58
67
|
#
|
59
68
|
# @example
|
60
|
-
#
|
61
|
-
#
|
62
|
-
#
|
63
|
-
# ...
|
69
|
+
# geometry 'some_interface' do
|
70
|
+
# height 8
|
71
|
+
# # ...
|
64
72
|
#
|
65
73
|
# @return [Fixnum]
|
66
74
|
def height(value)
|
67
75
|
model.height = value
|
68
76
|
end
|
69
77
|
|
70
|
-
# Specify the name of the interface for which the geometry belongs.
|
71
|
-
#
|
72
|
-
# @example
|
73
|
-
# interface 'my_interface' do
|
74
|
-
# geometry do
|
75
|
-
# name 'my_interface'
|
76
|
-
# ...
|
77
|
-
#
|
78
|
-
# @param value [String]
|
79
|
-
# @return [String]
|
80
|
-
def name(value)
|
81
|
-
model.name = value
|
82
|
-
end
|
83
|
-
|
84
78
|
# Specify the number of characters/columns wide the interface will be.
|
85
79
|
#
|
86
80
|
# @param value [Fixnum]
|
87
81
|
#
|
88
82
|
# @example
|
89
|
-
#
|
90
|
-
#
|
91
|
-
#
|
92
|
-
# ...
|
83
|
+
# geometry 'some_interface' do
|
84
|
+
# width 25
|
85
|
+
# # ...
|
93
86
|
#
|
94
87
|
# @return [Fixnum]
|
95
88
|
def width(value)
|
@@ -102,15 +95,15 @@ module Vedeu
|
|
102
95
|
# @param block [Proc]
|
103
96
|
#
|
104
97
|
# @example
|
105
|
-
#
|
106
|
-
#
|
107
|
-
#
|
98
|
+
# geometry 'some_interface' do
|
99
|
+
# x 7 # start on column 7.
|
100
|
+
# # ...
|
108
101
|
#
|
109
|
-
#
|
110
|
-
#
|
111
|
-
#
|
112
|
-
#
|
113
|
-
#
|
102
|
+
# geometry 'some_interface' do
|
103
|
+
# x { use('other_interface').east } # start on column 8, if
|
104
|
+
# # ... # `other_interface` changes
|
105
|
+
# # position, `some_interface` will
|
106
|
+
# # too.
|
114
107
|
#
|
115
108
|
# @return [Fixnum]
|
116
109
|
def x(value = 0, &block)
|
@@ -125,16 +118,15 @@ module Vedeu
|
|
125
118
|
# @param block [Proc]
|
126
119
|
#
|
127
120
|
# @example
|
128
|
-
#
|
129
|
-
#
|
130
|
-
#
|
131
|
-
#
|
132
|
-
#
|
133
|
-
#
|
134
|
-
#
|
135
|
-
#
|
136
|
-
#
|
137
|
-
# # `other_interface` will too.
|
121
|
+
# geometry 'some_interface' do
|
122
|
+
# y 4
|
123
|
+
# # ...
|
124
|
+
#
|
125
|
+
# geometry 'some_interface' do
|
126
|
+
# y { use('other_interface').north } # start on row/line 3, if
|
127
|
+
# # ... # `other_interface` changes
|
128
|
+
# # position, `some_interface`
|
129
|
+
# # will too.
|
138
130
|
#
|
139
131
|
# @return [Fixnum]
|
140
132
|
def y(value = 0, &block)
|
@@ -14,6 +14,42 @@ module Vedeu
|
|
14
14
|
include Vedeu::Common
|
15
15
|
include Vedeu::DSL
|
16
16
|
|
17
|
+
class << self
|
18
|
+
|
19
|
+
# Define actions for keypresses for when specific interfaces are in focus.
|
20
|
+
# Unless an interface is specified, the key will be assumed to be global,
|
21
|
+
# meaning its action will happen regardless of the interface in focus.
|
22
|
+
#
|
23
|
+
# @note
|
24
|
+
# When defining an interface, there is no need to provide a name since
|
25
|
+
# this can be discerned from the interface itself, e.g:
|
26
|
+
#
|
27
|
+
# Vedeu.interface 'my_interface' do
|
28
|
+
# keymap do
|
29
|
+
# ...
|
30
|
+
#
|
31
|
+
# @param name [String] The name of the interface which this keymap relates
|
32
|
+
# to.
|
33
|
+
# @param block [Proc]
|
34
|
+
#
|
35
|
+
# @example
|
36
|
+
# keymap 'my_interface' do
|
37
|
+
# ...
|
38
|
+
#
|
39
|
+
# @raise [InvalidSyntax] The required block was not given.
|
40
|
+
# @return [Keymap]
|
41
|
+
def keymap(name, &block)
|
42
|
+
# fail InvalidSyntax, 'block not given' unless block_given?
|
43
|
+
|
44
|
+
# @todo Try to remember why we need to pre-create the keymap in the
|
45
|
+
# repository.
|
46
|
+
Vedeu::Keymap.new(name).store
|
47
|
+
|
48
|
+
Vedeu::Keymap.build({ name: name }, &block).store
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
17
53
|
# Returns an instance of DSL::Keymap.
|
18
54
|
#
|
19
55
|
# @param model [Keymap]
|
data/lib/vedeu/dsl/interface.rb
CHANGED
@@ -34,13 +34,23 @@ module Vedeu
|
|
34
34
|
#
|
35
35
|
# @param block [Proc]
|
36
36
|
# @raise [InvalidSyntax] The required block was not given.
|
37
|
-
# @return [
|
37
|
+
# @return [Vedeu::Border]
|
38
38
|
def border(&block)
|
39
39
|
fail InvalidSyntax, 'block not given' unless block_given?
|
40
40
|
|
41
|
-
border_attrs = attributes.merge({ enabled: true,
|
41
|
+
border_attrs = attributes.merge({ enabled: true,
|
42
|
+
name: model.name })
|
42
43
|
|
43
|
-
|
44
|
+
Vedeu::Border.build(border_attrs, &block).store
|
45
|
+
end
|
46
|
+
|
47
|
+
# Applies the default border to the interface.
|
48
|
+
#
|
49
|
+
# @return [Vedeu::Border]
|
50
|
+
def border!
|
51
|
+
border do
|
52
|
+
# adds default border
|
53
|
+
end
|
44
54
|
end
|
45
55
|
|
46
56
|
# Set the cursor visibility on an interface.
|
@@ -69,6 +79,9 @@ module Vedeu
|
|
69
79
|
Vedeu::Cursor.new({ name: model.name, state: value }).store
|
70
80
|
end
|
71
81
|
|
82
|
+
# Set the cursor to visible for the interface.
|
83
|
+
#
|
84
|
+
# @return [Vedeu::Cursor]
|
72
85
|
def cursor!
|
73
86
|
cursor(true)
|
74
87
|
end
|
@@ -114,7 +127,7 @@ module Vedeu
|
|
114
127
|
def geometry(&block)
|
115
128
|
fail InvalidSyntax, 'block not given' unless block_given?
|
116
129
|
|
117
|
-
|
130
|
+
Vedeu::Geometry.build({ name: model.name }, &block).store
|
118
131
|
end
|
119
132
|
|
120
133
|
# Specify a group for an interface. Interfaces of the same group can be
|
@@ -130,6 +143,8 @@ module Vedeu
|
|
130
143
|
#
|
131
144
|
# @return [String]
|
132
145
|
def group(value)
|
146
|
+
return false unless defined_value?(value)
|
147
|
+
|
133
148
|
if defined_value?(model.name)
|
134
149
|
if Vedeu.groups.registered?(value)
|
135
150
|
Vedeu.groups.find(value).add(model.name)
|
@@ -143,7 +158,7 @@ module Vedeu
|
|
143
158
|
model.group = value
|
144
159
|
end
|
145
160
|
|
146
|
-
# @see Vedeu::Keymap.keymap
|
161
|
+
# @see Vedeu::DSL::Keymap.keymap
|
147
162
|
def keymap(name = model.name, &block)
|
148
163
|
Vedeu.keymap(name, &block)
|
149
164
|
end
|
data/lib/vedeu/dsl/stream.rb
CHANGED
data/lib/vedeu/events/all.rb
CHANGED
data/lib/vedeu/events/event.rb
CHANGED
@@ -101,6 +101,7 @@ module Vedeu
|
|
101
101
|
@repository = Vedeu.events
|
102
102
|
end
|
103
103
|
|
104
|
+
# @see Vedeu::Event.bind
|
104
105
|
def bind
|
105
106
|
if repository.registered?(name)
|
106
107
|
collection = repository.find(name)
|
@@ -117,7 +118,7 @@ module Vedeu
|
|
117
118
|
end
|
118
119
|
|
119
120
|
# Triggers the event based on debouncing and throttling conditions.
|
120
|
-
|
121
|
+
#
|
121
122
|
# @param args [Array]
|
122
123
|
# @return []
|
123
124
|
def trigger(*args)
|
data/lib/vedeu/events/trigger.rb
CHANGED
data/lib/vedeu/input/all.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'vedeu/repositories/
|
1
|
+
require 'vedeu/repositories/all'
|
2
2
|
require 'vedeu/input/mapper'
|
3
3
|
require 'vedeu/input/keys'
|
4
4
|
require 'vedeu/input/key'
|
@@ -7,22 +7,17 @@ require 'vedeu/input/keymap'
|
|
7
7
|
|
8
8
|
module Vedeu
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
@_keymaps ||= Vedeu::Repository.new(Vedeu::Keymap)
|
14
|
-
end
|
15
|
-
|
16
|
-
def_delegators Vedeu::Keymap, :keymap
|
17
|
-
def_delegators Vedeu::Keymap, :keypress
|
18
|
-
|
19
|
-
Vedeu.keymap('_system_') do |keymap|
|
10
|
+
# Define a keymap called '_system_' which will hold some vital keys needed by
|
11
|
+
# Vedeu to run effectively.
|
12
|
+
Vedeu::DSL::Keymap.keymap('_system_') do |keymap|
|
20
13
|
Vedeu::Configuration.system_keys.each do |label, keypress|
|
21
14
|
keymap.key(keypress) { Vedeu.trigger(("_" + label.to_s + "_").to_sym) }
|
22
15
|
end
|
23
16
|
end
|
24
17
|
|
25
|
-
|
18
|
+
# Define a keymap called '_global_' which will respond no matter which
|
19
|
+
# interface is in focus.
|
20
|
+
Vedeu::DSL::Keymap.keymap('_global_') do
|
26
21
|
|
27
22
|
end
|
28
23
|
|
data/lib/vedeu/input/keymap.rb
CHANGED
@@ -12,14 +12,16 @@ module Vedeu
|
|
12
12
|
member Vedeu::Key
|
13
13
|
|
14
14
|
attr_accessor :name
|
15
|
-
attr_reader :repository
|
16
15
|
|
17
16
|
class << self
|
18
17
|
|
18
|
+
# @param attributes [Hash]
|
19
|
+
# @param block [Proc]
|
19
20
|
# @option attributes client []
|
20
21
|
# @option attributes keys []
|
21
|
-
# @option attributes name []
|
22
|
-
# @option attributes repository []
|
22
|
+
# @option attributes name [String]
|
23
|
+
# @option attributes repository [Vedeu::Repository]
|
24
|
+
# @return [Vedeu::Keymap]
|
23
25
|
def build(attributes = {}, &block)
|
24
26
|
fail InvalidSyntax, 'block not given' unless block_given?
|
25
27
|
|
@@ -32,34 +34,6 @@ module Vedeu
|
|
32
34
|
model.store
|
33
35
|
end
|
34
36
|
|
35
|
-
# Define actions for keypresses for when specific interfaces are in focus.
|
36
|
-
# Unless an interface is specified, the key will be assumed to be global,
|
37
|
-
# meaning its action will happen regardless of the interface in focus.
|
38
|
-
#
|
39
|
-
# @note
|
40
|
-
# When defining an interface, there is no need to provide a name since
|
41
|
-
# this can be discerned from the interface itself, e.g:
|
42
|
-
#
|
43
|
-
# Vedeu.interface 'my_interface' do
|
44
|
-
# keymap do
|
45
|
-
# ...
|
46
|
-
#
|
47
|
-
# @param name [String] The name of the interface which this keymap relates
|
48
|
-
# to.
|
49
|
-
# @param block [Proc]
|
50
|
-
#
|
51
|
-
# @example
|
52
|
-
# keymap 'my_interface' do
|
53
|
-
# ...
|
54
|
-
#
|
55
|
-
# @raise [InvalidSyntax] The required block was not given.
|
56
|
-
# @return [Keymap]
|
57
|
-
def keymap(name, &block)
|
58
|
-
new(name).store
|
59
|
-
|
60
|
-
build({ name: name }, &block)
|
61
|
-
end
|
62
|
-
|
63
37
|
private
|
64
38
|
|
65
39
|
# The default values for a new instance of this class.
|
@@ -70,7 +44,7 @@ module Vedeu
|
|
70
44
|
client: nil,
|
71
45
|
keys: [],
|
72
46
|
name: '',
|
73
|
-
repository: Vedeu.keymaps,
|
47
|
+
repository: Vedeu::Keymaps.keymaps,
|
74
48
|
}
|
75
49
|
end
|
76
50
|
|
@@ -82,10 +56,11 @@ module Vedeu
|
|
82
56
|
def initialize(name = '', keys = [], repository = nil)
|
83
57
|
@name = name
|
84
58
|
@keys = keys
|
85
|
-
@repository = repository || Vedeu.keymaps
|
59
|
+
@repository = repository || Vedeu::Keymaps.keymaps
|
86
60
|
end
|
87
61
|
|
88
62
|
# @param key [Key]
|
63
|
+
# @return []
|
89
64
|
def add(key)
|
90
65
|
return false unless valid?(key)
|
91
66
|
|
@@ -94,7 +69,7 @@ module Vedeu
|
|
94
69
|
|
95
70
|
# @return [Vedeu::Keys]
|
96
71
|
def keys
|
97
|
-
collection.coerce(@keys,
|
72
|
+
collection.coerce(@keys, self)
|
98
73
|
end
|
99
74
|
|
100
75
|
# @param input [String|Symbol]
|
@@ -119,6 +94,7 @@ module Vedeu
|
|
119
94
|
private
|
120
95
|
|
121
96
|
# @param key [Vedeu::Key]
|
97
|
+
# @return [Boolean]
|
122
98
|
def valid?(key)
|
123
99
|
return true unless key_defined?(key.input)
|
124
100
|
|
data/lib/vedeu/input/keys.rb
CHANGED
data/lib/vedeu/input/mapper.rb
CHANGED
@@ -12,6 +12,7 @@ module Vedeu
|
|
12
12
|
|
13
13
|
attr_accessor :parent, :name
|
14
14
|
|
15
|
+
# @return [Vedeu::Model::Collection]
|
15
16
|
def self.coerce(collection = [], parent = nil, name = nil)
|
16
17
|
if collection.kind_of?(Vedeu::Model::Collection)
|
17
18
|
collection
|
@@ -25,6 +26,7 @@ module Vedeu
|
|
25
26
|
end
|
26
27
|
end
|
27
28
|
|
29
|
+
# @return [Vedeu::Model::Collection]
|
28
30
|
def initialize(collection = [], parent = nil, name = nil)
|
29
31
|
@collection = collection
|
30
32
|
@parent = parent
|
@@ -41,10 +43,12 @@ module Vedeu
|
|
41
43
|
end
|
42
44
|
alias_method :<<, :add
|
43
45
|
|
46
|
+
# @return [Array]
|
44
47
|
def all
|
45
48
|
@collection
|
46
49
|
end
|
47
50
|
|
51
|
+
# @return [Enumerator]
|
48
52
|
def each(&block)
|
49
53
|
@collection.each(&block)
|
50
54
|
end
|