vedeu 0.2.4 → 0.2.5

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.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/LICENSE.txt +5 -0
  4. data/bin/vedeu +3 -1
  5. data/docs/api.md +2 -0
  6. data/examples/cursor_app/cursor_app.rb +22 -7
  7. data/examples/hello_world.rb +42 -0
  8. data/lib/vedeu.rb +5 -5
  9. data/lib/vedeu/api/api.rb +16 -33
  10. data/lib/vedeu/api/helpers.rb +86 -0
  11. data/lib/vedeu/api/interface.rb +60 -17
  12. data/lib/vedeu/api/keymap.rb +5 -0
  13. data/lib/vedeu/api/line.rb +52 -34
  14. data/lib/vedeu/api/menu.rb +1 -1
  15. data/lib/vedeu/api/stream.rb +0 -34
  16. data/lib/vedeu/configuration/api.rb +10 -10
  17. data/lib/vedeu/configuration/cli.rb +1 -1
  18. data/lib/vedeu/launcher.rb +21 -6
  19. data/lib/vedeu/models/background.rb +1 -1
  20. data/lib/vedeu/models/composition.rb +1 -1
  21. data/lib/vedeu/models/cursor.rb +25 -35
  22. data/lib/vedeu/models/foreground.rb +1 -1
  23. data/lib/vedeu/models/geometry.rb +216 -6
  24. data/lib/vedeu/models/interface.rb +14 -16
  25. data/lib/vedeu/models/keymap.rb +38 -6
  26. data/lib/vedeu/models/line.rb +1 -1
  27. data/lib/vedeu/models/stream.rb +1 -1
  28. data/lib/vedeu/output/compositor.rb +1 -1
  29. data/lib/vedeu/output/render.rb +1 -5
  30. data/lib/vedeu/output/viewport.rb +37 -2
  31. data/lib/vedeu/repositories/buffers.rb +21 -27
  32. data/lib/vedeu/repositories/cursors.rb +3 -15
  33. data/lib/vedeu/repositories/focus.rb +2 -6
  34. data/lib/vedeu/repositories/groups.rb +1 -1
  35. data/lib/vedeu/repositories/interfaces.rb +1 -1
  36. data/lib/vedeu/repositories/keymaps.rb +26 -22
  37. data/lib/vedeu/repositories/menus.rb +1 -1
  38. data/lib/vedeu/repositories/offsets.rb +30 -12
  39. data/lib/vedeu/repositories/positional.rb +23 -0
  40. data/lib/vedeu/support/colour_translator.rb +1 -16
  41. data/lib/vedeu/support/esc.rb +23 -28
  42. data/lib/vedeu/support/event.rb +6 -14
  43. data/lib/vedeu/{output → support}/refresh.rb +0 -0
  44. data/lib/vedeu/support/registrar.rb +6 -14
  45. data/lib/vedeu/support/repository.rb +3 -2
  46. data/lib/vedeu/support/terminal.rb +9 -13
  47. data/lib/vedeu/support/trace.rb +2 -3
  48. data/test/integration/cursors_test.rb +9 -0
  49. data/test/integration/views/basic_view_test.rb +19 -0
  50. data/test/lib/vedeu/api/api_test.rb +28 -5
  51. data/test/lib/vedeu/api/composition_test.rb +7 -3
  52. data/test/lib/vedeu/api/defined_test.rb +9 -3
  53. data/test/lib/vedeu/api/helpers_test.rb +39 -5
  54. data/test/lib/vedeu/api/interface_test.rb +88 -8
  55. data/test/lib/vedeu/api/keymap_test.rb +5 -3
  56. data/test/lib/vedeu/api/line_test.rb +9 -3
  57. data/test/lib/vedeu/api/menu_test.rb +11 -7
  58. data/test/lib/vedeu/api/stream_test.rb +9 -31
  59. data/test/lib/vedeu/application_test.rb +25 -2
  60. data/test/lib/vedeu/configuration/api_test.rb +5 -3
  61. data/test/lib/vedeu/configuration/cli_test.rb +5 -3
  62. data/test/lib/vedeu/configuration/configuration_test.rb +5 -2
  63. data/test/lib/vedeu/input/input_test.rb +5 -2
  64. data/test/lib/vedeu/launcher_test.rb +37 -2
  65. data/test/lib/vedeu/models/background_test.rb +6 -2
  66. data/test/lib/vedeu/models/char_test.rb +9 -6
  67. data/test/lib/vedeu/models/colour_test.rb +6 -2
  68. data/test/lib/vedeu/models/composition_test.rb +4 -2
  69. data/test/lib/vedeu/models/cursor_test.rb +27 -16
  70. data/test/lib/vedeu/models/foreground_test.rb +6 -2
  71. data/test/lib/vedeu/models/geometry_test.rb +6 -2
  72. data/test/lib/vedeu/models/interface_test.rb +5 -2
  73. data/test/lib/vedeu/models/keymap_test.rb +6 -4
  74. data/test/lib/vedeu/models/line_test.rb +5 -2
  75. data/test/lib/vedeu/models/offset_test.rb +7 -3
  76. data/test/lib/vedeu/models/stream_test.rb +4 -2
  77. data/test/lib/vedeu/models/style_test.rb +5 -2
  78. data/test/lib/vedeu/output/clear_test.rb +6 -2
  79. data/test/lib/vedeu/output/compositor_test.rb +8 -4
  80. data/test/lib/vedeu/output/render_test.rb +9 -6
  81. data/test/lib/vedeu/output/view_test.rb +7 -3
  82. data/test/lib/vedeu/output/viewport_test.rb +42 -9
  83. data/test/lib/vedeu/repositories/buffers_test.rb +52 -12
  84. data/test/lib/vedeu/repositories/cursors_test.rb +4 -26
  85. data/test/lib/vedeu/repositories/events_test.rb +6 -2
  86. data/test/lib/vedeu/repositories/focus_test.rb +5 -2
  87. data/test/lib/vedeu/repositories/groups_test.rb +5 -2
  88. data/test/lib/vedeu/repositories/interfaces_test.rb +4 -2
  89. data/test/lib/vedeu/repositories/keymaps_test.rb +8 -2
  90. data/test/lib/vedeu/repositories/menus_test.rb +3 -2
  91. data/test/lib/vedeu/repositories/offsets_test.rb +26 -19
  92. data/test/lib/vedeu/repositories/positional_test.rb +50 -0
  93. data/test/lib/vedeu/support/coercions_test.rb +7 -3
  94. data/test/lib/vedeu/support/colour_translator_test.rb +6 -2
  95. data/test/lib/vedeu/support/common_test.rb +5 -3
  96. data/test/lib/vedeu/support/esc_test.rb +6 -2
  97. data/test/lib/vedeu/support/event_test.rb +6 -2
  98. data/test/lib/vedeu/support/grid_test.rb +9 -3
  99. data/test/lib/vedeu/support/keymap_validator_test.rb +5 -2
  100. data/test/lib/vedeu/support/log_test.rb +4 -2
  101. data/test/lib/vedeu/support/menu_test.rb +10 -2
  102. data/test/lib/vedeu/support/position_test.rb +10 -2
  103. data/test/lib/vedeu/support/presentation_test.rb +6 -3
  104. data/test/lib/vedeu/{output → support}/refresh_test.rb +6 -2
  105. data/test/lib/vedeu/support/registrar_test.rb +2 -2
  106. data/test/lib/vedeu/support/repository_test.rb +4 -3
  107. data/test/lib/vedeu/support/terminal_test.rb +6 -2
  108. data/test/lib/vedeu/support/trace_test.rb +17 -2
  109. data/test/lib/vedeu_test.rb +1 -1
  110. data/vedeu.gemspec +2 -2
  111. metadata +13 -13
  112. data/lib/vedeu/output/area.rb +0 -284
  113. data/lib/vedeu/support/move.rb +0 -50
  114. data/test/lib/vedeu/output/area_test.rb +0 -242
  115. data/test/lib/vedeu/support/move_test.rb +0 -35
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5ab3b3e107a170520a384cb15529a6cb087b6aae
4
- data.tar.gz: 96170b0362f0584f7ce527290cf3068bb2fe26bf
3
+ metadata.gz: d92eea450aa078936ad63e48458e87bffc1b94ef
4
+ data.tar.gz: 7b58b5c6c47151c7635971abc608b7951e1cfa77
5
5
  SHA512:
