vedeu 0.4.13 → 0.4.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -1
- data/.travis.yml +2 -1
- data/Guardfile +6 -5
- data/README.md +3 -30
- data/Rakefile +5 -5
- data/bin/vedeu_drb_client +1 -1
- data/bin/vedeu_drb_server +91 -89
- data/bin/vedeu_test +4 -0
- data/config/rubocop_enabled.yml +5 -10
- data/examples/borders_app.rb +2 -1
- data/examples/colours_app.rb +13 -8
- data/examples/configuration_app.rb +3 -2
- data/examples/cursor_app.rb +16 -11
- data/examples/drb_app.rb +88 -89
- data/examples/focus_app.rb +31 -32
- data/examples/geometry_app.rb +2 -1
- data/examples/hello_world.rb +2 -1
- data/examples/lines_app.rb +2 -1
- data/examples/material_colours_app.rb +126 -0
- data/examples/typed_commands/typed_commands_app.rb +5 -1
- data/examples/view_templates_app/view_templates_app.rb +6 -3
- data/lib/vedeu/all.rb +1 -1
- data/lib/vedeu/api.rb +18 -10
- data/lib/vedeu/application.rb +0 -1
- data/lib/vedeu/bindings.rb +77 -16
- data/lib/vedeu/buffers/all.rb +2 -5
- data/lib/vedeu/buffers/buffer.rb +69 -25
- data/lib/vedeu/buffers/display_buffer.rb +3 -7
- data/lib/vedeu/configuration/all.rb +3 -6
- data/lib/vedeu/configuration/api.rb +28 -4
- data/lib/vedeu/configuration/cli.rb +9 -9
- data/lib/vedeu/configuration/configuration.rb +11 -7
- data/lib/vedeu/cursor/all.rb +3 -6
- data/lib/vedeu/cursor/cursor.rb +22 -14
- data/lib/vedeu/cursor/move.rb +32 -22
- data/lib/vedeu/cursor/refresh_cursor.rb +1 -1
- data/lib/vedeu/debug.rb +2 -1
- data/lib/vedeu/distributed/client.rb +1 -7
- data/lib/vedeu/distributed/server.rb +0 -4
- data/lib/vedeu/distributed/subprocess.rb +1 -1
- data/lib/vedeu/distributed/templates/default_configuration.vedeu +1 -1
- data/lib/vedeu/distributed/test_application.rb +3 -5
- data/lib/vedeu/distributed/uri.rb +2 -2
- data/lib/vedeu/dsl/all.rb +6 -6
- data/lib/vedeu/dsl/components/all.rb +0 -3
- data/lib/vedeu/dsl/components/border.rb +20 -12
- data/lib/vedeu/dsl/components/geometry.rb +68 -3
- data/lib/vedeu/dsl/components/keymap.rb +1 -2
- data/lib/vedeu/dsl/composition.rb +8 -1
- data/lib/vedeu/dsl/interface.rb +61 -11
- data/lib/vedeu/dsl/line.rb +12 -12
- data/lib/vedeu/dsl/shared/all.rb +4 -7
- data/lib/vedeu/dsl/shared/colour.rb +2 -2
- data/lib/vedeu/dsl/shared/text.rb +2 -35
- data/lib/vedeu/dsl/shared/use.rb +2 -2
- data/lib/vedeu/dsl/view.rb +4 -4
- data/lib/vedeu/events/all.rb +3 -5
- data/lib/vedeu/events/event.rb +5 -5
- data/lib/vedeu/geometry/all.rb +11 -16
- data/lib/vedeu/geometry/area.rb +2 -5
- data/lib/vedeu/geometry/canvas.rb +12 -16
- data/lib/vedeu/geometry/dimension.rb +20 -22
- data/lib/vedeu/geometry/geometry.rb +28 -30
- data/lib/vedeu/geometry/grid.rb +1 -1
- data/lib/vedeu/geometry/index_position.rb +7 -0
- data/lib/vedeu/geometry/null_geometry.rb +61 -0
- data/lib/vedeu/geometry/position.rb +0 -3
- data/lib/vedeu/geometry/position_index.rb +7 -0
- data/lib/vedeu/geometry/position_validator.rb +44 -33
- data/lib/vedeu/input/all.rb +5 -4
- data/lib/vedeu/input/keymap.rb +0 -1
- data/lib/vedeu/input/mapper.rb +1 -3
- data/lib/vedeu/launcher.rb +6 -7
- data/lib/vedeu/main_loop.rb +1 -2
- data/lib/vedeu/models/all.rb +1 -0
- data/lib/vedeu/models/cell.rb +5 -8
- data/lib/vedeu/models/char.rb +50 -15
- data/lib/vedeu/models/composition.rb +8 -1
- data/lib/vedeu/models/focus.rb +4 -4
- data/lib/vedeu/models/group.rb +3 -3
- data/lib/vedeu/models/interface.rb +62 -46
- data/lib/vedeu/models/line.rb +1 -1
- data/lib/vedeu/models/null.rb +48 -0
- data/lib/vedeu/models/stream.rb +5 -5
- data/lib/vedeu/output/all.rb +20 -30
- data/lib/vedeu/output/border.rb +93 -40
- data/lib/vedeu/output/clear.rb +100 -15
- data/lib/vedeu/output/colour.rb +56 -12
- data/lib/vedeu/output/compressor.rb +59 -0
- data/lib/vedeu/output/html_char.rb +4 -2
- data/lib/vedeu/output/null_border.rb +16 -4
- data/lib/vedeu/output/output.rb +13 -21
- data/lib/vedeu/output/presentation.rb +28 -23
- data/lib/vedeu/output/refresh.rb +2 -2
- data/lib/vedeu/output/renderers/all.rb +80 -3
- data/lib/vedeu/output/renderers/file_renderer.rb +38 -2
- data/lib/vedeu/output/renderers/html_renderer.rb +6 -4
- data/lib/vedeu/output/renderers/json_renderer.rb +52 -0
- data/lib/vedeu/output/renderers/null_renderer.rb +14 -0
- data/lib/vedeu/output/renderers/terminal_renderer.rb +2 -12
- data/lib/vedeu/output/style.rb +33 -3
- data/lib/vedeu/output/text.rb +98 -1
- data/lib/vedeu/output/translator.rb +30 -7
- data/lib/vedeu/output/viewport.rb +43 -79
- data/lib/vedeu/output/wordwrap.rb +4 -4
- data/lib/vedeu/repositories/all.rb +22 -179
- data/lib/vedeu/repositories/collection.rb +11 -13
- data/lib/vedeu/repositories/collections/all.rb +8 -0
- data/lib/vedeu/repositories/collections/chars.rb +9 -0
- data/lib/vedeu/repositories/collections/events.rb +9 -0
- data/lib/vedeu/repositories/collections/interfaces.rb +9 -0
- data/lib/vedeu/repositories/collections/keys.rb +9 -0
- data/lib/vedeu/repositories/collections/lines.rb +9 -0
- data/lib/vedeu/repositories/collections/streams.rb +9 -0
- data/lib/vedeu/repositories/model.rb +7 -2
- data/lib/vedeu/repositories/repositories/all.rb +14 -0
- data/lib/vedeu/repositories/repositories/background_colours.rb +14 -0
- data/lib/vedeu/repositories/repositories/borders.rb +38 -0
- data/lib/vedeu/repositories/repositories/buffers.rb +36 -0
- data/lib/vedeu/repositories/repositories/colours.rb +63 -0
- data/lib/vedeu/repositories/repositories/cursors.rb +29 -0
- data/lib/vedeu/repositories/repositories/events_repository.rb +24 -0
- data/lib/vedeu/repositories/repositories/foreground_colours.rb +14 -0
- data/lib/vedeu/repositories/repositories/geometries.rb +37 -0
- data/lib/vedeu/repositories/repositories/groups.rb +24 -0
- data/lib/vedeu/repositories/repositories/interfaces_repository.rb +24 -0
- data/lib/vedeu/repositories/repositories/keymaps.rb +24 -0
- data/lib/vedeu/repositories/repositories/menus.rb +24 -0
- data/lib/vedeu/repositories/repository.rb +29 -47
- data/lib/vedeu/storage/all.rb +6 -0
- data/lib/vedeu/storage/associative_store.rb +47 -0
- data/lib/vedeu/storage/conveyor_store.rb +69 -0
- data/lib/vedeu/storage/fifo_store.rb +37 -0
- data/lib/vedeu/storage/store.rb +58 -0
- data/lib/vedeu/support/all.rb +5 -10
- data/lib/vedeu/support/common.rb +0 -8
- data/lib/vedeu/support/log.rb +13 -24
- data/lib/vedeu/support/template.rb +4 -1
- data/lib/vedeu/support/terminal.rb +10 -10
- data/lib/vedeu/support/trace.rb +15 -88
- data/lib/vedeu/support/visibility.rb +73 -0
- data/lib/vedeu.rb +37 -0
- data/test/lib/vedeu/api_test.rb +7 -3
- data/test/lib/vedeu/application_test.rb +9 -3
- data/test/lib/vedeu/bindings_test.rb +21 -0
- data/test/lib/vedeu/buffers/buffer_test.rb +110 -134
- data/test/lib/vedeu/buffers/display_buffer_test.rb +8 -0
- data/test/lib/vedeu/configuration/api_test.rb +5 -1
- data/test/lib/vedeu/configuration/configuration_test.rb +4 -6
- data/test/lib/vedeu/cursor/cursor_test.rb +25 -17
- data/test/lib/vedeu/cursor/move_test.rb +7 -7
- data/test/lib/vedeu/distributed/client_test.rb +1 -1
- data/test/lib/vedeu/distributed/subprocess_test.rb +3 -1
- data/test/lib/vedeu/distributed/uri_test.rb +5 -5
- data/test/lib/vedeu/dsl/components/geometry_test.rb +43 -0
- data/test/lib/vedeu/dsl/components/keymap_test.rb +1 -1
- data/test/lib/vedeu/dsl/composition_test.rb +6 -5
- data/test/lib/vedeu/dsl/interface_test.rb +81 -16
- data/test/lib/vedeu/dsl/shared/colour_test.rb +4 -4
- data/test/lib/vedeu/dsl/shared/text_test.rb +87 -9
- data/test/lib/vedeu/dsl/stream_test.rb +1 -1
- data/test/lib/vedeu/events/event_test.rb +3 -1
- data/test/lib/vedeu/events/trigger_test.rb +8 -4
- data/test/lib/vedeu/geometry/dimension_test.rb +1 -1
- data/test/lib/vedeu/geometry/geometry_test.rb +5 -3
- data/test/lib/vedeu/geometry/index_position_test.rb +30 -7
- data/test/lib/vedeu/geometry/null_geometry_test.rb +57 -0
- data/test/lib/vedeu/geometry/position_index_test.rb +14 -0
- data/test/lib/vedeu/geometry/position_validator_test.rb +17 -3
- data/test/lib/vedeu/input/keymap_test.rb +3 -1
- data/test/lib/vedeu/input/mapper_test.rb +8 -4
- data/test/lib/vedeu/launcher_test.rb +1 -1
- data/test/lib/vedeu/models/cell_test.rb +10 -8
- data/test/lib/vedeu/models/char_test.rb +52 -28
- data/test/lib/vedeu/models/composition_test.rb +26 -4
- data/test/lib/vedeu/models/group_test.rb +11 -5
- data/test/lib/vedeu/models/interface_test.rb +32 -19
- data/test/lib/vedeu/models/line_test.rb +21 -25
- data/test/lib/vedeu/models/menu_test.rb +10 -6
- data/test/lib/vedeu/models/null_test.rb +66 -0
- data/test/lib/vedeu/models/stream_test.rb +13 -10
- data/test/lib/vedeu/output/border_test.rb +29 -8
- data/test/lib/vedeu/output/clear_test.rb +23 -4
- data/test/lib/vedeu/output/colour_test.rb +20 -4
- data/test/lib/vedeu/output/compressor_test.rb +43 -0
- data/test/lib/vedeu/output/html_char_test.rb +29 -17
- data/test/lib/vedeu/output/null_border_test.rb +2 -1
- data/test/lib/vedeu/output/output_test.rb +20 -30
- data/test/lib/vedeu/output/presentation_test.rb +39 -16
- data/test/lib/vedeu/output/refresh_test.rb +14 -10
- data/test/lib/vedeu/output/renderers/all_test.rb +96 -0
- data/test/lib/vedeu/output/renderers/file_renderer_test.rb +1 -1
- data/test/lib/vedeu/output/renderers/html_renderer_test.rb +13 -9
- data/test/lib/vedeu/output/renderers/json_renderer_test.rb +52 -0
- data/test/lib/vedeu/output/renderers/null_renderer_test.rb +19 -0
- data/test/lib/vedeu/output/style_test.rb +41 -1
- data/test/lib/vedeu/output/text_test.rb +61 -10
- data/test/lib/vedeu/output/translator_test.rb +14 -0
- data/test/lib/vedeu/output/viewport_test.rb +22 -3
- data/test/lib/vedeu/output/virtual_terminal_test.rb +3 -3
- data/test/lib/vedeu/output/wordwrap_test.rb +58 -45
- data/test/lib/vedeu/repositories/collections/chars_test.rb +16 -0
- data/test/lib/vedeu/repositories/collections/events_test.rb +16 -0
- data/test/lib/vedeu/repositories/collections/interfaces_test.rb +16 -0
- data/test/lib/vedeu/repositories/collections/keys_test.rb +16 -0
- data/test/lib/vedeu/repositories/collections/lines_test.rb +16 -0
- data/test/lib/vedeu/repositories/collections/streams_test.rb +16 -0
- data/test/lib/vedeu/repositories/repositories/background_colours_test.rb +17 -0
- data/test/lib/vedeu/repositories/repositories/borders_test.rb +51 -0
- data/test/lib/vedeu/repositories/repositories/buffers_test.rb +52 -0
- data/test/lib/vedeu/repositories/repositories/colours_test.rb +16 -0
- data/test/lib/vedeu/repositories/repositories/cursors_test.rb +39 -0
- data/test/lib/vedeu/repositories/repositories/events_repository_test.rb +17 -0
- data/test/lib/vedeu/repositories/repositories/foreground_colours_test.rb +17 -0
- data/test/lib/vedeu/repositories/repositories/geometries_test.rb +42 -0
- data/test/lib/vedeu/repositories/repositories/groups_test.rb +17 -0
- data/test/lib/vedeu/repositories/repositories/interfaces_repositories_test.rb +17 -0
- data/test/lib/vedeu/repositories/repositories/keymaps_test.rb +17 -0
- data/test/lib/vedeu/repositories/repositories/menus_test.rb +17 -0
- data/test/lib/vedeu/repositories/repository_test.rb +16 -36
- data/test/lib/vedeu/storage/associative_store_test.rb +69 -0
- data/test/lib/vedeu/storage/conveyor_store_test.rb +135 -0
- data/test/lib/vedeu/storage/fifo_store_test.rb +47 -0
- data/test/lib/vedeu/storage/store_test.rb +123 -0
- data/test/lib/vedeu/support/common_test.rb +0 -9
- data/test/lib/vedeu/support/terminal_test.rb +78 -55
- data/test/lib/vedeu/support/visibility_test.rb +80 -0
- data/test/test_helper.rb +13 -11
- data/vedeu.gemspec +4 -3
- metadata +92 -32
- data/lib/vedeu/cursor/toggle.rb +0 -55
- data/lib/vedeu/exceptions.rb +0 -37
- data/lib/vedeu/geometry/centre.rb +0 -85
- data/lib/vedeu/geometry/content.rb +0 -70
- data/lib/vedeu/geometry/limit.rb +0 -58
- data/lib/vedeu/output/compositor.rb +0 -62
- data/lib/vedeu/repositories/collections.rb +0 -41
- data/lib/vedeu/support/coercions.rb +0 -60
- data/lib/vedeu/support/sentence.rb +0 -91
- data/lib/vedeu/support/visible.rb +0 -90
- data/test/lib/vedeu/cursor/toggle_test.rb +0 -63
- data/test/lib/vedeu/geometry/centre_test.rb +0 -58
- data/test/lib/vedeu/geometry/content_test.rb +0 -98
- data/test/lib/vedeu/geometry/limit_test.rb +0 -30
- data/test/lib/vedeu/output/compositor_test.rb +0 -48
- data/test/lib/vedeu/repositories/all_test.rb +0 -135
- data/test/lib/vedeu/repositories/collections_test.rb +0 -71
- data/test/lib/vedeu/support/coercions_test.rb +0 -84
- data/test/lib/vedeu/support/sentence_test.rb +0 -56
- data/test/lib/vedeu/support/visible_test.rb +0 -161
data/lib/vedeu/bindings.rb
CHANGED
@@ -14,14 +14,6 @@ module Vedeu
|
|
14
14
|
#
|
15
15
|
module Bindings
|
16
16
|
|
17
|
-
# Vedeu triggers this event when `:_exit_` is triggered. You can hook into
|
18
|
-
# this to perform a special action before the application terminates. Saving
|
19
|
-
# the user's work, session or preferences might be popular here.
|
20
|
-
Vedeu.bind(:_cleanup_) do
|
21
|
-
Vedeu.trigger(:_drb_stop_)
|
22
|
-
Vedeu.trigger(:cleanup)
|
23
|
-
end
|
24
|
-
|
25
17
|
Vedeu.bind(:_drb_input_) do |data, type|
|
26
18
|
Vedeu.log(type: :drb, message: "Sending input (#{type})")
|
27
19
|
|
@@ -46,6 +38,14 @@ module Vedeu
|
|
46
38
|
Vedeu.bind(:_drb_status_) { Vedeu::Distributed::Server.status }
|
47
39
|
Vedeu.bind(:_drb_stop_) { Vedeu::Distributed::Server.stop }
|
48
40
|
|
41
|
+
# Vedeu triggers this event when `:_exit_` is triggered. You can hook into
|
42
|
+
# this to perform a special action before the application terminates. Saving
|
43
|
+
# the user's work, session or preferences might be popular here.
|
44
|
+
Vedeu.bind(:_cleanup_) do
|
45
|
+
Vedeu.trigger(:_drb_stop_)
|
46
|
+
Vedeu.trigger(:cleanup)
|
47
|
+
end
|
48
|
+
|
49
49
|
# When triggered, Vedeu will trigger a `:cleanup` event which you can define
|
50
50
|
# (to save files, etc) and attempt to exit.
|
51
51
|
Vedeu.bind(:_exit_) { Vedeu::Application.stop }
|
@@ -82,23 +82,27 @@ module Vedeu
|
|
82
82
|
|
83
83
|
# When triggered will cause Vedeu to trigger the `:_clear_` and `:_refresh_`
|
84
84
|
# events. Please see those events for their behaviour.
|
85
|
-
Vedeu.bind(:_resize_,
|
85
|
+
Vedeu.bind(:_resize_, delay: 0.25) { Vedeu.resize }
|
86
86
|
|
87
|
-
Vedeu.bind(:tick)
|
88
|
-
|
87
|
+
Vedeu.bind(:tick) do |time|
|
88
|
+
Vedeu.log(type: :debug, message: "Tick: #{time}")
|
89
|
+
end
|
90
|
+
Vedeu.bind(:tock) do |time|
|
91
|
+
Vedeu.log(type: :debug, message: "Tock: #{time}")
|
92
|
+
end
|
89
93
|
|
90
94
|
# Hide the cursor of the named interface or interface currently in focus.
|
91
95
|
Vedeu.bind(:_cursor_hide_) do |name|
|
92
96
|
named = name ? Vedeu.cursors.by_name(name) : Vedeu.cursor
|
93
97
|
|
94
|
-
Vedeu::
|
98
|
+
Vedeu::Visibility.hide(named)
|
95
99
|
end
|
96
100
|
|
97
101
|
# Show the cursor of the named interface or interface currently in focus.
|
98
102
|
Vedeu.bind(:_cursor_show_) do |name|
|
99
103
|
named = name ? Vedeu.cursors.by_name(name) : Vedeu.cursor
|
100
104
|
|
101
|
-
Vedeu::
|
105
|
+
Vedeu::Visibility.show(named)
|
102
106
|
end
|
103
107
|
|
104
108
|
# @see {Vedeu::Move}
|
@@ -182,13 +186,16 @@ module Vedeu
|
|
182
186
|
end
|
183
187
|
|
184
188
|
# Clears the spaces occupied by the interfaces belonging to the named group.
|
185
|
-
Vedeu.bind(:_clear_group_) do |
|
186
|
-
Vedeu.groups.find(
|
187
|
-
Vedeu.trigger(:_clear_,
|
189
|
+
Vedeu.bind(:_clear_group_) do |group_name|
|
190
|
+
Vedeu.groups.find(group_name).members.each do |interface_name|
|
191
|
+
Vedeu.trigger(:_clear_, interface_name)
|
188
192
|
end
|
189
193
|
end
|
190
194
|
|
191
195
|
# Will cause all interfaces to refresh, or the named interface if given.
|
196
|
+
#
|
197
|
+
# @note
|
198
|
+
# Hidden interfaces will be still refreshed in memory but not shown.
|
192
199
|
Vedeu.bind(:_refresh_) do |name|
|
193
200
|
name ? Vedeu::Refresh.by_name(name) : Vedeu::Refresh.all
|
194
201
|
end
|
@@ -219,6 +226,60 @@ module Vedeu
|
|
219
226
|
Vedeu.trigger(:_clear_group_, name)
|
220
227
|
end
|
221
228
|
|
229
|
+
# Will hide the named interface. If the interface is currently visible, it
|
230
|
+
# will be cleared- rendered blank. To show the interface, the
|
231
|
+
# ':_show_interface_' event should be triggered.
|
232
|
+
# Triggering the ':_hide_group_' event to which this named interface belongs
|
233
|
+
# will also hide the interface.
|
234
|
+
Vedeu.bind(:_hide_interface_) do |name|
|
235
|
+
if name && Vedeu.interfaces.registered?(name)
|
236
|
+
interface = Vedeu.interfaces.find(name)
|
237
|
+
|
238
|
+
if interface.visible?
|
239
|
+
interface = Vedeu::Visibility.hide(interface)
|
240
|
+
Vedeu.buffers.clear(interface.name)
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
# Will show the named interface. If the interface is currently invisible, it
|
246
|
+
# will be shown- rendered with its latest content. To hide the interface,
|
247
|
+
# the ':_hide_interface_' event should be triggered.
|
248
|
+
# Triggering the ':_show_group_' event to which this named interface belongs
|
249
|
+
# will also show the interface.
|
250
|
+
Vedeu.bind(:_show_interface_) do |name|
|
251
|
+
if name && Vedeu.interfaces.registered?(name)
|
252
|
+
interface = Vedeu.interfaces.find(name)
|
253
|
+
|
254
|
+
interface = Vedeu::Visibility.show(interface) unless interface.visible?
|
255
|
+
|
256
|
+
Vedeu.buffers.render(interface.name)
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
# Will toggle the visibility of the named interface. If the interface is
|
261
|
+
# currently visible, the area it occupies will be clears and the interface
|
262
|
+
# will be marked invisible. If the interface is invisible, then the
|
263
|
+
# interface will be marked visible and rendered in the area it occupies.
|
264
|
+
#
|
265
|
+
# @note
|
266
|
+
# If an interface is marked visible whilst another view is occupying some
|
267
|
+
# or all of the interface's current position, the interface will overwrite
|
268
|
+
# this area- this may cause visual corruption.
|
269
|
+
Vedeu.bind(:_toggle_interface_) do |name|
|
270
|
+
if name && Vedeu.interfaces.registered?(name)
|
271
|
+
interface = Vedeu.interfaces.find(name)
|
272
|
+
|
273
|
+
if interface.visible?
|
274
|
+
Vedeu.trigger(:_hide_interface_, name)
|
275
|
+
|
276
|
+
else
|
277
|
+
Vedeu.trigger(:_show_interface_, name)
|
278
|
+
|
279
|
+
end
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
222
283
|
end # Bindings
|
223
284
|
# :nocov:
|
224
285
|
|
data/lib/vedeu/buffers/all.rb
CHANGED
data/lib/vedeu/buffers/buffer.rb
CHANGED
@@ -37,26 +37,33 @@ module Vedeu
|
|
37
37
|
# Return a new instance of Buffer. Generally a Buffer is initialized with
|
38
38
|
# only a 'name' and 'back' parameter.
|
39
39
|
#
|
40
|
-
# @
|
41
|
-
# belongs.
|
42
|
-
# @
|
43
|
-
# @
|
44
|
-
# @
|
40
|
+
# @option attributes name [String] The name of the interface for which the
|
41
|
+
# buffer belongs.
|
42
|
+
# @option attributes back [Interface]
|
43
|
+
# @option attributes front [Interface]
|
44
|
+
# @option attributes previous [Interface]
|
45
|
+
# @option attributes repository [Vedeu::Buffers]
|
45
46
|
# @return [Buffer]
|
46
|
-
def initialize(
|
47
|
-
@
|
48
|
-
|
49
|
-
@
|
50
|
-
@
|
51
|
-
@
|
47
|
+
def initialize(attributes = {})
|
48
|
+
@attributes = defaults.merge!(attributes)
|
49
|
+
|
50
|
+
@name = @attributes[:name]
|
51
|
+
@back = @attributes[:back]
|
52
|
+
@front = @attributes[:front]
|
53
|
+
@previous = @attributes[:previous]
|
54
|
+
@repository = @attributes[:repository] || Vedeu.buffers
|
52
55
|
end
|
53
56
|
|
54
57
|
# Add the content to the back buffer, then update the repository. Returns
|
55
|
-
# boolean indicating that the repository was updated.
|
58
|
+
# boolean indicating that the repository was updated. Here we also apply any
|
59
|
+
# overridden colours or styles in the buffered view to the stored interface.
|
56
60
|
#
|
57
61
|
# @param content [Interface]
|
58
62
|
# @return [Boolean]
|
59
63
|
def add(content)
|
64
|
+
content.colour = interface.colour unless content.colour
|
65
|
+
content.style = interface.style unless content.style
|
66
|
+
|
60
67
|
@back = content
|
61
68
|
|
62
69
|
store
|
@@ -76,22 +83,56 @@ module Vedeu
|
|
76
83
|
# - If the 'previous' buffer is empty, return an empty collection.
|
77
84
|
#
|
78
85
|
# @return [Array<Hash>]
|
79
|
-
def
|
80
|
-
if content_for?(:back)
|
81
|
-
|
86
|
+
def render
|
87
|
+
buffer = if content_for?(:back)
|
88
|
+
swap
|
89
|
+
|
90
|
+
[front.render]
|
91
|
+
|
92
|
+
elsif content_for?(:front)
|
93
|
+
[front.render]
|
94
|
+
|
95
|
+
elsif content_for?(:previous)
|
96
|
+
[previous.render]
|
97
|
+
|
98
|
+
else
|
99
|
+
[]
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
Vedeu::Output.render(buffer) unless buffer.empty?
|
104
|
+
|
105
|
+
buffer
|
106
|
+
end
|
107
|
+
alias_method :content, :render
|
82
108
|
|
83
|
-
|
109
|
+
# Returns the front buffer or, if that is empty, the interface cleared.
|
110
|
+
#
|
111
|
+
# @return [void]
|
112
|
+
def clear
|
113
|
+
buffer = if content_for?(:front)
|
114
|
+
front.clear.clear
|
115
|
+
|
116
|
+
else
|
117
|
+
interface.clear.clear
|
84
118
|
|
85
|
-
|
86
|
-
[front]
|
119
|
+
end
|
87
120
|
|
88
|
-
|
89
|
-
[previous]
|
121
|
+
Vedeu::Output.render(buffer) unless buffer.empty?
|
90
122
|
|
91
|
-
|
92
|
-
|
123
|
+
buffer
|
124
|
+
end
|
125
|
+
|
126
|
+
private
|
93
127
|
|
94
|
-
|
128
|
+
# @return [Hash<Symbol => NilClass, String>]
|
129
|
+
def defaults
|
130
|
+
{
|
131
|
+
back: nil,
|
132
|
+
front: nil,
|
133
|
+
name: '',
|
134
|
+
previous: nil,
|
135
|
+
}
|
95
136
|
end
|
96
137
|
|
97
138
|
# Return a boolean indicating content was swapped between buffers.
|
@@ -107,8 +148,6 @@ module Vedeu
|
|
107
148
|
true
|
108
149
|
end
|
109
150
|
|
110
|
-
private
|
111
|
-
|
112
151
|
# Return a boolean indicating content presence on the buffer type.
|
113
152
|
#
|
114
153
|
# @param buffer [Symbol] One of; :back, :front or :previous.
|
@@ -120,6 +159,11 @@ module Vedeu
|
|
120
159
|
true
|
121
160
|
end
|
122
161
|
|
162
|
+
# @return [Vedeu::Interface]
|
163
|
+
def interface
|
164
|
+
@interface ||= Vedeu.interfaces.find(name)
|
165
|
+
end
|
166
|
+
|
123
167
|
end # Buffer
|
124
168
|
|
125
169
|
end # Vedeu
|
@@ -48,7 +48,7 @@ module Vedeu
|
|
48
48
|
Vedeu.buffers.find(name).add(self)
|
49
49
|
|
50
50
|
else
|
51
|
-
Vedeu::Buffer.new(name, self).store
|
51
|
+
Vedeu::Buffer.new(name: name, back: self).store
|
52
52
|
|
53
53
|
end
|
54
54
|
|
@@ -59,9 +59,7 @@ module Vedeu
|
|
59
59
|
#
|
60
60
|
# @return [Interface]
|
61
61
|
def store_focusable
|
62
|
-
unless Vedeu.focusable.registered?(name)
|
63
|
-
Vedeu.focusable.add(name)
|
64
|
-
end
|
62
|
+
Vedeu.focusable.add(name) unless Vedeu.focusable.registered?(name)
|
65
63
|
|
66
64
|
self
|
67
65
|
end
|
@@ -70,9 +68,7 @@ module Vedeu
|
|
70
68
|
#
|
71
69
|
# @return [Interface]
|
72
70
|
def store_cursor
|
73
|
-
unless Vedeu.cursors.registered?(name)
|
74
|
-
Vedeu::Cursor.new({ name: name }).store
|
75
|
-
end
|
71
|
+
Vedeu::Cursor.new(name: name).store unless Vedeu.cursors.registered?(name)
|
76
72
|
|
77
73
|
self
|
78
74
|
end
|
@@ -34,11 +34,10 @@ module Vedeu
|
|
34
34
|
#
|
35
35
|
# @return [Hash<Symbol => Boolean, Fixnum, String>]
|
36
36
|
def configuration
|
37
|
-
|
38
|
-
|
39
|
-
}) if system_keys.any?
|
37
|
+
new_system_keys = Configuration.default_system_keys.merge!(system_keys)
|
38
|
+
options.merge!(system_keys: new_system_keys) if system_keys.any?
|
40
39
|
|
41
|
-
Vedeu::Config.log('
|
40
|
+
Vedeu::Config.log(Esc.green { '[api]' }, options)
|
42
41
|
end
|
43
42
|
|
44
43
|
# Sets boolean to allow user input. The default behaviour of Vedeu is to
|
@@ -238,6 +237,12 @@ module Vedeu
|
|
238
237
|
# colour_mode 256
|
239
238
|
# ...
|
240
239
|
#
|
240
|
+
# @note
|
241
|
+
# iTerm 2 on Mac OSX will handle the true colour setting (16777216),
|
242
|
+
# whereas Terminator on Linux will not display colours correctly. For
|
243
|
+
# compatibility across platforms, it is recommended to either not set
|
244
|
+
# the colour mode at all and allow it to be detected, or use 256 here.
|
245
|
+
#
|
241
246
|
# @param value [Fixnum]
|
242
247
|
# @raise [InvalidSyntax] When the value parameter is not one of +8+, +16+,
|
243
248
|
# +256+ or +16777216+.
|
@@ -261,6 +266,25 @@ module Vedeu
|
|
261
266
|
options[:log] = filename
|
262
267
|
end
|
263
268
|
|
269
|
+
# Sets the renderers for Vedeu. Each renderer added must have the class
|
270
|
+
# method '.render' defined as this will be called when rendering content.
|
271
|
+
#
|
272
|
+
# @example
|
273
|
+
# Vedeu.configure do
|
274
|
+
# renderer MyRenderer
|
275
|
+
# ...
|
276
|
+
#
|
277
|
+
# Vedeu.configure do
|
278
|
+
# renderers MyRenderer, MyOtherRenderer
|
279
|
+
# ...
|
280
|
+
#
|
281
|
+
# @param renderer [Array<Class>|Class]
|
282
|
+
# @return [Array<Class>]
|
283
|
+
def renderer(*renderer)
|
284
|
+
options[:renderers] = Vedeu::Configuration.renderers + renderer
|
285
|
+
end
|
286
|
+
alias_method :renderers, :renderer
|
287
|
+
|
264
288
|
# Sets the value of STDIN.
|
265
289
|
#
|
266
290
|
# @example
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'optparse'
|
2
|
-
|
3
1
|
module Vedeu
|
4
2
|
|
5
3
|
module Config
|
@@ -39,8 +37,8 @@ module Vedeu
|
|
39
37
|
end
|
40
38
|
|
41
39
|
opts.on('-I', '--noninteractive', '--standalone',
|
42
|
-
'Run the application non-interactively;
|
43
|
-
'intervention from the user.') do
|
40
|
+
'Run the application non-interactively; ' \
|
41
|
+
'i.e. not requiring intervention from the user.') do
|
44
42
|
options[:interactive] = false
|
45
43
|
end
|
46
44
|
|
@@ -94,8 +92,8 @@ module Vedeu
|
|
94
92
|
end
|
95
93
|
|
96
94
|
opts.on('--drb-host',
|
97
|
-
|
98
|
-
#options[:drb] = true
|
95
|
+
'Set the hostname/IP for the DRb server.') do |hostname|
|
96
|
+
# options[:drb] = true
|
99
97
|
options[:drb_host] = hostname
|
100
98
|
end
|
101
99
|
|
@@ -104,12 +102,14 @@ module Vedeu
|
|
104
102
|
options[:drb_port] = port
|
105
103
|
end
|
106
104
|
|
107
|
-
opts.on('--drb-height',
|
105
|
+
opts.on('--drb-height',
|
106
|
+
'Set the height for fake terminal.') do |height|
|
108
107
|
# options[:drb] = true
|
109
108
|
options[:drb_height] = height
|
110
109
|
end
|
111
110
|
|
112
|
-
opts.on('--drb-width',
|
111
|
+
opts.on('--drb-width',
|
112
|
+
'Set the width for fake terminal.') do |width|
|
113
113
|
# options[:drb] = true
|
114
114
|
options[:drb_width] = width
|
115
115
|
end
|
@@ -117,7 +117,7 @@ module Vedeu
|
|
117
117
|
|
118
118
|
parser.parse!(args)
|
119
119
|
|
120
|
-
Vedeu::Config.log('
|
120
|
+
Vedeu::Config.log(Esc.blue { '[cli]' }, options)
|
121
121
|
end
|
122
122
|
|
123
123
|
private
|
@@ -1,8 +1,3 @@
|
|
1
|
-
require 'singleton'
|
2
|
-
|
3
|
-
require 'vedeu/configuration/api'
|
4
|
-
require 'vedeu/configuration/cli'
|
5
|
-
|
6
1
|
module Vedeu
|
7
2
|
|
8
3
|
# Namespace for the API configuration and CLI configuration classes.
|
@@ -19,7 +14,7 @@ module Vedeu
|
|
19
14
|
def log(from, options)
|
20
15
|
options.each do |option, value|
|
21
16
|
Vedeu.log(type: :config,
|
22
|
-
message: "#{from} #{option
|
17
|
+
message: "#{from} #{option}: #{value}")
|
23
18
|
end
|
24
19
|
end
|
25
20
|
|
@@ -142,6 +137,13 @@ module Vedeu
|
|
142
137
|
end
|
143
138
|
alias_method :once, :once?
|
144
139
|
|
140
|
+
# Returns the renderers which should receive output.
|
141
|
+
#
|
142
|
+
# @return [Array<Class>]
|
143
|
+
def renderers
|
144
|
+
instance.options[:renderers]
|
145
|
+
end
|
146
|
+
|
145
147
|
# Returns the redefined setting for STDIN.
|
146
148
|
#
|
147
149
|
# @return [File|IO]
|
@@ -236,9 +238,10 @@ module Vedeu
|
|
236
238
|
@options.merge!(opts)
|
237
239
|
|
238
240
|
@options.merge!(Config::API.configure(&block)) if block_given?
|
239
|
-
|
240
241
|
@options.merge!(Config::CLI.configure(args)) if args.any?
|
241
242
|
|
243
|
+
Vedeu::Renderers.renderer(*@options[:renderers])
|
244
|
+
|
242
245
|
Vedeu::Configuration
|
243
246
|
end
|
244
247
|
|
@@ -267,6 +270,7 @@ module Vedeu
|
|
267
270
|
interactive: true,
|
268
271
|
log: '/tmp/vedeu.log',
|
269
272
|
once: false,
|
273
|
+
renderers: [Vedeu::TerminalRenderer],
|
270
274
|
stdin: nil,
|
271
275
|
stdout: nil,
|
272
276
|
stderr: nil,
|
data/lib/vedeu/cursor/all.rb
CHANGED
@@ -1,8 +1,5 @@
|
|
1
1
|
require 'vedeu/repositories/all'
|
2
|
-
require 'vedeu/cursor/cursor'
|
3
|
-
require 'vedeu/cursor/move'
|
4
|
-
require 'vedeu/cursor/refresh_cursor'
|
5
|
-
require 'vedeu/cursor/toggle'
|
6
2
|
|
7
|
-
|
8
|
-
|
3
|
+
require_relative 'cursor'
|
4
|
+
require_relative 'move'
|
5
|
+
require_relative 'refresh_cursor'
|
data/lib/vedeu/cursor/cursor.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'vedeu/cursor/all'
|
2
2
|
require 'vedeu/geometry/position'
|
3
|
-
require 'vedeu/support/visible'
|
4
3
|
|
5
4
|
module Vedeu
|
6
5
|
|
@@ -10,10 +9,6 @@ module Vedeu
|
|
10
9
|
class Cursor
|
11
10
|
|
12
11
|
extend Forwardable
|
13
|
-
|
14
|
-
def_delegators :state, :visible?,
|
15
|
-
:invisible?
|
16
|
-
|
17
12
|
include Vedeu::Model
|
18
13
|
|
19
14
|
# @!attribute [r] attributes
|
@@ -36,6 +31,11 @@ module Vedeu
|
|
36
31
|
# @return [Boolean|Symbol]
|
37
32
|
attr_reader :state
|
38
33
|
|
34
|
+
# @!attribute [r] visible
|
35
|
+
# @return [Boolean|Symbol]
|
36
|
+
attr_reader :visible
|
37
|
+
alias_method :visible?, :visible
|
38
|
+
|
39
39
|
# @!attribute [r] x
|
40
40
|
# @return [Fixnum]
|
41
41
|
attr_reader :x
|
@@ -52,8 +52,7 @@ module Vedeu
|
|
52
52
|
# @option attributes ox [Fixnum] The offset x coordinate.
|
53
53
|
# @option attributes oy [Fixnum] The offset y coordinate.
|
54
54
|
# @option attributes repository [Vedeu::Repository]
|
55
|
-
# @option attributes
|
56
|
-
# either +true+ or +false+, +:hide+ or +:show+.
|
55
|
+
# @option attributes visible [Boolean] The visibility of the cursor.
|
57
56
|
# @option attributes x [Fixnum] The terminal x coordinate for the cursor.
|
58
57
|
# @option attributes y [Fixnum] The terminal y coordinate for the cursor.
|
59
58
|
#
|
@@ -61,9 +60,7 @@ module Vedeu
|
|
61
60
|
def initialize(attributes = {})
|
62
61
|
# Hack because Repository#by_name creates Cursor objects with just a
|
63
62
|
# name.
|
64
|
-
if attributes.is_a?(String)
|
65
|
-
attributes = { name: attributes }
|
66
|
-
end
|
63
|
+
attributes = { name: attributes } if attributes.is_a?(String)
|
67
64
|
|
68
65
|
@attributes = defaults.merge!(attributes)
|
69
66
|
|
@@ -71,7 +68,7 @@ module Vedeu
|
|
71
68
|
@ox = @attributes.fetch(:ox)
|
72
69
|
@oy = @attributes.fetch(:oy)
|
73
70
|
@repository = @attributes.fetch(:repository)
|
74
|
-
@
|
71
|
+
@visible = @attributes.fetch(:visible)
|
75
72
|
@x = @attributes.fetch(:x)
|
76
73
|
@y = @attributes.fetch(:y)
|
77
74
|
|
@@ -80,7 +77,12 @@ module Vedeu
|
|
80
77
|
|
81
78
|
# @return [String]
|
82
79
|
def inspect
|
83
|
-
"<Vedeu::Cursor (#{name},
|
80
|
+
"<Vedeu::Cursor (#{name}, " \
|
81
|
+
"#{visible}, " \
|
82
|
+
"x:#{x}, " \
|
83
|
+
"y:#{y}, " \
|
84
|
+
"ox:#{ox}, " \
|
85
|
+
"oy:#{oy})>"
|
84
86
|
end
|
85
87
|
|
86
88
|
# Returns an escape sequence to position the cursor and set its visibility.
|
@@ -114,7 +116,7 @@ module Vedeu
|
|
114
116
|
ox: 0,
|
115
117
|
oy: 0,
|
116
118
|
repository: Vedeu.cursors,
|
117
|
-
|
119
|
+
visible: false,
|
118
120
|
x: 1,
|
119
121
|
y: 1,
|
120
122
|
}
|
@@ -131,7 +133,13 @@ module Vedeu
|
|
131
133
|
#
|
132
134
|
# @return [String]
|
133
135
|
def visibility
|
134
|
-
|
136
|
+
if visible?
|
137
|
+
Vedeu::Esc.string('show_cursor')
|
138
|
+
|
139
|
+
else
|
140
|
+
Vedeu::Esc.string('hide_cursor')
|
141
|
+
|
142
|
+
end
|
135
143
|
end
|
136
144
|
|
137
145
|
end # Cursor
|
data/lib/vedeu/cursor/move.rb
CHANGED
@@ -38,13 +38,13 @@ module Vedeu
|
|
38
38
|
extend Forwardable
|
39
39
|
|
40
40
|
def_delegators :@interface, :border,
|
41
|
-
|
42
|
-
|
41
|
+
:border?,
|
42
|
+
:geometry
|
43
43
|
|
44
44
|
def_delegators :geometry, :left,
|
45
|
-
|
46
|
-
|
47
|
-
|
45
|
+
:top,
|
46
|
+
:height,
|
47
|
+
:width
|
48
48
|
|
49
49
|
# Returns an instance of Vedeu::Move.
|
50
50
|
#
|
@@ -174,29 +174,19 @@ module Vedeu
|
|
174
174
|
|
175
175
|
# @return [PositionValidator]
|
176
176
|
def validator
|
177
|
-
@validator ||= Vedeu::PositionValidator.validate(interface,
|
178
|
-
|
179
|
-
|
177
|
+
@validator ||= Vedeu::PositionValidator.validate(interface.name,
|
178
|
+
x_position,
|
179
|
+
y_position)
|
180
180
|
end
|
181
181
|
|
182
|
-
# Apply the direction amount to the cursor offset. If the offset is less
|
183
|
-
# than 0, correct to 0.
|
184
|
-
#
|
185
182
|
# @return [Fixnum]
|
186
|
-
def
|
187
|
-
|
188
|
-
ox = 0 if ox < 0
|
189
|
-
ox
|
183
|
+
def x_position
|
184
|
+
coordinate.x_position(ox)
|
190
185
|
end
|
191
186
|
|
192
|
-
# Apply the direction amount to the cursor offset. If the offset is less
|
193
|
-
# than 0, correct to 0.
|
194
|
-
#
|
195
187
|
# @return [Fixnum]
|
196
|
-
def
|
197
|
-
|
198
|
-
oy = 0 if oy < 0
|
199
|
-
oy
|
188
|
+
def y_position
|
189
|
+
coordinate.y_position(oy)
|
200
190
|
end
|
201
191
|
|
202
192
|
# @return [Coordinate]
|
@@ -225,6 +215,26 @@ module Vedeu
|
|
225
215
|
width
|
226
216
|
end
|
227
217
|
|
218
|
+
# Apply the direction amount to the cursor offset. If the offset is less
|
219
|
+
# than 0, correct to 0.
|
220
|
+
#
|
221
|
+
# @return [Fixnum]
|
222
|
+
def ox
|
223
|
+
ox = cursor.ox + dx
|
224
|
+
ox = 0 if ox < 0
|
225
|
+
ox
|
226
|
+
end
|
227
|
+
|
228
|
+
# Apply the direction amount to the cursor offset. If the offset is less
|
229
|
+
# than 0, correct to 0.
|
230
|
+
#
|
231
|
+
# @return [Fixnum]
|
232
|
+
def oy
|
233
|
+
oy = cursor.oy + dy
|
234
|
+
oy = 0 if oy < 0
|
235
|
+
oy
|
236
|
+
end
|
237
|
+
|
228
238
|
end # Move
|
229
239
|
|
230
240
|
end # Vedeu
|