vedeu 0.4.52 → 0.4.53

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/docs/events.md +15 -5
  3. data/lib/vedeu/application/application_view.rb +0 -4
  4. data/lib/vedeu/bindings/all.rb +22 -1
  5. data/lib/vedeu/bindings/drb.rb +89 -13
  6. data/lib/vedeu/bindings/menus.rb +123 -13
  7. data/lib/vedeu/bindings/movement.rb +147 -26
  8. data/lib/vedeu/bindings/system.rb +284 -0
  9. data/lib/vedeu/bindings/visibility.rb +117 -13
  10. data/lib/vedeu/dsl/all.rb +2 -1
  11. data/lib/vedeu/output/compressor.rb +2 -0
  12. data/lib/vedeu/output/refresh.rb +20 -5
  13. data/lib/vedeu/output/refresh_group.rb +6 -1
  14. data/lib/vedeu/output/render_border.rb +1 -1
  15. data/lib/vedeu/output/renderers/all.rb +1 -0
  16. data/lib/vedeu/output/renderers/escape_sequence.rb +2 -16
  17. data/lib/vedeu/output/renderers/null.rb +2 -16
  18. data/lib/vedeu/output/renderers/renderer_options.rb +26 -0
  19. data/lib/vedeu/output/renderers/terminal.rb +2 -14
  20. data/lib/vedeu/output/renderers/text.rb +2 -16
  21. data/lib/vedeu/repositories/all.rb +23 -1
  22. data/lib/vedeu/version.rb +1 -1
  23. data/test/lib/vedeu/bindings/system_test.rb +44 -0
  24. data/test/lib/vedeu/output/refresh_group_test.rb +10 -2
  25. data/test/lib/vedeu/output/refresh_test.rb +6 -23
  26. data/test/lib/vedeu/output/renderers/renderer_options_test.rb +12 -0
  27. data/test/lib/vedeu/templating/preprocessor_test.rb +11 -10
  28. metadata +8 -10
  29. data/docs/events/drb.md +0 -49
  30. data/docs/events/main.md +0 -109
  31. data/docs/events/menus.md +0 -72
  32. data/docs/events/movement.md +0 -105
  33. data/docs/events/visibility.md +0 -61
  34. data/lib/vedeu/bindings/bindings.rb +0 -86
  35. data/test/lib/vedeu/bindings/bindings_test.rb +0 -40
