vedeu 0.2.12 → 0.3.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.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/Guardfile +13 -0
- data/README.md +11 -9
- data/Rakefile +10 -1
- data/bin/vedeu_test +14 -0
- data/config/cucumber.yml +8 -0
- data/docs/api.md +45 -16
- data/docs/events.md +21 -9
- data/docs/getting_started.md +16 -0
- data/docs/views.md +158 -0
- data/examples/borders_app.rb +236 -110
- data/examples/colour_support.sh +98 -0
- data/examples/colours_app.rb +41 -0
- data/examples/configuration_app.rb +11 -6
- data/examples/cursor_app.rb +60 -61
- data/examples/focus_app.rb +72 -34
- data/examples/hello_world.rb +13 -8
- data/examples/lines_app.rb +37 -28
- data/features/start_stop.feature +27 -0
- data/features/support/env.rb +14 -0
- data/lib/vedeu/all.rb +29 -0
- data/lib/vedeu/api.rb +39 -0
- data/lib/vedeu/application.rb +15 -7
- data/lib/vedeu/bindings.rb +121 -0
- data/lib/vedeu/buffers/all.rb +10 -0
- data/lib/vedeu/{repositories/models → buffers}/buffer.rb +47 -64
- data/lib/vedeu/buffers/display_buffer.rb +118 -0
- data/lib/vedeu/configuration/all.rb +6 -0
- data/lib/vedeu/configuration/api.rb +3 -1
- data/lib/vedeu/configuration/cli.rb +3 -1
- data/lib/vedeu/configuration/configuration.rb +23 -2
- data/lib/vedeu/cursor/all.rb +23 -0
- data/lib/vedeu/cursor/cursor.rb +116 -0
- data/lib/vedeu/cursor/move_cursor.rb +137 -0
- data/lib/vedeu/cursor/toggle_cursor.rb +53 -0
- data/lib/vedeu/dsl/all.rb +28 -0
- data/lib/vedeu/dsl/components/all.rb +7 -0
- data/lib/vedeu/dsl/components/border.rb +104 -0
- data/lib/vedeu/dsl/components/geometry.rb +153 -0
- data/lib/vedeu/dsl/components/keymap.rb +93 -0
- data/lib/vedeu/dsl/components/menu.rb +82 -0
- data/lib/vedeu/dsl/composition.rb +72 -0
- data/lib/vedeu/dsl/interface.rb +210 -0
- data/lib/vedeu/dsl/line.rb +135 -0
- data/lib/vedeu/dsl/shared/all.rb +7 -0
- data/lib/vedeu/dsl/shared/colour.rb +85 -0
- data/lib/vedeu/dsl/shared/style.rb +38 -0
- data/lib/vedeu/dsl/shared/text.rb +102 -0
- data/lib/vedeu/dsl/shared/use.rb +47 -0
- data/lib/vedeu/dsl/stream.rb +49 -0
- data/lib/vedeu/dsl/view.rb +136 -0
- data/lib/vedeu/events/all.rb +10 -0
- data/lib/vedeu/{repositories/models → events}/event.rb +97 -8
- data/lib/vedeu/events/trigger.rb +58 -0
- data/lib/vedeu/exceptions.rb +34 -0
- data/lib/vedeu/input/all.rb +29 -0
- data/lib/vedeu/input/input.rb +26 -0
- data/lib/vedeu/{models → input}/key.rb +21 -11
- data/lib/vedeu/input/keymap.rb +130 -0
- data/lib/vedeu/input/keys.rb +8 -0
- data/lib/vedeu/input/mapper.rb +112 -0
- data/lib/vedeu/launcher.rb +7 -4
- data/lib/vedeu/models/all.rb +12 -0
- data/lib/vedeu/models/collection.rb +71 -0
- data/lib/vedeu/{repositories → models}/focus.rb +63 -21
- data/lib/vedeu/models/geometry.rb +100 -259
- data/lib/vedeu/{repositories/models → models}/group.rb +16 -14
- data/lib/vedeu/{repositories/models → models}/menu.rb +85 -22
- data/lib/vedeu/models/model.rb +51 -0
- data/lib/vedeu/models/view/all.rb +12 -0
- data/lib/vedeu/models/view/char.rb +84 -0
- data/lib/vedeu/models/view/chars.rb +8 -0
- data/lib/vedeu/models/view/composition.rb +101 -0
- data/lib/vedeu/models/view/interface.rb +215 -0
- data/lib/vedeu/models/view/interfaces.rb +8 -0
- data/lib/vedeu/models/view/line.rb +134 -0
- data/lib/vedeu/models/view/lines.rb +8 -0
- data/lib/vedeu/models/view/stream.rb +144 -0
- data/lib/vedeu/models/view/streams.rb +8 -0
- data/lib/vedeu/output/all.rb +8 -0
- data/lib/vedeu/output/border.rb +387 -0
- data/lib/vedeu/output/compositor.rb +41 -30
- data/lib/vedeu/output/output.rb +6 -13
- data/lib/vedeu/output/viewport.rb +78 -94
- data/lib/vedeu/output/writer.rb +29 -0
- data/lib/vedeu/presentation/all.rb +9 -0
- data/lib/vedeu/{colours → presentation}/background.rb +1 -9
- data/lib/vedeu/{colours → presentation}/colour.rb +21 -8
- data/lib/vedeu/{colours → presentation}/foreground.rb +5 -9
- data/lib/vedeu/presentation/presentation.rb +91 -0
- data/lib/vedeu/presentation/style.rb +47 -0
- data/lib/vedeu/{colours → presentation}/translator.rb +11 -5
- data/lib/vedeu/repositories/all.rb +5 -0
- data/lib/vedeu/repositories/menus.rb +5 -42
- data/lib/vedeu/{support → repositories}/repository.rb +78 -41
- data/lib/vedeu/support/all.rb +22 -0
- data/lib/vedeu/support/bounding_area.rb +2 -1
- data/lib/vedeu/support/coercions.rb +18 -1
- data/lib/vedeu/support/console.rb +73 -0
- data/lib/vedeu/support/content_geometry.rb +69 -0
- data/lib/vedeu/support/coordinate.rb +246 -0
- data/lib/vedeu/support/esc.rb +29 -2
- data/lib/vedeu/support/log.rb +36 -2
- data/lib/vedeu/support/node.rb +61 -0
- data/lib/vedeu/support/position.rb +28 -13
- data/lib/vedeu/support/position_validator.rb +79 -0
- data/lib/vedeu/support/read.rb +65 -0
- data/lib/vedeu/support/refresh.rb +8 -32
- data/lib/vedeu/support/terminal.rb +34 -4
- data/lib/vedeu/support/text.rb +104 -0
- data/lib/vedeu/support/trace.rb +11 -23
- data/lib/vedeu/support/visible.rb +75 -0
- data/lib/vedeu/support/write.rb +85 -0
- data/lib/vedeu/traps.rb +18 -0
- data/lib/vedeu.rb +41 -101
- data/test/integration/dsl/compositions_test.rb +27 -0
- data/test/integration/dsl/interfaces_test.rb +261 -0
- data/test/integration/dsl/keymaps_test.rb +42 -0
- data/test/integration/dsl/lines_test.rb +146 -0
- data/test/integration/dsl/menus_test.rb +59 -0
- data/test/integration/dsl/streams_test.rb +129 -0
- data/test/integration/dsl/views_test.rb +63 -0
- data/test/lib/vedeu/api_test.rb +163 -0
- data/test/lib/vedeu/application_test.rb +19 -10
- data/test/lib/vedeu/bindings_test.rb +54 -0
- data/test/lib/vedeu/buffers/all_test.rb +11 -0
- data/test/lib/vedeu/buffers/buffer_test.rb +196 -0
- data/test/lib/vedeu/buffers/display_buffer_test.rb +58 -0
- data/test/lib/vedeu/configuration/api_test.rb +42 -58
- data/test/lib/vedeu/configuration/cli_test.rb +4 -4
- data/test/lib/vedeu/configuration/configuration_test.rb +11 -29
- data/test/lib/vedeu/cursor/all_test.rb +33 -0
- data/test/lib/vedeu/cursor/cursor_test.rb +85 -0
- data/test/lib/vedeu/cursor/move_cursor_test.rb +212 -0
- data/test/lib/vedeu/cursor/toggle_cursor_test.rb +63 -0
- data/test/lib/vedeu/dsl/components/border_test.rb +414 -0
- data/test/lib/vedeu/dsl/components/geometry_test.rb +231 -0
- data/test/lib/vedeu/dsl/components/keymap_test.rb +80 -0
- data/test/lib/vedeu/dsl/components/menu_test.rb +115 -0
- data/test/lib/vedeu/dsl/composition_test.rb +41 -0
- data/test/lib/vedeu/dsl/interface_test.rb +470 -0
- data/test/lib/vedeu/dsl/line_test.rb +60 -0
- data/test/lib/vedeu/dsl/shared/colour_test.rb +100 -0
- data/test/lib/vedeu/dsl/shared/style_test.rb +22 -0
- data/test/lib/vedeu/dsl/shared/text_test.rb +15 -0
- data/test/lib/vedeu/dsl/shared/use_test.rb +27 -0
- data/test/lib/vedeu/dsl/stream_test.rb +26 -0
- data/test/lib/vedeu/dsl/view_test.rb +73 -0
- data/test/lib/vedeu/events/all_test.rb +11 -0
- data/test/lib/vedeu/events/event_test.rb +109 -0
- data/test/lib/vedeu/events/trigger_test.rb +60 -0
- data/test/lib/vedeu/input/all_test.rb +11 -0
- data/test/lib/vedeu/input/input_test.rb +7 -3
- data/test/lib/vedeu/input/key_test.rb +72 -0
- data/test/lib/vedeu/input/keymap_test.rb +89 -0
- data/test/lib/vedeu/input/mapper_test.rb +94 -0
- data/test/lib/vedeu/launcher_test.rb +19 -20
- data/test/lib/vedeu/models/collection_test.rb +114 -0
- data/test/lib/vedeu/{repositories → models}/focus_test.rb +46 -13
- data/test/lib/vedeu/models/geometry_test.rb +35 -39
- data/test/lib/vedeu/models/group_test.rb +100 -0
- data/test/lib/vedeu/models/menu_test.rb +288 -0
- data/test/lib/vedeu/models/model_test.rb +31 -0
- data/test/lib/vedeu/models/view/char_test.rb +166 -0
- data/test/lib/vedeu/models/view/chars_test.rb +18 -0
- data/test/lib/vedeu/models/view/composition_test.rb +41 -0
- data/test/lib/vedeu/models/view/interface_test.rb +128 -0
- data/test/lib/vedeu/models/view/interfaces_test.rb +18 -0
- data/test/lib/vedeu/models/view/line_test.rb +214 -0
- data/test/lib/vedeu/models/view/lines_test.rb +18 -0
- data/test/lib/vedeu/models/view/stream_test.rb +106 -0
- data/test/lib/vedeu/models/view/streams_test.rb +18 -0
- data/test/lib/vedeu/output/border_test.rb +357 -0
- data/test/lib/vedeu/output/compositor_test.rb +61 -15
- data/test/lib/vedeu/output/output_test.rb +25 -84
- data/test/lib/vedeu/output/viewport_test.rb +171 -45
- data/test/lib/vedeu/output/writer_test.rb +45 -0
- data/test/lib/vedeu/{colours → presentation}/background_test.rb +0 -0
- data/test/lib/vedeu/{colours → presentation}/colour_test.rb +5 -5
- data/test/lib/vedeu/{colours → presentation}/foreground_test.rb +0 -0
- data/test/lib/vedeu/presentation/presentation_test.rb +56 -0
- data/test/lib/vedeu/presentation/style_test.rb +69 -0
- data/test/lib/vedeu/presentation/translator_test.rb +63 -0
- data/test/lib/vedeu/repositories/all_test.rb +7 -0
- data/test/lib/vedeu/repositories/menus_test.rb +3 -156
- data/test/lib/vedeu/repositories/repository_test.rb +271 -0
- data/test/lib/vedeu/support/bounding_area_test.rb +3 -3
- data/test/lib/vedeu/support/coercions_test.rb +39 -0
- data/test/lib/vedeu/support/common_test.rb +31 -16
- data/test/lib/vedeu/support/console_test.rb +85 -0
- data/test/lib/vedeu/support/content_geometry_test.rb +107 -0
- data/test/lib/vedeu/support/coordinate_test.rb +190 -0
- data/test/lib/vedeu/support/esc_test.rb +18 -0
- data/test/lib/vedeu/support/grid_test.rb +15 -10
- data/test/lib/vedeu/support/log_test.rb +3 -0
- data/test/lib/vedeu/support/position_test.rb +22 -2
- data/test/lib/vedeu/support/position_validator_test.rb +11 -0
- data/test/lib/vedeu/support/read_test.rb +88 -0
- data/test/lib/vedeu/support/refresh_test.rb +44 -12
- data/test/lib/vedeu/support/sentence_test.rb +6 -4
- data/test/lib/vedeu/support/terminal_test.rb +81 -70
- data/test/lib/vedeu/support/text_test.rb +93 -0
- data/test/lib/vedeu/support/trace_test.rb +21 -9
- data/test/lib/vedeu/support/visible_test.rb +148 -0
- data/test/lib/vedeu/support/write_test.rb +136 -0
- data/test/lib/vedeu/traps_test.rb +11 -0
- data/test/lib/vedeu_test.rb +2 -0
- data/test/support/helpers/all.rb +7 -0
- data/test/support/helpers/dsl_model_test_class.rb +25 -0
- data/test/support/{test_classes → helpers}/helpers.rb +0 -2
- data/test/support/helpers/misc.rb +15 -0
- data/test/support/helpers/model_test_class.rb +34 -0
- data/test/support/{test_classes → helpers}/presentation.rb +0 -0
- data/test/support/{test_classes → helpers}/repositories.rb +3 -3
- data/test/support/{test_modules/repository.rb → helpers/repository_test_module.rb} +5 -1
- data/test/test_helper.rb +19 -22
- data/vedeu.gemspec +11 -6
- metadata +322 -181
- data/lib/vedeu/api/api.rb +0 -239
- data/lib/vedeu/api/composition.rb +0 -38
- data/lib/vedeu/api/defined.rb +0 -52
- data/lib/vedeu/api/helpers.rb +0 -161
- data/lib/vedeu/api/interface.rb +0 -287
- data/lib/vedeu/api/keymap.rb +0 -75
- data/lib/vedeu/api/line.rb +0 -107
- data/lib/vedeu/api/menu.rb +0 -111
- data/lib/vedeu/api/stream.rb +0 -96
- data/lib/vedeu/models/border.rb +0 -238
- data/lib/vedeu/models/char.rb +0 -43
- data/lib/vedeu/models/composition.rb +0 -72
- data/lib/vedeu/models/line.rb +0 -100
- data/lib/vedeu/models/stream.rb +0 -130
- data/lib/vedeu/models/style.rb +0 -52
- data/lib/vedeu/repositories/buffers.rb +0 -52
- data/lib/vedeu/repositories/cursors.rb +0 -64
- data/lib/vedeu/repositories/events.rb +0 -147
- data/lib/vedeu/repositories/groups.rb +0 -47
- data/lib/vedeu/repositories/interfaces.rb +0 -78
- data/lib/vedeu/repositories/keymaps.rb +0 -196
- data/lib/vedeu/repositories/models/cursor.rb +0 -209
- data/lib/vedeu/repositories/models/interface.rb +0 -163
- data/lib/vedeu/repositories/models/keymap.rb +0 -111
- data/lib/vedeu/repositories/models/offset.rb +0 -91
- data/lib/vedeu/repositories/offsets.rb +0 -69
- data/lib/vedeu/support/exceptions.rb +0 -34
- data/lib/vedeu/support/keymap_validator.rb +0 -100
- data/lib/vedeu/support/model.rb +0 -14
- data/lib/vedeu/support/presentation.rb +0 -86
- data/lib/vedeu/support/registrar.rb +0 -53
- data/test/integration/api/api_test.rb +0 -97
- data/test/integration/api_dsl/dsl_api_test.rb +0 -4
- data/test/integration/api_dsl/dsl_composition_test.rb +0 -4
- data/test/integration/api_dsl/dsl_defined_test.rb +0 -4
- data/test/integration/api_dsl/dsl_helpers_test.rb +0 -4
- data/test/integration/api_dsl/dsl_interface_test.rb +0 -4
- data/test/integration/api_dsl/dsl_keymap.rb +0 -4
- data/test/integration/api_dsl/dsl_line_test.rb +0 -4
- data/test/integration/api_dsl/dsl_menu_test.rb +0 -4
- data/test/integration/api_dsl/dsl_stream_test.rb +0 -138
- data/test/integration/cursors_test.rb +0 -9
- data/test/integration/defining_interfaces_test.rb +0 -26
- data/test/integration/run_once_test.rb +0 -26
- data/test/integration/views/basic_view_test.rb +0 -807
- data/test/lib/vedeu/api/api_test.rb +0 -204
- data/test/lib/vedeu/api/composition_test.rb +0 -31
- data/test/lib/vedeu/api/defined_test.rb +0 -79
- data/test/lib/vedeu/api/helpers_test.rb +0 -111
- data/test/lib/vedeu/api/interface_test.rb +0 -410
- data/test/lib/vedeu/api/keymap_test.rb +0 -65
- data/test/lib/vedeu/api/line_test.rb +0 -83
- data/test/lib/vedeu/api/menu_test.rb +0 -85
- data/test/lib/vedeu/api/stream_test.rb +0 -59
- data/test/lib/vedeu/colours/translator_test.rb +0 -22
- data/test/lib/vedeu/models/border_test.rb +0 -197
- data/test/lib/vedeu/models/char_test.rb +0 -52
- data/test/lib/vedeu/models/composition_test.rb +0 -45
- data/test/lib/vedeu/models/key_test.rb +0 -43
- data/test/lib/vedeu/models/line_test.rb +0 -123
- data/test/lib/vedeu/models/stream_test.rb +0 -233
- data/test/lib/vedeu/models/style_test.rb +0 -59
- data/test/lib/vedeu/repositories/buffers_test.rb +0 -37
- data/test/lib/vedeu/repositories/cursors_test.rb +0 -62
- data/test/lib/vedeu/repositories/events_test.rb +0 -57
- data/test/lib/vedeu/repositories/groups_test.rb +0 -28
- data/test/lib/vedeu/repositories/interfaces_test.rb +0 -51
- data/test/lib/vedeu/repositories/keymaps_test.rb +0 -223
- data/test/lib/vedeu/repositories/models/buffer_test.rb +0 -174
- data/test/lib/vedeu/repositories/models/cursor_test.rb +0 -158
- data/test/lib/vedeu/repositories/models/event_test.rb +0 -53
- data/test/lib/vedeu/repositories/models/group_test.rb +0 -98
- data/test/lib/vedeu/repositories/models/interface_test.rb +0 -130
- data/test/lib/vedeu/repositories/models/keymap_test.rb +0 -27
- data/test/lib/vedeu/repositories/models/menu_test.rb +0 -246
- data/test/lib/vedeu/repositories/models/offset_test.rb +0 -128
- data/test/lib/vedeu/repositories/offsets_test.rb +0 -39
- data/test/lib/vedeu/support/keymap_validator_test.rb +0 -62
- data/test/lib/vedeu/support/model_test.rb +0 -23
- data/test/lib/vedeu/support/presentation_test.rb +0 -53
- data/test/lib/vedeu/support/registrar_test.rb +0 -94
- data/test/lib/vedeu/support/repository_test.rb +0 -208
- data/test/support/test_classes/all.rb +0 -5
- data/test/support/test_classes/coercions.rb +0 -16
- data/test/support/test_classes/model.rb +0 -23
- data/test/support/test_modules/all.rb +0 -1
data/examples/cursor_app.rb
CHANGED
@@ -11,103 +11,102 @@ require 'vedeu'
|
|
11
11
|
class VedeuCursorApp
|
12
12
|
include Vedeu
|
13
13
|
|
14
|
-
|
14
|
+
configure do
|
15
|
+
colour_mode 16777216
|
16
|
+
debug!
|
17
|
+
log '/tmp/vedeu_cursor_app.log'
|
18
|
+
end
|
15
19
|
|
16
|
-
|
17
|
-
cursor true
|
18
|
-
centred true
|
19
|
-
colour foreground: '#ff0000', background: '#000000'
|
20
|
-
height 4
|
21
|
-
width 15
|
20
|
+
bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
|
22
21
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
key('l') { Vedeu.trigger(:_cursor_right_) }
|
27
|
-
key('j') { Vedeu.trigger(:_cursor_down_) }
|
28
|
-
key('h') { Vedeu.trigger(:_cursor_left_) }
|
22
|
+
interface 'main_interface' do
|
23
|
+
border do
|
24
|
+
# adds default border
|
29
25
|
end
|
30
|
-
end
|
31
26
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
27
|
+
cursor true
|
28
|
+
colour foreground: '#ff0000', background: '#000000'
|
29
|
+
|
30
|
+
geometry do
|
31
|
+
centred true
|
32
|
+
height 8
|
33
|
+
width 8
|
34
|
+
end
|
39
35
|
end
|
40
36
|
|
41
|
-
|
42
|
-
key(:up)
|
43
|
-
key(:right) { Vedeu.trigger(:_cursor_right_) }
|
44
|
-
key(:down)
|
45
|
-
key(:left)
|
37
|
+
keymap('_global_') do
|
38
|
+
key(:up, 'k') { Vedeu.trigger(:_cursor_up_) }
|
39
|
+
key(:right, 'l') { Vedeu.trigger(:_cursor_right_) }
|
40
|
+
key(:down, 'j') { Vedeu.trigger(:_cursor_down_) }
|
41
|
+
key(:left, 'h') { Vedeu.trigger(:_cursor_left_) }
|
46
42
|
end
|
47
43
|
|
48
|
-
|
49
|
-
view '
|
50
|
-
|
51
|
-
|
52
|
-
text 'A
|
44
|
+
renders do
|
45
|
+
view 'main_interface' do
|
46
|
+
lines do
|
47
|
+
streams do
|
48
|
+
text 'A.3456789 '
|
53
49
|
end
|
54
|
-
|
50
|
+
streams do
|
55
51
|
background '#550000'
|
56
52
|
foreground '#ffff00'
|
57
53
|
text 'hydrogen'
|
58
54
|
end
|
59
|
-
|
55
|
+
streams do
|
60
56
|
text ' helium'
|
61
57
|
end
|
62
58
|
end
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
text 'C 23456789'
|
59
|
+
lines do
|
60
|
+
streams do
|
61
|
+
text 'B.3456789 lithium beryllium boron nitrogen'
|
67
62
|
end
|
68
|
-
|
63
|
+
end
|
64
|
+
lines do
|
65
|
+
streams do
|
66
|
+
text 'C.3456789'
|
69
67
|
text ' carbon oxygen '
|
70
68
|
end
|
71
|
-
|
69
|
+
streams do
|
72
70
|
background '#aadd00'
|
73
71
|
foreground '#000000'
|
74
72
|
text 'fluorine'
|
75
73
|
end
|
76
74
|
end
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
line do
|
81
|
-
stream do
|
82
|
-
text 'F 23456789 magnesium '
|
75
|
+
lines do
|
76
|
+
streams do
|
77
|
+
text 'D.3456789'
|
83
78
|
end
|
84
|
-
|
79
|
+
end
|
80
|
+
lines do
|
81
|
+
streams do
|
82
|
+
text 'E.3456789 neon sodium'
|
83
|
+
end
|
84
|
+
end
|
85
|
+
lines do
|
86
|
+
streams do
|
87
|
+
text 'F.3456789 magnesium '
|
88
|
+
end
|
89
|
+
streams do
|
85
90
|
foreground '#00aaff'
|
86
91
|
text 'aluminium'
|
87
92
|
end
|
88
93
|
end
|
89
|
-
|
90
|
-
|
91
|
-
|
94
|
+
lines do
|
95
|
+
streams do
|
96
|
+
text 'G.3456789 silicon'
|
97
|
+
end
|
98
|
+
end
|
99
|
+
lines do
|
100
|
+
streams do
|
92
101
|
background '#550000'
|
93
102
|
foreground '#ff00ff'
|
94
|
-
text 'H
|
103
|
+
text 'H.34'
|
95
104
|
end
|
96
105
|
end
|
97
106
|
end
|
98
|
-
|
99
|
-
view 'gold' do
|
100
|
-
cursor false
|
101
|
-
line 'Cursor: '
|
102
|
-
end
|
103
107
|
end
|
104
108
|
|
105
|
-
|
106
|
-
|
107
|
-
Vedeu.configure do
|
108
|
-
debug!
|
109
|
-
log '/tmp/vedeu_cursor_app.log'
|
110
|
-
end
|
109
|
+
focus_by_name 'main_interface'
|
111
110
|
|
112
111
|
def self.start(argv = ARGV)
|
113
112
|
Vedeu::Launcher.new(argv).execute!
|
data/examples/focus_app.rb
CHANGED
@@ -19,67 +19,105 @@ require 'vedeu'
|
|
19
19
|
class VedeuFocusApp
|
20
20
|
include Vedeu
|
21
21
|
|
22
|
-
|
22
|
+
configure do
|
23
|
+
colour_mode 16777216
|
24
|
+
debug!
|
25
|
+
log '/tmp/vedeu_focus_app.log'
|
26
|
+
end
|
27
|
+
|
28
|
+
bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
|
29
|
+
|
30
|
+
update = Proc.new do
|
31
|
+
Vedeu.focus_next
|
32
|
+
|
33
|
+
Vedeu.renders { view('status') { lines { line(Vedeu.focus) } } }
|
34
|
+
end
|
23
35
|
|
24
36
|
interface 'aluminium' do
|
25
37
|
colour foreground: '#ffffff', background: '#330000'
|
26
38
|
cursor true
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
39
|
+
geometry do
|
40
|
+
height 2
|
41
|
+
width 2
|
42
|
+
x 3
|
43
|
+
y 3
|
44
|
+
end
|
45
|
+
keymap { key(' ') { update.call } }
|
31
46
|
end
|
32
47
|
|
33
48
|
interface 'boron' do
|
34
49
|
colour foreground: '#ffffff', background: '#003300'
|
35
50
|
cursor true
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
51
|
+
geometry do
|
52
|
+
height 2
|
53
|
+
width 2
|
54
|
+
x 6
|
55
|
+
y 3
|
56
|
+
end
|
57
|
+
keymap { key(' ') { update.call } }
|
40
58
|
end
|
41
59
|
|
42
60
|
interface 'copper' do
|
43
61
|
colour foreground: '#ffffff', background: '#000033'
|
44
62
|
cursor true
|
45
63
|
focus!
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
64
|
+
geometry do
|
65
|
+
height 2
|
66
|
+
width 2
|
67
|
+
x 3
|
68
|
+
y 6
|
69
|
+
end
|
70
|
+
keymap { key(' ') { update.call } }
|
50
71
|
end
|
51
72
|
|
52
73
|
interface 'dubnium' do
|
53
74
|
colour foreground: '#ffffff', background: '#333300'
|
54
75
|
cursor true
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
76
|
+
geometry do
|
77
|
+
height 2
|
78
|
+
width 2
|
79
|
+
x 6
|
80
|
+
y 6
|
81
|
+
end
|
82
|
+
keymap { key(' ') { update.call } }
|
59
83
|
end
|
60
84
|
|
61
85
|
interface 'status' do
|
62
86
|
colour foreground: '#ffffff', background: '#000000'
|
63
87
|
cursor false
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
88
|
+
geometry do
|
89
|
+
height 2
|
90
|
+
width 10
|
91
|
+
x 9
|
92
|
+
y 3
|
93
|
+
end
|
94
|
+
keymap { key(' ') { update.call } }
|
68
95
|
end
|
69
96
|
|
70
|
-
|
71
|
-
view('aluminium')
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
97
|
+
renders do
|
98
|
+
view('aluminium') do
|
99
|
+
lines do
|
100
|
+
line 'Al'
|
101
|
+
end
|
102
|
+
end
|
103
|
+
view('boron') do
|
104
|
+
lines do
|
105
|
+
line 'B'
|
106
|
+
end
|
107
|
+
end
|
108
|
+
view('copper') do
|
109
|
+
lines do
|
110
|
+
line 'Cu'
|
111
|
+
end
|
112
|
+
end
|
113
|
+
view('dubnium') do
|
114
|
+
lines do
|
115
|
+
line 'Db'
|
116
|
+
end
|
117
|
+
end
|
118
|
+
view('status') do
|
119
|
+
lines do
|
120
|
+
line Vedeu.focus
|
83
121
|
end
|
84
122
|
end
|
85
123
|
end
|
data/examples/hello_world.rb
CHANGED
@@ -12,25 +12,30 @@ class HelloWorldApp
|
|
12
12
|
include Vedeu
|
13
13
|
|
14
14
|
configure do
|
15
|
+
colour_mode 16777216
|
15
16
|
debug!
|
16
17
|
log '/tmp/vedeu_hello_world.log'
|
17
18
|
end
|
18
19
|
|
19
|
-
|
20
|
+
bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
|
20
21
|
|
21
22
|
interface 'messages' do
|
22
23
|
background '#000000'
|
23
|
-
centred!
|
24
24
|
foreground '#00ff00'
|
25
|
-
|
26
|
-
|
25
|
+
geometry do
|
26
|
+
centred!
|
27
|
+
height 3
|
28
|
+
width 20
|
29
|
+
end
|
27
30
|
end
|
28
31
|
|
29
|
-
|
32
|
+
renders do
|
30
33
|
view 'messages' do
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
+
lines do
|
35
|
+
centre 'Hello World!', width: 20
|
36
|
+
line
|
37
|
+
centre "Press 'q' to exit.", width: 20
|
38
|
+
end
|
34
39
|
end
|
35
40
|
end
|
36
41
|
|
data/examples/lines_app.rb
CHANGED
@@ -11,51 +11,60 @@ require 'vedeu'
|
|
11
11
|
class VedeuLinesApp
|
12
12
|
include Vedeu
|
13
13
|
|
14
|
-
|
14
|
+
configure do
|
15
|
+
colour_mode 16777216
|
16
|
+
debug!
|
17
|
+
log '/tmp/vedeu_lines_app.log'
|
18
|
+
end
|
19
|
+
|
20
|
+
bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
|
15
21
|
|
16
22
|
interface 'ruthenium' do
|
17
|
-
|
23
|
+
geometry do
|
24
|
+
centred true
|
25
|
+
height 5
|
26
|
+
width 40
|
27
|
+
end
|
18
28
|
colour foreground: '#ffffff', background: '#000000'
|
19
|
-
height 5
|
20
|
-
width 40
|
21
29
|
end
|
22
30
|
|
23
31
|
interface 'tantalum' do
|
24
32
|
colour foreground: '#00aadd', background: '#000000'
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
33
|
+
geometry do
|
34
|
+
height 1
|
35
|
+
width 40
|
36
|
+
x Vedeu.use('ruthenium').left
|
37
|
+
y Vedeu.use('ruthenium').south
|
38
|
+
end
|
29
39
|
end
|
30
40
|
|
31
|
-
|
32
|
-
key(:up) { trigger(:_cursor_up_) }
|
33
|
-
key(:right) { trigger(:_cursor_right_) }
|
34
|
-
key(:down) { trigger(:_cursor_down_) }
|
35
|
-
key(:left) { trigger(:_cursor_left_) }
|
41
|
+
keymap('_global_') do
|
42
|
+
key(:up) { Vedeu.trigger(:_cursor_up_) }
|
43
|
+
key(:right) { Vedeu.trigger(:_cursor_right_) }
|
44
|
+
key(:down) { Vedeu.trigger(:_cursor_down_) }
|
45
|
+
key(:left) { Vedeu.trigger(:_cursor_left_) }
|
36
46
|
end
|
37
47
|
|
38
|
-
|
48
|
+
renders do
|
39
49
|
view 'ruthenium' do
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
50
|
+
lines do
|
51
|
+
line 'Ruthenium is a chemical element with'
|
52
|
+
line 'symbol Ru and atomic number 44. It is a'
|
53
|
+
line 'rare transition metal belonging to the'
|
54
|
+
line 'platinum group of the periodic table.'
|
55
|
+
line 'Like the other metals of the platinum'
|
56
|
+
line 'group, ruthenium is inert to most other'
|
57
|
+
line 'chemicals.'
|
58
|
+
end
|
47
59
|
end
|
48
60
|
view 'tantalum' do
|
49
|
-
|
61
|
+
lines do
|
62
|
+
line 'Use cursor keys to navigate, Q to quit.'
|
63
|
+
end
|
50
64
|
end
|
51
65
|
end
|
52
66
|
|
53
|
-
|
54
|
-
|
55
|
-
Vedeu.configure do
|
56
|
-
debug!
|
57
|
-
log '/tmp/vedeu_lines_app.log'
|
58
|
-
end
|
67
|
+
focus_by_name 'ruthenium'
|
59
68
|
|
60
69
|
def self.start(argv = ARGV)
|
61
70
|
Vedeu::Launcher.new(argv).execute!
|
@@ -0,0 +1,27 @@
|
|
1
|
+
Feature: Starting and stopping a client application
|
2
|
+
|
3
|
+
@basic
|
4
|
+
Scenario: The simplest thing that could work
|
5
|
+
Given a file named "simple.rb" with mode "0755" and with:
|
6
|
+
"""ruby
|
7
|
+
require 'vedeu'
|
8
|
+
|
9
|
+
class VedeuTestApp
|
10
|
+
include Vedeu
|
11
|
+
|
12
|
+
configure do
|
13
|
+
debug!
|
14
|
+
log '/tmp/vedeu_test_helper.log'
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.start(argv = ARGV)
|
18
|
+
Vedeu::Launcher.new(argv).execute!
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
VedeuTestApp.start(ARGV)
|
23
|
+
"""
|
24
|
+
When I run `ruby simple.rb` interactively
|
25
|
+
And I type "q"
|
26
|
+
And I close the stdin stream
|
27
|
+
Then the exit status should be 1
|
@@ -0,0 +1,14 @@
|
|
1
|
+
lib_dir = File.dirname(__FILE__) + '/../../lib'
|
2
|
+
$LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
|
3
|
+
|
4
|
+
require 'simplecov'
|
5
|
+
require 'aruba'
|
6
|
+
require 'aruba/cucumber'
|
7
|
+
# require 'aruba/in_process'
|
8
|
+
require 'mocha/api'
|
9
|
+
require 'vedeu'
|
10
|
+
|
11
|
+
class CucumberError < StandardError; end
|
12
|
+
|
13
|
+
# Aruba::InProcess.main_class = Vedeu::Launcher
|
14
|
+
# Aruba.process = Aruba::InProcess
|
data/lib/vedeu/all.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
# load order is important
|
3
|
+
|
4
|
+
require 'vedeu/traps'
|
5
|
+
require 'vedeu/exceptions'
|
6
|
+
|
7
|
+
require 'vedeu/repositories/all'
|
8
|
+
|
9
|
+
require 'vedeu/api'
|
10
|
+
require 'vedeu/bindings'
|
11
|
+
|
12
|
+
# load order has not been fully established beyond this point
|
13
|
+
|
14
|
+
require 'vedeu/buffers/all'
|
15
|
+
require 'vedeu/configuration/all'
|
16
|
+
require 'vedeu/cursor/all'
|
17
|
+
|
18
|
+
require 'vedeu/dsl/shared/all'
|
19
|
+
require 'vedeu/dsl/all'
|
20
|
+
|
21
|
+
require 'vedeu/events/all'
|
22
|
+
require 'vedeu/input/all'
|
23
|
+
require 'vedeu/models/all'
|
24
|
+
require 'vedeu/output/all'
|
25
|
+
require 'vedeu/presentation/all'
|
26
|
+
require 'vedeu/support/all'
|
27
|
+
|
28
|
+
require 'vedeu/application'
|
29
|
+
require 'vedeu/launcher'
|
data/lib/vedeu/api.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'vedeu/support/common'
|
2
|
+
require 'vedeu/support/terminal'
|
3
|
+
require 'vedeu/events/all'
|
4
|
+
require 'vedeu/models/all'
|
5
|
+
require 'vedeu/input/all'
|
6
|
+
require 'vedeu/dsl/composition'
|
7
|
+
require 'vedeu/dsl/shared/all'
|
8
|
+
require 'vedeu/dsl/view'
|
9
|
+
|
10
|
+
module Vedeu
|
11
|
+
|
12
|
+
# Provides the API to Vedeu. Methods therein, and classes belonging to this
|
13
|
+
# module expose Vedeu's core functionality.
|
14
|
+
#
|
15
|
+
# @api public
|
16
|
+
module API
|
17
|
+
|
18
|
+
extend Forwardable
|
19
|
+
extend self
|
20
|
+
|
21
|
+
def_delegators Vedeu::Event, :bind, :trigger, :unbind
|
22
|
+
def_delegators Vedeu::Configuration, :configure, :configuration
|
23
|
+
def_delegators Vedeu::DSL::Use, :use
|
24
|
+
def_delegators Vedeu::DSL::View, :interface, :renders, :views
|
25
|
+
|
26
|
+
def_delegators Vedeu::Focus, :focus, :focus_by_name, :focussed?,
|
27
|
+
:focus_next, :focus_previous
|
28
|
+
def_delegators Vedeu::Keymap, :keymap
|
29
|
+
def_delegators Vedeu::Log, :log
|
30
|
+
def_delegators Vedeu::Mapper, :keypress
|
31
|
+
def_delegators Vedeu::Menu, :menu
|
32
|
+
def_delegators Vedeu::Menus, :menus
|
33
|
+
def_delegators Vedeu::Terminal, :height, :width, :resize
|
34
|
+
|
35
|
+
end # API
|
36
|
+
|
37
|
+
extend API
|
38
|
+
|
39
|
+
end # Vedeu
|
data/lib/vedeu/application.rb
CHANGED
@@ -8,13 +8,13 @@ module Vedeu
|
|
8
8
|
class << self
|
9
9
|
|
10
10
|
# @return []
|
11
|
-
def start
|
12
|
-
new.start
|
11
|
+
def start(configuration)
|
12
|
+
new(configuration).start
|
13
13
|
end
|
14
14
|
alias_method :restart, :start
|
15
15
|
|
16
16
|
# Stops the application!
|
17
|
-
# - The `:
|
17
|
+
# - The `:cleanup` event is triggered. Vedeu does not handle this event;
|
18
18
|
# the client application may treat this event as Vedeu signalling that it
|
19
19
|
# is about to terminate. Client applications are encouraged to use this
|
20
20
|
# event to close any open buffers, save files, empty trash, etc.
|
@@ -23,15 +23,19 @@ module Vedeu
|
|
23
23
|
# terminate the application.
|
24
24
|
# @return [StopIteration]
|
25
25
|
def stop
|
26
|
-
Vedeu.trigger(:
|
26
|
+
Vedeu.trigger(:cleanup)
|
27
27
|
|
28
28
|
fail StopIteration
|
29
29
|
end
|
30
30
|
|
31
31
|
end # Application eigenclass
|
32
32
|
|
33
|
+
# :nocov:
|
34
|
+
|
33
35
|
# @return [Application]
|
34
|
-
def initialize
|
36
|
+
def initialize(configuration)
|
37
|
+
@configuration = configuration
|
38
|
+
end
|
35
39
|
|
36
40
|
# Starts the application!
|
37
41
|
# - A new terminal screen is opened (or rather the current terminal is
|
@@ -56,12 +60,14 @@ module Vedeu
|
|
56
60
|
|
57
61
|
private
|
58
62
|
|
63
|
+
attr_reader :configuration
|
64
|
+
|
59
65
|
# Runs the application loop either once, or forever (exceptions and signals
|
60
66
|
# permitting).
|
61
67
|
#
|
62
68
|
# @return []
|
63
69
|
def runner
|
64
|
-
if
|
70
|
+
if configuration.once?
|
65
71
|
yield
|
66
72
|
|
67
73
|
else
|
@@ -79,7 +85,7 @@ module Vedeu
|
|
79
85
|
#
|
80
86
|
# @return []
|
81
87
|
def main_sequence
|
82
|
-
if
|
88
|
+
if configuration.interactive?
|
83
89
|
Input.capture(Terminal)
|
84
90
|
|
85
91
|
else
|
@@ -107,6 +113,8 @@ module Vedeu
|
|
107
113
|
|
108
114
|
end
|
109
115
|
|
116
|
+
# :nocov:
|
117
|
+
|
110
118
|
end # Application
|
111
119
|
|
112
120
|
end # Vedeu
|