vedeu 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.yardopts +1 -0
- data/README.md +1 -2
- data/Rakefile +5 -5
- data/bin/vedeu +8 -4
- data/docs/api.md +3 -1
- data/docs/events.md +43 -29
- data/docs/getting_started.md +2 -0
- data/examples/cursor_app/cursor_app.rb +85 -0
- data/examples/lines_app/lines_app.rb +60 -0
- data/lib/vedeu.rb +9 -3
- data/lib/vedeu/api/api.rb +28 -7
- data/lib/vedeu/api/composition.rb +2 -0
- data/lib/vedeu/api/helpers.rb +2 -0
- data/lib/vedeu/api/interface.rb +2 -20
- data/lib/vedeu/api/keymap.rb +2 -0
- data/lib/vedeu/api/line.rb +2 -0
- data/lib/vedeu/api/menu.rb +3 -1
- data/lib/vedeu/api/stream.rb +25 -2
- data/lib/vedeu/application.rb +4 -4
- data/lib/vedeu/configuration/api.rb +327 -0
- data/lib/vedeu/configuration/cli.rb +110 -0
- data/lib/vedeu/{configuration.rb → configuration/configuration.rb} +49 -99
- data/lib/vedeu/launcher.rb +0 -1
- data/lib/vedeu/models/attributes/colour_translator.rb +2 -2
- data/lib/vedeu/models/colour.rb +0 -1
- data/lib/vedeu/models/composition.rb +2 -8
- data/lib/vedeu/models/cursor.rb +261 -0
- data/lib/vedeu/models/geometry.rb +11 -19
- data/lib/vedeu/models/interface.rb +2 -12
- data/lib/vedeu/models/keymap.rb +2 -0
- data/lib/vedeu/models/line.rb +2 -0
- data/lib/vedeu/models/stream.rb +2 -0
- data/lib/vedeu/models/style.rb +2 -0
- data/lib/vedeu/output/clear.rb +0 -1
- data/lib/vedeu/output/compositor.rb +0 -1
- data/lib/vedeu/output/refresh.rb +3 -0
- data/lib/vedeu/output/render.rb +12 -6
- data/lib/vedeu/output/view.rb +1 -0
- data/lib/vedeu/repositories/cursors.rb +98 -0
- data/lib/vedeu/repositories/events.rb +0 -1
- data/lib/vedeu/repositories/focus.rb +18 -0
- data/lib/vedeu/repositories/menus.rb +4 -4
- data/lib/vedeu/support/common.rb +2 -1
- data/lib/vedeu/support/event.rb +1 -10
- data/lib/vedeu/support/grid.rb +1 -2
- data/lib/vedeu/{repositories → support}/keymap_validator.rb +5 -4
- data/lib/vedeu/support/log.rb +3 -0
- data/lib/vedeu/support/menu.rb +4 -1
- data/lib/vedeu/support/registrar.rb +2 -1
- data/test/integration/defining_interfaces_test.rb +0 -1
- data/test/integration/views/basic_view_test.rb +741 -739
- data/test/lib/vedeu/api/api_test.rb +14 -3
- data/test/lib/vedeu/api/helpers_test.rb +3 -3
- data/test/lib/vedeu/api/interface_test.rb +17 -70
- data/test/lib/vedeu/api/keymap_test.rb +2 -0
- data/test/lib/vedeu/api/line_test.rb +4 -4
- data/test/lib/vedeu/api/menu_test.rb +6 -5
- data/test/lib/vedeu/api/stream_test.rb +18 -0
- data/test/lib/vedeu/configuration/api_test.rb +248 -0
- data/test/lib/vedeu/configuration/cli_test.rb +88 -0
- data/test/lib/vedeu/configuration/configuration_test.rb +67 -0
- data/test/lib/vedeu/input/input_test.rb +2 -2
- data/test/lib/vedeu/models/attributes/background_test.rb +3 -3
- data/test/lib/vedeu/models/attributes/foreground_test.rb +3 -3
- data/test/lib/vedeu/models/composition_test.rb +0 -222
- data/test/lib/vedeu/models/cursor_test.rb +164 -0
- data/test/lib/vedeu/models/interface_test.rb +0 -11
- data/test/lib/vedeu/output/compositor_test.rb +2 -4
- data/test/lib/vedeu/output/render_test.rb +4 -41
- data/test/lib/vedeu/repositories/cursors_test.rb +13 -0
- data/test/lib/vedeu/repositories/focus_test.rb +14 -4
- data/test/lib/vedeu/repositories/menus_test.rb +36 -29
- data/test/lib/vedeu/{repositories → support}/keymap_validator_test.rb +0 -0
- data/test/lib/vedeu/support/menu_test.rb +3 -3
- data/test/lib/vedeu/support/registrar_test.rb +6 -0
- data/test/lib/vedeu/support/terminal_test.rb +2 -2
- data/test/test_helper.rb +1 -1
- data/vedeu.gemspec +1 -1
- metadata +23 -14
- data/elements.txt +0 -118
- data/lib/vedeu/support/cursor.rb +0 -96
- data/test/lib/vedeu/configuration_test.rb +0 -154
- data/test/lib/vedeu/support/cursor_test.rb +0 -79
- data/test/support/model_test_data.json +0 -437
data/lib/vedeu/api/api.rb
CHANGED
@@ -6,6 +6,17 @@ module Vedeu
|
|
6
6
|
# module expose Vedeu's core functionality.
|
7
7
|
module API
|
8
8
|
|
9
|
+
# Configure Vedeu using a simple configuration DSL.
|
10
|
+
#
|
11
|
+
# @api public
|
12
|
+
# @see Vedeu::Configuration
|
13
|
+
# @return []
|
14
|
+
def configure(&block)
|
15
|
+
fail InvalidSyntax, '`configure` requires a block.' unless block_given?
|
16
|
+
|
17
|
+
Vedeu::Configuration.configure(&block)
|
18
|
+
end
|
19
|
+
|
9
20
|
# Returns information about various registered subsystems when used with
|
10
21
|
# a defined method within {Vedeu::API::Defined}.
|
11
22
|
#
|
@@ -74,17 +85,22 @@ module Vedeu
|
|
74
85
|
@events ||= Vedeu::Events.new do
|
75
86
|
event(:_clear_) { Terminal.clear_screen }
|
76
87
|
event(:_exit_) { Vedeu::Application.stop }
|
77
|
-
event(:_focus_by_name_) { |name| Vedeu::Focus.by_name(name) }
|
78
|
-
event(:_focus_next_) { Vedeu::Focus.next_item }
|
79
|
-
event(:_focus_prev_) { Vedeu::Focus.prev_item }
|
80
88
|
event(:_keypress_) { |key| Vedeu.keypress(key) }
|
81
89
|
event(:_log_) { |msg| Vedeu.log(msg) }
|
82
90
|
event(:_mode_switch_) { fail ModeSwitch }
|
83
|
-
event(:_refresh_) { Vedeu::Refresh.all }
|
84
91
|
event(:_resize_, { delay: 0.25 }) { Vedeu.resize }
|
85
92
|
end
|
86
93
|
end
|
87
94
|
|
95
|
+
# Used after defining an interface or interfaces to set the initially
|
96
|
+
# focussed interface.
|
97
|
+
#
|
98
|
+
# @param name [String] The interface to focus; must be defined.
|
99
|
+
# @return []
|
100
|
+
def focus(name)
|
101
|
+
Vedeu.trigger(:_focus_by_name, name)
|
102
|
+
end
|
103
|
+
|
88
104
|
# Find out how many lines the current terminal is able to display.
|
89
105
|
#
|
90
106
|
# @api public
|
@@ -100,11 +116,12 @@ module Vedeu
|
|
100
116
|
# command. This provides the means for you to define your application's
|
101
117
|
# views without their content.
|
102
118
|
#
|
119
|
+
# @todo More documentation required.
|
103
120
|
# @api public
|
104
121
|
# @param name [String] The name of the interface. Used to reference the
|
105
122
|
# interface throughout your application's execution lifetime.
|
106
123
|
# @param block [Proc] A set of attributes which define the features of the
|
107
|
-
# interface.
|
124
|
+
# interface.
|
108
125
|
#
|
109
126
|
# @example
|
110
127
|
# Vedeu.interface 'my_interface' do
|
@@ -234,6 +251,8 @@ module Vedeu
|
|
234
251
|
|
235
252
|
trigger(:_refresh_)
|
236
253
|
|
254
|
+
trigger(:_cursor_refresh_)
|
255
|
+
|
237
256
|
true
|
238
257
|
end
|
239
258
|
# :nocov:
|
@@ -264,8 +283,9 @@ module Vedeu
|
|
264
283
|
Vedeu.events.unevent(name)
|
265
284
|
end
|
266
285
|
|
267
|
-
# Use attributes of another interface whilst defining one.
|
286
|
+
# Use attributes of another interface whilst defining one.
|
268
287
|
#
|
288
|
+
# @todo More documentation required.
|
269
289
|
# @api public
|
270
290
|
# @param name [String] The name of the interface you wish to use. Typically
|
271
291
|
# used when defining interfaces to share geometry.
|
@@ -281,8 +301,9 @@ module Vedeu
|
|
281
301
|
Vedeu::Interface.new(Vedeu::Interfaces.find(name))
|
282
302
|
end
|
283
303
|
|
284
|
-
# Define a view (content) for an interface.
|
304
|
+
# Define a view (content) for an interface.
|
285
305
|
#
|
306
|
+
# @todo More documentation required.
|
286
307
|
# @api public
|
287
308
|
# @param name [String] The name of the interface you are targetting for this
|
288
309
|
# view.
|
data/lib/vedeu/api/helpers.rb
CHANGED
data/lib/vedeu/api/interface.rb
CHANGED
@@ -2,6 +2,8 @@ module Vedeu
|
|
2
2
|
module API
|
3
3
|
|
4
4
|
# Provides methods to be used to define interfaces or views.
|
5
|
+
#
|
6
|
+
# @api public
|
5
7
|
class Interface < Vedeu::Interface
|
6
8
|
|
7
9
|
include Helpers
|
@@ -26,26 +28,6 @@ module Vedeu
|
|
26
28
|
attributes[:geometry][:centred] = value
|
27
29
|
end
|
28
30
|
|
29
|
-
# Define the cursor visibility for an interface. A `true` value will show
|
30
|
-
# the cursor, whilst `false` will hide it.
|
31
|
-
#
|
32
|
-
# @api public
|
33
|
-
# @param value [Boolean]
|
34
|
-
#
|
35
|
-
# @example
|
36
|
-
# interface 'my_interface' do
|
37
|
-
# cursor true
|
38
|
-
# ...
|
39
|
-
#
|
40
|
-
# @return [API::Interface]
|
41
|
-
def cursor(value)
|
42
|
-
unless value.is_a?(TrueClass) || value.is_a?(FalseClass)
|
43
|
-
fail InvalidSyntax, 'Argument must be `true` or `false` for cursor.'
|
44
|
-
end
|
45
|
-
|
46
|
-
attributes[:cursor] = value
|
47
|
-
end
|
48
|
-
|
49
31
|
# To maintain performance interfaces can be delayed from refreshing too
|
50
32
|
# often, the reduces artefacts particularly when resizing the terminal
|
51
33
|
# screen.
|
data/lib/vedeu/api/keymap.rb
CHANGED
data/lib/vedeu/api/line.rb
CHANGED
data/lib/vedeu/api/menu.rb
CHANGED
@@ -3,6 +3,8 @@ module Vedeu
|
|
3
3
|
|
4
4
|
# Provides the mechanism to create menus within client applications and use
|
5
5
|
# events to drive them.
|
6
|
+
#
|
7
|
+
# @api public
|
6
8
|
class Menu
|
7
9
|
|
8
10
|
include Common
|
@@ -60,7 +62,7 @@ module Vedeu
|
|
60
62
|
#
|
61
63
|
# @return [Vedeu::Menu]
|
62
64
|
def items(collection = [])
|
63
|
-
attributes[:items] =
|
65
|
+
attributes[:items] = collection
|
64
66
|
end
|
65
67
|
|
66
68
|
# The name of the menu. Used to reference the menu throughout your
|
data/lib/vedeu/api/stream.rb
CHANGED
@@ -2,12 +2,14 @@ module Vedeu
|
|
2
2
|
module API
|
3
3
|
|
4
4
|
# Provides methods to be used to define views.
|
5
|
+
#
|
6
|
+
# @api public
|
5
7
|
class Stream < Vedeu::Stream
|
6
8
|
|
7
9
|
include Helpers
|
8
10
|
|
9
11
|
# Specify the alignment of the stream within the line. Useful in
|
10
|
-
# combination with #width to provide simple formatting effects.
|
12
|
+
# combination with {#width} to provide simple formatting effects.
|
11
13
|
#
|
12
14
|
# @api public
|
13
15
|
# @param value [Symbol] `:left`, `:centre` and `right` are valid values
|
@@ -23,13 +25,34 @@ module Vedeu
|
|
23
25
|
# @return [Symbol]
|
24
26
|
def align(value)
|
25
27
|
unless [:left, :right, :centre].include?(value.to_sym)
|
26
|
-
fail InvalidSyntax, '`align` requires a value of
|
28
|
+
fail InvalidSyntax, '`align` requires a value of `left`, `right` ' \
|
27
29
|
'or `centre`.'
|
28
30
|
end
|
29
31
|
|
30
32
|
attributes[:align] = value.to_sym
|
31
33
|
end
|
32
34
|
|
35
|
+
# Syntactic sugar used with {#align} to left align content.
|
36
|
+
#
|
37
|
+
# @return [Symbol]
|
38
|
+
def left
|
39
|
+
:left
|
40
|
+
end
|
41
|
+
|
42
|
+
# Syntactic sugar used with {#align} to right align content.
|
43
|
+
#
|
44
|
+
# @return [Symbol]
|
45
|
+
def right
|
46
|
+
:right
|
47
|
+
end
|
48
|
+
|
49
|
+
# Syntactic sugar used with {#align} to centre align content.
|
50
|
+
#
|
51
|
+
# @return [Symbol]
|
52
|
+
def centre
|
53
|
+
:centre
|
54
|
+
end
|
55
|
+
|
33
56
|
# Add textual data to the stream via this method.
|
34
57
|
#
|
35
58
|
# @api public
|
data/lib/vedeu/application.rb
CHANGED
@@ -2,7 +2,7 @@ module Vedeu
|
|
2
2
|
|
3
3
|
# Orchestrates the running of the main application loop.
|
4
4
|
#
|
5
|
-
# @api
|
5
|
+
# @api private
|
6
6
|
class Application
|
7
7
|
# :nocov:
|
8
8
|
class << self
|
@@ -75,8 +75,8 @@ module Vedeu
|
|
75
75
|
# For an interactive application we capture input, (usually from the user),
|
76
76
|
# and continue the main loop.
|
77
77
|
#
|
78
|
-
#
|
79
|
-
#
|
78
|
+
# @todo It appears for non-interactive applications, we do nothing. Must
|
79
|
+
# investigate.
|
80
80
|
#
|
81
81
|
# @api private
|
82
82
|
# @return []
|
@@ -85,7 +85,7 @@ module Vedeu
|
|
85
85
|
Input.capture
|
86
86
|
|
87
87
|
else
|
88
|
-
|
88
|
+
|
89
89
|
|
90
90
|
end
|
91
91
|
end
|
@@ -0,0 +1,327 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
module Configuration
|
4
|
+
|
5
|
+
# The Configuration::API class parses client application configuration into
|
6
|
+
# options used by Vedeu to affect certain behaviours.
|
7
|
+
#
|
8
|
+
# @api private
|
9
|
+
class API
|
10
|
+
|
11
|
+
include Vedeu::Common
|
12
|
+
|
13
|
+
# Configure Vedeu via a simple configuration API DSL. Options set here
|
14
|
+
# override the default Vedeu configuration set in
|
15
|
+
# {Vedeu::Configuration#defaults}.
|
16
|
+
#
|
17
|
+
# @example
|
18
|
+
# Vedeu.configure do
|
19
|
+
# ...
|
20
|
+
#
|
21
|
+
# @param block [Proc]
|
22
|
+
# @return [Hash]
|
23
|
+
def self.configure(&block)
|
24
|
+
new(&block).configuration
|
25
|
+
end
|
26
|
+
|
27
|
+
# Returns an instance of Configuration::API.
|
28
|
+
#
|
29
|
+
# @param block [Proc]
|
30
|
+
# @return [Configuration::API]
|
31
|
+
def initialize(&block)
|
32
|
+
instance_eval(&block) if block_given?
|
33
|
+
end
|
34
|
+
|
35
|
+
# Returns the configuration options set up by the API DSL.
|
36
|
+
#
|
37
|
+
# @return [Hash]
|
38
|
+
def configuration
|
39
|
+
if system_key_options.any?
|
40
|
+
options.merge({ system_keys: system_key_options })
|
41
|
+
|
42
|
+
else
|
43
|
+
options
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Sets boolean to allow user input. The default behaviour of Vedeu is to
|
49
|
+
# be interactive.
|
50
|
+
#
|
51
|
+
# @example
|
52
|
+
# Vedeu.configure do
|
53
|
+
# interactive!
|
54
|
+
# ...
|
55
|
+
#
|
56
|
+
# Vedeu.configure do
|
57
|
+
# interactive false
|
58
|
+
# ...
|
59
|
+
#
|
60
|
+
# @param value [Boolean]
|
61
|
+
# @return [Boolean]
|
62
|
+
def interactive!(value = true)
|
63
|
+
options[:interactive] = value
|
64
|
+
end
|
65
|
+
alias_method :interactive, :interactive!
|
66
|
+
|
67
|
+
# Sets boolean to prevent user intervention. This is the same as setting
|
68
|
+
# {#interactive!} to false.
|
69
|
+
#
|
70
|
+
# @example
|
71
|
+
# Vedeu.configure do
|
72
|
+
# standalone!
|
73
|
+
# ...
|
74
|
+
#
|
75
|
+
# @param value [Boolean]
|
76
|
+
# @return [Boolean]
|
77
|
+
def standalone!(value = true)
|
78
|
+
options[:interactive] = !value
|
79
|
+
end
|
80
|
+
alias_method :standalone, :standalone!
|
81
|
+
|
82
|
+
# Sets boolean to run the Vedeu main application loop once. In effect,
|
83
|
+
# using `run_once!` or setting `run_once` to true will allow Vedeu to
|
84
|
+
# initialize, run any client application code, cleanup, then terminate.
|
85
|
+
#
|
86
|
+
# @example
|
87
|
+
# Vedeu.configure do
|
88
|
+
# run_once!
|
89
|
+
# ...
|
90
|
+
#
|
91
|
+
# @param value [Boolean]
|
92
|
+
# @return [Boolean]
|
93
|
+
def run_once!(value = true)
|
94
|
+
options[:once] = value
|
95
|
+
end
|
96
|
+
alias_method :run_once, :run_once!
|
97
|
+
|
98
|
+
# Sets the terminal mode to `cooked`. Default terminal mode is `raw`.
|
99
|
+
#
|
100
|
+
# @example
|
101
|
+
# Vedeu.configure do
|
102
|
+
# cooked!
|
103
|
+
# ...
|
104
|
+
#
|
105
|
+
# @return [Boolean]
|
106
|
+
def cooked!
|
107
|
+
options[:terminal_mode] = :cooked
|
108
|
+
end
|
109
|
+
alias_method :cooked, :cooked!
|
110
|
+
|
111
|
+
# Sets the terminal mode to `raw`. Default terminal mode is `raw`.
|
112
|
+
#
|
113
|
+
# @example
|
114
|
+
# Vedeu.configure do
|
115
|
+
# raw!
|
116
|
+
# ...
|
117
|
+
#
|
118
|
+
# @return [Boolean]
|
119
|
+
def raw!
|
120
|
+
options[:terminal_mode] = :raw
|
121
|
+
end
|
122
|
+
alias_method :raw, :raw!
|
123
|
+
|
124
|
+
# Sets boolean to enable/disable debugging. Vedeu's default setting is
|
125
|
+
# for debugging to be disabled. Using `debug!` or setting `debug` to true
|
126
|
+
# will enable debugging. If `trace!` is used, or `trace` is set to true,
|
127
|
+
# debugging will be enabled, overriding any setting here.
|
128
|
+
#
|
129
|
+
# @example
|
130
|
+
# Vedeu.configure do
|
131
|
+
# debug!
|
132
|
+
# ...
|
133
|
+
#
|
134
|
+
# Vedeu.configure do
|
135
|
+
# debug false
|
136
|
+
# ...
|
137
|
+
#
|
138
|
+
# @param value [Boolean]
|
139
|
+
# @return [Boolean]
|
140
|
+
def debug!(value = true)
|
141
|
+
if options.key?(:trace) && options[:trace] != false
|
142
|
+
options[:debug] = true
|
143
|
+
|
144
|
+
else
|
145
|
+
options[:debug] = value
|
146
|
+
|
147
|
+
end
|
148
|
+
end
|
149
|
+
alias_method :debug, :debug!
|
150
|
+
|
151
|
+
# Sets boolean to enable/disable tracing. Vedeu's default setting is for
|
152
|
+
# tracing to be disabled. Using `trace!` or setting `trace` to true will
|
153
|
+
# enable tracing and debugging.
|
154
|
+
#
|
155
|
+
# @example
|
156
|
+
# Vedeu.configure do
|
157
|
+
# trace!
|
158
|
+
# ...
|
159
|
+
#
|
160
|
+
# Vedeu.configure do
|
161
|
+
# trace false
|
162
|
+
# ...
|
163
|
+
#
|
164
|
+
# @param value [Boolean]
|
165
|
+
# @return [Boolean]
|
166
|
+
def trace!(value = true)
|
167
|
+
options[:debug] = true if value === true
|
168
|
+
|
169
|
+
options[:trace] = value
|
170
|
+
end
|
171
|
+
alias_method :trace, :trace!
|
172
|
+
|
173
|
+
# Sets the colour mode of the terminal.
|
174
|
+
#
|
175
|
+
# @example
|
176
|
+
# Vedeu.configure do
|
177
|
+
# colour_mode 256
|
178
|
+
# ...
|
179
|
+
#
|
180
|
+
# @param value [Fixnum]
|
181
|
+
# @return [Boolean]
|
182
|
+
def colour_mode(value = nil)
|
183
|
+
fail InvalidSyntax, '`colour_mode` must be `8`, `16`, `256`, ' \
|
184
|
+
'`16777216`.' unless valid_colour_mode?(value)
|
185
|
+
|
186
|
+
options[:colour_mode] = value
|
187
|
+
end
|
188
|
+
|
189
|
+
# Sets the key used to exit the client application. The default is `q`.
|
190
|
+
#
|
191
|
+
# @example
|
192
|
+
# Vedeu.configure do
|
193
|
+
# exit_key 'x'
|
194
|
+
# ...
|
195
|
+
#
|
196
|
+
# Vedeu.configure do
|
197
|
+
# exit_key :f4
|
198
|
+
# ...
|
199
|
+
#
|
200
|
+
# @param value [String|Symbol]
|
201
|
+
# @return [String|Symbol]
|
202
|
+
def exit_key(value)
|
203
|
+
return invalid_key('exit_key') unless valid_key?(value)
|
204
|
+
|
205
|
+
system_key_options[:exit] = value
|
206
|
+
end
|
207
|
+
|
208
|
+
# Sets the key used to switch focus to the next defined interface. The
|
209
|
+
# default is `:tab`.
|
210
|
+
#
|
211
|
+
# @example
|
212
|
+
# Vedeu.configure do
|
213
|
+
# focus_next_key 'n'
|
214
|
+
# ...
|
215
|
+
#
|
216
|
+
# Vedeu.configure do
|
217
|
+
# focus_next_key :right
|
218
|
+
# ...
|
219
|
+
#
|
220
|
+
# @param value [String|Symbol]
|
221
|
+
# @return [String|Symbol]
|
222
|
+
def focus_next_key(value)
|
223
|
+
return invalid_key('exit_key') unless valid_key?(value)
|
224
|
+
|
225
|
+
system_key_options[:focus_next] = value
|
226
|
+
end
|
227
|
+
|
228
|
+
# Sets the key used to switch focus to the previous interface. The default
|
229
|
+
# is `:shift_tab`.
|
230
|
+
#
|
231
|
+
# @example
|
232
|
+
# Vedeu.configure do
|
233
|
+
# focus_prev_key 'p'
|
234
|
+
# ...
|
235
|
+
#
|
236
|
+
# Vedeu.configure do
|
237
|
+
# focus_prev_key :left
|
238
|
+
# ...
|
239
|
+
#
|
240
|
+
# @param value [String|Symbol]
|
241
|
+
# @return [String|Symbol]
|
242
|
+
def focus_prev_key(value)
|
243
|
+
return invalid_key('exit_key') unless valid_key?(value)
|
244
|
+
|
245
|
+
system_key_options[:focus_prev] = value
|
246
|
+
end
|
247
|
+
|
248
|
+
# Sets the key used to switch between raw and cooked mode in Vedeu. The
|
249
|
+
# default is `:escape`.
|
250
|
+
#
|
251
|
+
# @example
|
252
|
+
# Vedeu.configure do
|
253
|
+
# mode_switch_key 'm'
|
254
|
+
# ...
|
255
|
+
#
|
256
|
+
# Vedeu.configure do
|
257
|
+
# mode_switch_key :f1
|
258
|
+
# ...
|
259
|
+
#
|
260
|
+
# @param value [String|Symbol]
|
261
|
+
# @return [String|Symbol]
|
262
|
+
def mode_switch_key(value)
|
263
|
+
return invalid_key('exit_key') unless valid_key?(value)
|
264
|
+
|
265
|
+
system_key_options[:mode_switch] = value
|
266
|
+
end
|
267
|
+
|
268
|
+
private
|
269
|
+
|
270
|
+
# Returns the options set via the configuration API DSL or an empty Hash
|
271
|
+
# if none were set.
|
272
|
+
#
|
273
|
+
# @api private
|
274
|
+
# @return [Hash]
|
275
|
+
def options
|
276
|
+
@_options ||= {}
|
277
|
+
end
|
278
|
+
|
279
|
+
# Returns the system keys set via the configuration API DSL or an empty
|
280
|
+
# hash if none were redefined.
|
281
|
+
#
|
282
|
+
# @api private
|
283
|
+
# @return [Hash]
|
284
|
+
def system_key_options
|
285
|
+
@_system_key_options ||= Configuration.default_system_keys
|
286
|
+
end
|
287
|
+
|
288
|
+
# Checks that the value provided to {#colour_mode} is valid.
|
289
|
+
#
|
290
|
+
# @api private
|
291
|
+
# @param value [Fixnum]
|
292
|
+
# @return [Boolean]
|
293
|
+
def valid_colour_mode?(value)
|
294
|
+
value.is_a?(Fixnum) && [8, 16, 256, 16777216].include?(value)
|
295
|
+
end
|
296
|
+
|
297
|
+
# Checks that the value provided to {#exit_key}, {#focus_next_key},
|
298
|
+
# {#focus_prev_key} and {#mode_switch_key} is valid. Must be a Symbol or a
|
299
|
+
# non-empty String.
|
300
|
+
#
|
301
|
+
# @api private
|
302
|
+
# @param value [String|Symbol]
|
303
|
+
# @return [Boolean]
|
304
|
+
def valid_key?(value)
|
305
|
+
return false unless value.is_a?(String) || value.is_a?(Symbol)
|
306
|
+
|
307
|
+
return false if value.is_a?(String) && value.size != 1
|
308
|
+
|
309
|
+
(value.is_a?(String) || value.is_a?(Symbol)) && defined_value?(value)
|
310
|
+
end
|
311
|
+
|
312
|
+
# Raises an exception on behalf of the calling method to report that the
|
313
|
+
# value provided is not valid.
|
314
|
+
#
|
315
|
+
# @api private
|
316
|
+
# @param system_key [String] The calling method wishing to raise an
|
317
|
+
# exception.
|
318
|
+
# @return [InvalidSyntax]
|
319
|
+
def invalid_key(system_key)
|
320
|
+
fail InvalidSyntax, "`#{system_key}` must be a String or a Symbol."
|
321
|
+
end
|
322
|
+
|
323
|
+
end
|
324
|
+
|
325
|
+
end
|
326
|
+
|
327
|
+
end
|