@@ -0,0 +1,284 @@
1
+ module Vedeu
2
+
3
+ module Bindings
4
+
5
+ # Creates system events which when called provide a variety of core
6
+ # functions and behaviours. They are soft-namespaced using underscores.
7
+ #
8
+ # @note
9
+ # Unbinding any of these events is likely to cause problems, so I would
10
+ # advise leaving them alone. A safe rule: if the name starts with an
11
+ # underscore, it's probably used by Vedeu internally.
12
+ #
13
+ # @api public
14
+ # :nocov:
15
+ module System
16
+
17
+ extend self
18
+
19
+ # Setup events relating to running Vedeu. This method is called by Vedeu.
20
+ #
21
+ # @return [void]
22
+ def setup!
23
+ cleanup!
24
+ clear!
25
+ clear_group!
26
+ command!
27
+ exit!
28
+ focus_next!
29
+ focus_prev!
30
+ focus_by_name!
31
+ initialize!
32
+ keypress!
33
+ log!
34
+ maximise!
35
+ mode_switch!
36
+ refresh!
37
+ refresh_cursor!
38
+ refresh_group!
39
+ resize!
40
+ unmaximise!
41
+ end
42
+
43
+ private
44
+
45
+ # Vedeu triggers this event when `:_exit_` is triggered. You can hook
46
+ # into this to perform a special action before the application
47
+ # terminates. Saving the user's work, session or preferences might be
48
+ # popular here.
49
+ #
50
+ # @example
51
+ # Vedeu.trigger(:_exit_)
52
+ #
53
+ # @return [void]
54
+ def cleanup!
55
+ Vedeu.bind(:_cleanup_) do
56
+ Vedeu.trigger(:_drb_stop_)
57
+ Vedeu.trigger(:cleanup)
58
+ end
59
+ end
60
+
61
+ # Clears the whole terminal space, or the named interface area to be
62
+ # cleared if given.
63
+ #
64
+ # @example
65
+ # Vedeu.trigger(:_clear_)
66
+ # Vedeu.clear_by_name(name)
67
+ #
68
+ # @return [void]
69
+ def clear!
70
+ Vedeu.bind(:_clear_) do |name|
71
+ if name
72
+ Vedeu::Clear::NamedInterface.render(name)
73
+
74
+ else
75
+ Vedeu::Terminal.clear
76
+
77
+ end
78
+ end
79
+ end
80
+
81
+ # Clears the spaces occupied by the interfaces belonging to the named
82
+ # group.
83
+ #
84
+ # @example
85
+ # Vedeu.trigger(:_clear_group_, name)
86
+ # Vedeu.clear_by_group(name)
87
+ #
88
+ # @return [void]
89
+ def clear_group!
90
+ Vedeu.bind(:_clear_group_) do |name|
91
+ Vedeu::Clear::NamedGroup.render(name)
92
+ end
93
+ end
94
+
95
+ # Will cause the triggering of the `:command` event; which you should
96
+ # define to 'do things'
97
+ #
98
+ # @example
99
+ # Vedeu.trigger(:_command_, command)
100
+ #
101
+ # @return [void]
102
+ def command!
103
+ Vedeu.bind(:_command_) { |command| Vedeu.trigger(:command, command) }
104
+ end
105
+
106
+ # When triggered, Vedeu will trigger a `:cleanup` event which you can
107
+ # define (to save files, etc) and attempt to exit.
108
+ #
109
+ # @example
110
+ # Vedeu.trigger(:_exit_)
111
+ # Vedeu.exit
112
+ #
113
+ # @return [void]
114
+ def exit!
115
+ Vedeu.bind(:_exit_) { Vedeu::Application.stop }
116
+ end
117
+
118
+ # When triggered with an interface name will focus that interface and
119
+ # restore the cursor position and visibility.
120
+ #
121
+ # @example
122
+ # Vedeu.trigger(:_focus_by_name_, name)
123
+ #
124
+ # @return [void]
125
+ def focus_by_name!
126
+ Vedeu.bind(:_focus_by_name_) { |name| Vedeu.focus_by_name(name) }
127
+ end
128
+
129
+ # When triggered will focus the next interface and restore the cursor
130
+ # position and visibility.
131
+ #
132
+ # @example
133
+ # Vedeu.trigger(:_focus_next_)
134
+ #
135
+ # @return [void]
136
+ def focus_next!
137
+ Vedeu.bind(:_focus_next_) { Vedeu.focus_next }
138
+ end
139
+
140
+ # When triggered will focus the previous interface and restore the cursor
141
+ # position and visibility.
142
+ #
143
+ # @example
144
+ # Vedeu.trigger(:_focus_prev_)
145
+ #
146
+ # @return [void]
147
+ def focus_prev!
148
+ Vedeu.bind(:_focus_prev_) { Vedeu.focus_previous }
149
+ end
150
+
151
+ # Vedeu triggers this event when it is ready to enter the main loop.
152
+ # Client applications can listen for this event and perform some
153
+ # action(s), like render the first screen, interface or make a sound.
154
+ # When Vedeu triggers this event, the :_refresh_ event is also triggered
155
+ # automatically.
156
+ #
157
+ # @return [void]
158
+ def initialize!
159
+ Vedeu.bind(:_initialize_) { Vedeu.trigger(:_refresh_) }
160
+ end
161
+
162
+ # Will cause the triggering of the `:key` event; which you should define
163
+ # to 'do things'. If the `escape` key is pressed, then `key` is triggered
164
+ # with the argument `:escape`, also an internal event `_mode_switch_` is
165
+ # triggered. Vedeu recognises most key presses and some 'extended'
166
+ # keypress (eg. Ctrl+J), a list of supported keypresses can be found here:
167
+ # {Vedeu::Input#specials} and {Vedeu::Input#f_keys}.
168
+ #
169
+ # @example
170
+ # Vedeu.trigger(:_keypress_, key)
171
+ #
172
+ # @return [void]
173
+ def keypress!
174
+ Vedeu.bind(:_keypress_) { |key| Vedeu.keypress(key) }
175
+ end
176
+
177
+ # When triggered with a message will cause Vedeu to log the message if
178
+ # logging is enabled in the configuration.
179
+ #
180
+ # @example
181
+ # Vedeu.trigger(:_log_, message)
182
+ #
183
+ # @return [void]
184
+ def log!
185
+ Vedeu.bind(:_log_) { |msg| Vedeu.log(type: :debug, message: msg) }
186
+ end
187
+
188
+ # Maximising an interface.
189
+ #
190
+ # @example
191
+ # Vedeu.trigger(:_maximise_, name)
192
+ #
193
+ # @return [void]
194
+ # @see Vedeu::Geometry#maximise
195
+ def maximise!
196
+ Vedeu.bind(:_maximise_) do |name|
197
+ Vedeu.geometries.by_name(name).maximise
198
+ end
199
+ end
200
+
201
+ # When triggered (after the user presses `escape`), Vedeu switches from a
202
+ # "raw mode" terminal to a "cooked mode" terminal. The idea here being
203
+ # that the raw mode is for single keypress actions, whilst cooked mode
204
+ # allows the user to enter more elaborate commands- such as commands with
205
+ # arguments.
206
+ #
207
+ # @example
208
+ # Vedeu.trigger(:_mode_switch_)
209
+ #
210
+ # @return [void]
211
+ def mode_switch!
212
+ Vedeu.bind(:_mode_switch_) { fail ModeSwitch }
213
+ end
214
+
215
+ # Will cause the named interface to refresh, or if a name is not given,
216
+ # will refresh all interfaces.
217
+ #
218
+ # @note: Hidden interfaces will be still refreshed in memory but not
219
+ # shown.
220
+ #
221
+ # @example
222
+ # Vedeu.trigger(:_refresh_)
223
+ # Vedeu.trigger(:_refresh_, name)
224
+ #
225
+ # @return [void]
226
+ def refresh!
227
+ Vedeu.bind(:_refresh_) do |name|
228
+ name ? Vedeu::Refresh.by_name(name) : Vedeu::Refresh.all
229
+ end
230
+ end
231
+
232
+ # Will cause the named cursor to refresh, or the cursor of the interface
233
+ # which is currently in focus.
234
+ #
235
+ # @example
236
+ # Vedeu.trigger(:_refresh_cursor_, name)
237
+ #
238
+ # @return [void]
239
+ def refresh_cursor!
240
+ Vedeu.bind(:_refresh_cursor_) do |name|
241
+ Vedeu::RefreshCursor.render(name)
242
+ end
243
+ end
244
+
245
+ # Will cause all interfaces in the named group to refresh.
246
+ #
247
+ # @example
248
+ # Vedeu.trigger(:_refresh_group_, name)
249
+ #
250
+ # @return [void]
251
+ def refresh_group!
252
+ Vedeu.bind(:_refresh_group_) { |name| Vedeu::Refresh.by_group(name) }
253
+ end
254
+
255
+ # When triggered will cause Vedeu to trigger the `:_clear_` and
256
+ # `:_refresh_` events. Please see those events for their behaviour.
257
+ #
258
+ # @example
259
+ # Vedeu.trigger(:_resize_)
260
+ #
261
+ # @return [void]
262
+ def resize!
263
+ Vedeu.bind(:_resize_, delay: 0.15) { Vedeu.resize }
264
+ end
265
+
266
+ # Unmaximising an interface.
267
+ #
268
+ # @example
269
+ # Vedeu.trigger(:_unmaximise_, name)
270
+ #
271
+ # @return [void]
272
+ # @see Vedeu::Geometry#unmaximise
273
+ def unmaximise!
274
+ Vedeu.bind(:_unmaximise_) do |name|
275
+ Vedeu.geometries.by_name(name).unmaximise
276
+ end
277
+ end
278
+
279
+ end # System
280
+
281
+ end # Bindings
282
+ # :nocov:
283
+
284
+ end # Vedeu
@@ -5,25 +5,129 @@ module Vedeu
5
5
  # System events relating to the visibility of cursors or interfaces.