6
- metadata.gz: 08584d6388fbac9ee09e678a22362aaff1028cbd547b3583dad82c67ae8cfb790989066412bc9de4ca0ff800127f7c5fd7a3f36281ee7329c0c04e6eec1ff574
7
- data.tar.gz: 96a95d7eca4e92b3794eb96e3183fb75b908e74ea77aff7f561051ee37aac9ec2dd057e128c27e4acec3815c0c3bf0079cf4c8fc6fe312b59845cf639730a9a5
6
+ metadata.gz: 9363fca14b44becccaa8b29c32185175270e1ae9769d9ec0410db5c71a48cfcb199e3797e79a7bca7b4771743225641aeb44462bfe1d9c7205f3e2e06d215382
7
+ data.tar.gz: da6d294f0a25f2b010972e6cdcee7ec8a3fe8b3cadf21cc28f34d6f602d1ff73e2a7c11aa03df2f3d2d0e2cf478af48812cca6f34e494eebff76fa2d7029c2cd
data/.gitignore CHANGED
@@ -19,4 +19,6 @@ tmp
19
19
  .gemtags
20
20
  .tags
21
21
  .tags_sorted_by_file
22
- logs/vedeu.log
22
+ logs/vedeu.log
23
+ vedeu.sublime-project
24
+ vedeu.sublime-workspace
data/LICENSE.txt CHANGED
@@ -1,6 +1,11 @@
1
1
  Copyright (c) 2014 Gavin Laking