6
6
  #
7
7
  # @api public
8
- # {include:file:docs/events/visibility.md}
9
8
  # :nocov:
10
9
  module Visibility
11
10
 
12
- Vedeu.bind(:_hide_cursor_) { |name| Vedeu::Visibility.hide_cursor(name) }
13
- Vedeu.bind(:_cursor_hide_) { |name| Vedeu.trigger(:_hide_cursor_, name) }
14
- Vedeu.bind(:_show_cursor_) { |name| Vedeu::Visibility.show_cursor(name) }
15
- Vedeu.bind(:_cursor_show_) { |name| Vedeu.trigger(:_show_cursor_, name) }
11
+ extend self
16
12
 
17
- Vedeu.bind(:_hide_group_) { |name| Vedeu.trigger(:_clear_group_, name) }
18
- Vedeu.bind(:_show_group_) do |name|
19
- Vedeu.trigger(:_clear_)
20
- Vedeu.trigger(:_refresh_group_, name)
13
+ # Setup events relating to visibility. This method is called by Vedeu.
14
+ #
15
+ # @return [void]
16
+ def setup!
17
+ hide_cursor!
18
+ hide_group!
19
+ hide_interface!
20
+ show_cursor!
21
+ show_group!
22
+ show_interface!
23
+ toggle_interface!
21
24
  end
22
25
 