2
2
  Copyright (c) 2013 Steve Klabnik - Monologger
3
3
  (https://github.com/steveklabnik/mono_logger)
4
+ Note: Code used inline in Vedeu::Log.
5
+ Copyright (c) 2013 Michael Grosser - Ruco
6
+ (https://github.com/grosser/ruco)
7
+ Note: Code from ruco's Window class was used as basis of
8
+ Vedeu::Viewport.
4
9
 
5
10
  MIT License
6
11
 
data/bin/vedeu CHANGED
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
- $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib') unless $LOAD_PATH.include?(File.dirname(__FILE__) + '/../lib')
2
+
3
+ lib_dir = File.dirname(__FILE__) + '/../lib'
4
+ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
3
5
 
4
6
  -> { its -> { a } }
5
7
  trap('INT') { exit! }
data/docs/api.md CHANGED
@@ -60,6 +60,7 @@ Note: Nesting indicates where an API method is allowed/supposed to be used.
60
60
 
61
61
  - interface
62
62
  - centred (or centred!)
63
+ - cursor
63
64
  - colour
64
65
  - delay
65
66
  - group
@@ -79,6 +80,7 @@ Note: Nesting indicates where an API method is allowed/supposed to be used.
79
80
  - view
80
81
  - view
81
82
  - colour
83
+ - cursor
82
84
  - line
83
85
  - background
84
86
  - colour
@@ -11,16 +11,26 @@ require 'vedeu'
11
11
  class VedeuCursorApp
12
12
  include Vedeu
13
13
 
14
- event(:_initialize_) { trigger(:_refresh_) }
14
+ event(:_initialize_) { Vedeu.trigger(:_refresh_) }
15
15
 
16
16
  interface 'iron' do
17
+ cursor true
17
18
  centred true
18
19
  colour foreground: '#ff0000', background: '#000000'
19
20
  height 4
20
21
  width 15
22
+
23
+ # provide 'vim' direction keys
24
+ keys do
25
+ key('k') { Vedeu.trigger(:_cursor_up_) }
26
+ key('l') { Vedeu.trigger(:_cursor_right_) }
27
+ key('j') { Vedeu.trigger(:_cursor_down_) }
28
+ key('h') { Vedeu.trigger(:_cursor_left_) }
29
+ end
21
30
  end
22
31
 
23
32
  interface 'gold' do
33
+ cursor false
24
34
  colour foreground: '#00ff00', background: '#001100'
25
35
  height 4
26
36
  width 15
@@ -29,14 +39,12 @@ class VedeuCursorApp
29
39
  end
30
40
 
31
41
  keys do
32
- key(:up) { trigger(:_cursor_up_) }
33
- key(:right) { trigger(:_cursor_right_) }
34
- key(:down) { trigger(:_cursor_down_) }
35
- key(:left) { trigger(:_cursor_left_) }
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
- focus('iron')
39
-
40
48
  render do
41
49
  view 'iron' do
42
50
  line do
@@ -87,8 +95,15 @@ class VedeuCursorApp
87
95
  end
88
96
  end
89
97
  end
98
+
99
+ view 'gold' do
100
+ cursor false
101
+ line 'Cursor: '
102
+ end
90
103
  end
91
104
 
105
+ focus('iron') # not working right?!
106
+
92
107
  def self.start
93
108
  Vedeu::Launcher.new(['--debug']).execute!
94
109
  end
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib_dir = File.dirname(__FILE__) + '/../lib'
4
+ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
5
+
6
+ trap('INT') { exit! }
7
+
8
+ # require 'bundler/setup' # uncomment to remove the need to do `bundle exec`.
9
+ require 'vedeu'
10
+
11
+ class HelloWorldApp
12
+ include Vedeu
13
+
14
+ configure do
15
+ debug!
16
+ log '/tmp/hello_world_vedeu.log'
17
+ end
18
+
19
+ event(:_initialize_) { Vedeu.trigger(:_refresh_) }
20
+
21
+ interface 'messages' do
22
+ background '#000000'
23
+ centred!
24
+ foreground '#00ff00'
25
+ height 3
26
+ width 20
27
+ end
28
+
29
+ render do
30
+ view 'messages' do
31
+ line ' Hello World!'
32
+ line
33
+ line " Press 'q' to exit. "
34
+ end
35
+ end
36
+
37
+ def self.start
38
+ Vedeu::Launcher.execute!(ARGV)
39
+ end
40
+ end
41
+
42
+ HelloWorldApp.start
data/lib/vedeu.rb CHANGED
@@ -36,6 +36,8 @@ require 'vedeu/configuration/configuration'
36
36
  require 'vedeu/support/log'
37
37
  require 'vedeu/support/trace'
38
38
 
39
+ require 'vedeu/models/keymap'
40
+ require 'vedeu/api/keymap'
39
41
  require 'vedeu/api/api'
40
42
 
41
43
  require 'vedeu/support/coercions'
@@ -56,7 +58,7 @@ require 'vedeu/models/colour'
56
58
  require 'vedeu/models/style'
57
59
  require 'vedeu/models/interface'
58
60
  require 'vedeu/models/cursor'
59
- require 'vedeu/models/keymap'
61
+
60
62
  require 'vedeu/models/char'
61
63
  require 'vedeu/models/line'
62
64
  require 'vedeu/models/stream'
@@ -68,12 +70,12 @@ require 'vedeu/api/defined'
68
70
  require 'vedeu/api/composition'
69
71
  require 'vedeu/api/helpers'
70
72
  require 'vedeu/api/interface'
71
- require 'vedeu/api/keymap'
72
73
  require 'vedeu/api/line'
73
74
  require 'vedeu/api/menu'
74
75
  require 'vedeu/api/stream'
75
76
 
76
77
  require 'vedeu/support/keymap_validator'
78
+ require 'vedeu/repositories/positional'
77
79
  require 'vedeu/repositories/offsets'
78
80
  require 'vedeu/repositories/menus'
79
81
  require 'vedeu/repositories/keymaps'
@@ -85,18 +87,16 @@ require 'vedeu/repositories/buffers'
85
87
  require 'vedeu/repositories/cursors'
86
88
 
87
89
  require 'vedeu/support/registrar'
90
+ require 'vedeu/support/refresh'
88
91
 
89
- require 'vedeu/output/area'
90
92
  require 'vedeu/output/clear'
91
93
  require 'vedeu/output/compositor'
92
- require 'vedeu/output/refresh'
93
94
  require 'vedeu/output/render'
94
95
  require 'vedeu/output/view'
95
96
  require 'vedeu/output/viewport'
96
97
 
97
98
  require 'vedeu/support/grid'
98
99
  require 'vedeu/support/menu'
99
- require 'vedeu/support/move'
100
100
 
101
101
  require 'vedeu/input/input'
102
102
 
data/lib/vedeu/api/api.rb CHANGED
@@ -6,6 +6,10 @@ module Vedeu
6
6
  # @api public
7
7
  module API
8
8
 
9
+ extend Forwardable
10
+
11
+ def_delegators Keymap, :keys
12
+
9
13
  # Configure Vedeu using a simple configuration DSL.
10
14
  #
11
15
  # @param block [Proc]
@@ -119,6 +123,8 @@ module Vedeu
119
123
 
120
124
  # Simulate a keypress.
121
125
  #
126
+ # @todo Replace with: def_delegators Keymaps, :keypress
127
+ #
122
128
  # @example
123
129
  # Vedeu.keypress('s')
124
130
  #
@@ -127,38 +133,6 @@ module Vedeu
127
133
  Vedeu::Keymaps.use(key)
128
134
  end
129
135
 
130
- # Define actions for keypresses for when specific interfaces are in focus.
131
- # Unless an interface is specified, the key will be assumed to be global,
132
- # meaning its action will happen regardless of the interface in focus.
133
- #
134
- # @api public
135
- # @param name_or_names [String] The name or names of the interface(s) which
136
- # will handle these keys.
137
- # @param block [Proc]
138
- #
139
- # @example
140
- # keys do # => will be global
141
- # key('s') { :something }
142
- # ...
143
- #
144
- # keys 'my_interface' do # => will only function when 'my_interface'
145
- # ... # is in focus
146
- #
147
- # keys('main', 'other') do # => will function for both 'main' and
148
- # ... # 'other' interfaces
149
- #
150
- # keys do
151
- # interface 'my_interface' # => will only function when 'my_interface'
152
- # ... # is in focus
153
- #
154
- # @raise [InvalidSyntax] When the required block is not given.
155
- # @return [API::Keymap]
156
- def keys(*name_or_names, &block)
157
- fail InvalidSyntax, '`keys` requires a block.' unless block_given?
158
-
159
- API::Keymap.define({ interfaces: name_or_names }, &block)
160
- end
161
-
162
136
  # Write a message to the Vedeu log file located at `$HOME/.vedeu/vedeu.log`
163
137
  #
164
138
  # @param message [String] The message you wish to emit to the log
@@ -214,6 +188,10 @@ module Vedeu
214
188
  # view 'my_interface' do
215
189
  # ...
216
190
  #
191
+ # Vedeu.render do
192
+ # view 'my_interface' do
193
+ # ...
194
+ #
217
195
  # @raise [InvalidSyntax] When the required block is not given.
218
196
  # @return [Array] A collection of strings, each defining containing the
219
197
  # escape sequences and content. This data has already been sent to the
@@ -294,6 +272,11 @@ module Vedeu
294
272
 
295
273
  # Instruct Vedeu to treat contents of block as a single composition.
296
274
  #
275
+ # @note The views declared within this block are stored in their respective
276
+ # interface back buffers until a refresh event occurs. When the refresh
277
+ # event is triggered, the back buffers are swapped into the front buffers
278
+ # and the content here will be rendered to {Terminal.output}.
279
+ #
297
280
  # @param block [Proc] Instructs Vedeu to treat all of the 'view' directives
298
281
  # therein as one instruction. Useful for redrawing multiple interfaces at
299
282
  # once.
@@ -314,7 +297,7 @@ module Vedeu
314
297
  # ...
315
298
  #
316
299
  # @raise [InvalidSyntax] When the required block is not given.
317
- # @return [Hash]
300
+ # @return [Array]
318
301
  def views(&block)
319
302
  fail InvalidSyntax, '`views` requires a block.' unless block_given?
320
303
 
@@ -8,6 +8,50 @@ module Vedeu
8
8
  # @api public
9
9
  module Helpers
10
10
 
11
+ include Common
12
+
13
+ # Define the background colour for an interface, line, or a stream. When
14
+ # called with a block, will create a new stream with the background colour
15
+ # specified; see {Vedeu::API::Stream} for directives which are valid
16
+ # within the block. When the block terminates, the background will return
17
+ # to that of the parent.
18
+ #
19
+ # @param value [String]
20
+ # @param block [Proc]
21
+ #
22
+ # @example
23
+ # interface 'my_interface' do
24
+ # background '#0022ff'
25
+ # ...
26
+ #
27
+ # line do
28
+ # background '#0022ff'
29
+ # ...
30
+ #
31
+ # stream do
32
+ # background '#0022ff'
33
+ # ...
34
+ #
35
+ # foreground('#0022ff') { 'This will be blue.' }
36
+ #
37
+ # @raise [InvalidSyntax] When the value is not defined.
38
+ # @return [Hash]
39
+ def background(value = '', &block)
40
+ unless defined_value?(value)
41
+ fail InvalidSyntax, '`background` requires a value.'
42
+ end
43
+
44
+ if block_given?
45
+ attributes[:streams] << API::Stream
46
+ .build({ colour: { background: value },
47
+ parent: self.view_attributes }, &block)
48
+
49
+ else
50
+ attributes[:colour].merge!({ background: value })
51
+
52
+ end
53
+ end
54
+
11
55
  # Define either or both foreground and background colours for an
12
56
  # interface, line or a stream.
13
57
  #
@@ -38,6 +82,48 @@ module Vedeu
38
82
  attributes[:colour] = values
39
83
  end
40
84
 
85
+ # Define the foreground colour for an interface, line, or a stream. When
86
+ # called with a block, will create a new stream with the foreground colour
87
+ # specified; see {Vedeu::API::Stream} for directives which are valid
88
+ # within the block. When the block terminates, the foreground will return
89
+ # to that of the parent.
90
+ #
91
+ # @param value [String]
92
+ # @param block [Proc]
93
+ #
94
+ # @example
95
+ # interface 'my_interface' do
96
+ # foreground '#0022ff'
97
+ # ...
98
+ #
99
+ # line do
100
+ # foreground '#0022ff'
101
+ # ...
102
+ #
103
+ # stream do
104
+ # foreground '#0022ff'
105
+ # ...
106
+ #
107
+ # foreground('#0022ff') { 'This will be blue.' }
108
+ #
109
+ # @raise [InvalidSyntax] When the value is not defined.
110
+ # @return [Hash]
111
+ def foreground(value = '', &block)
112
+ unless defined_value?(value)
113
+ fail InvalidSyntax, '`foreground` requires a value.'
114
+ end
115
+
116
+ if block_given?
117
+ attributes[:streams] << API::Stream
118
+ .build({ colour: { foreground: value },
119
+ parent: self.view_attributes }, &block)
120
+
121
+ else
122
+ attributes[:colour].merge!({ foreground: value })
123
+
124
+ end
125
+ end
126
+
41
127
  # Define a style or styles for an interface, line or a stream.
42
128
  #
43
129
  # @param values [Array|String]
@@ -23,24 +23,54 @@ module Vedeu
23
23
  # centred false
24
24
  # ...
25
25
  #
26
- # @return [API::Interface]
26
+ # @return [Boolean]
27
27
  def centred(value = true)
28
28
  attributes[:geometry][:centred] = !!(value)
29
29
  end
30
30
  alias_method :centred!, :centred
31
31
 
32
+ # Set the cursor visibility on an interface or view.
33
+ #
34
+ # @param value [Boolean] Any value other than nil or false will evaluate
35
+ # to true.
36
+ #
37
+ # @example
38
+ # interface 'my_interface' do
39
+ # cursor true
40
+ # ...
41
+ #
42
+ # view 'my_interface' do
43
+ # cursor true
44
+ # ...
45
+ #
46
+ # @return [Symbol]
47
+ def cursor(value = true)
48
+ attributes[:cursor] = if !!value
49
+ :show
50
+
51
+ else
52
+ :hide
53
+
54
+ end
55
+ end
56
+
32
57
  # To maintain performance interfaces can be delayed from refreshing too
33
58
  # often, the reduces artefacts particularly when resizing the terminal
34
59
  # screen.
35
60
  #
36
61
  # @param value [Fixnum|Float]
37
62
  #
38
- # @return [API::Interface]
63
+ # @example
64
+ # interface 'my_interface' do
65
+ # delay 0.5 # interface will not update more often than every 500ms.
66
+ # ...
67
+ #
68
+ # @return [Fixnum|Float]
39
69
  def delay(value)
40
70
  attributes[:delay] = value
41
71
  end
42
72
 
43
- # Define a group for an interface. Interfaces of the same group can be
73
+ # Specify a group for an interface. Interfaces of the same group can be
44
74
  # targetted together; for example you may want to refresh multiple
45
75
  # interfaces at once.
46
76
  #
@@ -51,12 +81,12 @@ module Vedeu
51
81
  # group 'main_screen'
52
82
  # ...
53
83
  #
54
- # @return [API::Interface]
84
+ # @return [String]
55
85
  def group(value)
56
86
  attributes[:group] = value
57
87
  end
58
88
 
59
- # Define the number of characters/rows/lines tall the interface will be.
89
+ # Specify the number of characters/rows/lines tall the interface will be.
60
90
  #
61
91
  # @param value [Fixnum]
62
92
  #
@@ -65,14 +95,19 @@ module Vedeu
65
95
  # height 8
66
96
  # ...
67
97
  #
68
- # @return [API::Interface]
98
+ # @return [Fixnum]
69
99
  def height(value)
70
100
  Vedeu.log(out_of_bounds('height')) if y_out_of_bounds?(value)
71
101
 
72
102
  attributes[:geometry][:height] = value
73
103
  end
74
104
 
75
- # Define a single line in a view.
105
+ # @see Vedeu::API#keys
106
+ def keys(&block)
107
+ Keymap.keys(attributes[:name], &block)
108
+ end
109
+
110
+ # Specify a single line in a view.
76
111
  #
77
112
  # @param value [String]
78
113
  # @param block [Proc]
@@ -85,11 +120,11 @@ module Vedeu
85
120
  #
86
121
  # view 'my_interface' do
87
122
  # line do
88
- # ... some line attributes ...
123
+ # ... see {API::Line} and {API::Stream}
89
124
  # end
90
125
  # end
91
126
  #
92
- # @return [API::Interface]
127
+ # @return [API::Line]
93
128
  def line(value = '', &block)
94
129
  if block_given?
95
130
  attributes[:lines] << API::Line
@@ -112,13 +147,21 @@ module Vedeu
112
147
  # name 'my_interface'
113
148
  # ...
114
149
  #
115
- # @return [API::Interface]
150
+ # @return [String]
116
151
  def name(value)
117
152
  attributes[:name] = value
118
153
  end
119
154
 
120
155
  # Use the specified interface; useful for sharing attributes with other
121
- # interfaces.
156
+ # interfaces. Any public method of #{Vedeu::Interface} is available.
157
+ #
158
+ # @example
159
+ # interface 'my_interface' do
160
+ # use('my_other_interface').width # use the width of another interface
161
+ # ...
162
+ #
163
+ # Vedeu.use('my_other_interface').width # can be used in your code to
164
+ # # get this value
122
165
  #
123
166
  # @param value [String]
124
167
  # @see Vedeu::API#use
@@ -126,7 +169,7 @@ module Vedeu
126
169
  Vedeu.use(value)
127
170
  end
128
171
 
129
- # Define the number of characters/columns wide the interface will be.
172
+ # Specify the number of characters/columns wide the interface will be.
130
173
  #
131
174
  # @param value [Fixnum]
132
175
  #
@@ -135,14 +178,14 @@ module Vedeu
135
178
  # width 25
136
179
  # ...
137
180
  #
138
- # @return [API::Interface]
181
+ # @return [Fixnum]
139
182
  def width(value)
140
183
  Vedeu.log(out_of_bounds('width')) if x_out_of_bounds?(value)
141
184
 
142
185
  attributes[:geometry][:width] = value
143
186
  end
144
187
 
145
- # Define the starting x position (column) of the interface.
188
+ # Specify the starting x position (column) of the interface.
146
189
  #
147
190
  # @param value [Fixnum]
148
191
  # @param block [Proc]
@@ -156,7 +199,7 @@ module Vedeu
156
199
  # # `my_interface` changes position,
157
200
  # # `other_interface` will too.
158
201
  #
159
- # @return [API::Interface]
202
+ # @return [Fixnum]
160
203
  def x(value = 0, &block)
161
204
  return attributes[:geometry][:x] = block if block_given?
162
205
 
@@ -165,7 +208,7 @@ module Vedeu
165
208
  attributes[:geometry][:x] = value
166
209
  end
167
210
 
168
- # Define the starting y position (row/line) of the interface.
211
+ # Specify the starting y position (row/line) of the interface.
169
212
  #
170
213
  # @param value [Fixnum]
171
214
  # @param block [Proc]
@@ -180,7 +223,7 @@ module Vedeu
180
223
  # ... # `my_interface` changes position,
181
224
  # # `other_interface` will too.
182
225
  #
183
- # @return [API::Interface]
226
+ # @return [Fixnum]
184
227
  def y(value = 0, &block)
185
228
  return attributes[:geometry][:y] = block if block_given?
186
229