23
- Vedeu.bind(:_hide_interface_) { |name| Vedeu.buffers.by_name(name).hide }
24
- Vedeu.bind(:_show_interface_) { |name| Vedeu.buffers.by_name(name).show }
25
- Vedeu.bind(:_toggle_interface_) do |name|
26
- Vedeu.buffers.by_name(name).toggle
26
+ private
27
+
28
+ # Hide the cursor of the named interface or if a name is not given, the
29
+ # interface currently in focus.
30
+ #
31
+ # @example
32
+ # Vedeu.trigger(:_hide_cursor_, name)
33
+ # Vedeu.trigger(:_cursor_hide_, name)
34
+ # Vedeu.hide_cursor(name)
35
+ #
36
+ # @return [void]
37
+ def hide_cursor!
38
+ Vedeu.bind(:_hide_cursor_) do |name|
39
+ Vedeu::Visibility.hide_cursor(name)
40
+ end
41
+ Vedeu.bind(:_cursor_hide_) do |name|
42
+ Vedeu.trigger(:_hide_cursor_, name)
43
+ end
44
+ end
45
+
46
+ # Will hide all of the interfaces belonging to the named group. Useful for
47
+ # hiding part of that which is currently displaying in the terminal.
48
+
49
+ # This may be rarely used, since the action of showing a group will
50
+ # effectively clear the terminal and show the new group.
51
+ #
52
+ # @example
53
+ # Vedeu.trigger(:_hide_group_, group_name)
54
+ #
55
+ # @return [void]
56
+ def hide_group!
57
+ Vedeu.bind(:_hide_group_) do |name|
58
+ Vedeu.trigger(:_clear_group_, name)
59
+ end
60
+ end
61
+
62
+ # Hiding an interface.
63
+ #
64
+ # @example
65
+ # Vedeu.trigger(:_hide_interface_, name)
66
+ #
67
+ # @return [void]
68
+ # @see Vedeu::Buffer#hide
69
+ def hide_interface!
70
+ Vedeu.bind(:_hide_interface_) do |name|
71
+ Vedeu.buffers.by_name(name).hide
72
+ end
73
+ end
74
+
75
+ # Show the cursor of the named interface or if a name is not given, the
76
+ # interface currently in focus.
77
+ #
78
+ # @example
79
+ # Vedeu.trigger(:_show_cursor_, name)
80
+ # Vedeu.trigger(:_cursor_show_, name)
81
+ # Vedeu.show_cursor(name)
82
+ #
83
+ # @return [void]
84
+ def show_cursor!
85
+ Vedeu.bind(:_show_cursor_) do |name|
86
+ Vedeu::Visibility.show_cursor(name)
87
+ end
88
+ Vedeu.bind(:_cursor_show_) do |name|
89
+ Vedeu.trigger(:_show_cursor_, name)
90
+ end
91
+ end
92
+
93
+ # Will clear the terminal and then show all of the interfaces belonging to
94
+ # the named group.
95
+ #
96
+ # @example
97
+ # Vedeu.trigger(:_show_group_, group_name)
98
+ #
99
+ # @return [void]
100
+ def show_group!
101
+ Vedeu.bind(:_show_group_) do |name|
102
+ Vedeu.trigger(:_clear_)
103
+ Vedeu.trigger(:_refresh_group_, name)
104
+ end
105
+ end
106
+
107
+ # Showing an interface.
108
+ #
109
+ # @example
110
+ # Vedeu.trigger(:_show_interface_, name)
111
+ #
112
+ # @return [void]
113
+ # @see Vedeu::Buffer#show
114
+ def show_interface!
115
+ Vedeu.bind(:_show_interface_) do |name|
116
+ Vedeu.buffers.by_name(name).show
117
+ end
118
+ end
119
+
120
+ # Toggling an interface.
121
+ #
122
+ # @example
123
+ # Vedeu.trigger(:_toggle_interface_, name)
124
+ #
125
+ # @return [void]
126
+ # @see Vedeu::Buffer#toggle
127
+ def toggle_interface!
128
+ Vedeu.bind(:_toggle_interface_) do |name|
129
+ Vedeu.buffers.by_name(name).toggle
130
+ end
27
131
  end
28
132
 
29
133
  end # Visibility
data/lib/vedeu/dsl/all.rb CHANGED
@@ -31,7 +31,8 @@ module Vedeu
31
31
  # @param block [Proc] The optional block provided to the method.
32
32
  # @return [void]
33
33
  def method_missing(method, *args, &block)
34
- Vedeu.log(type: :debug, message: "!!!method_missing '#{method}'")
34
+ Vedeu.log(type: :debug,
35
+ message: "!!!method_missing '#{method}' (#{client.inspect})")
35
36
 
36
37
  client.send(method, *args, &block) if client
37
38
  end
@@ -43,6 +43,7 @@ module Vedeu
43
43
 
44
44
  private
45
45
 
46
+ # @return [String]
46
47
  def compress
47
48
  out = ''
48
49
  Array(output).flatten.each do |char|
@@ -54,6 +55,7 @@ module Vedeu
54
55
  out
55
56
  end
56
57
 
58
+ # @return [String]
57
59
  def uncompress
58
60
  out = ''
59
61
  Array(output).flatten.each do |char|