vedeu 0.6.1 → 0.6.2
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/lib/vedeu/all.rb +2 -13
- data/lib/vedeu/api.rb +9 -9
- data/lib/vedeu/application/application_view.rb +3 -5
- data/lib/vedeu/bindings/bindings.rb +5 -1
- data/lib/vedeu/bindings/focus.rb +0 -5
- data/lib/vedeu/bindings/refresh.rb +0 -5
- data/lib/vedeu/bindings/system.rb +1 -6
- data/lib/vedeu/colours/all.rb +17 -0
- data/lib/vedeu/colours/background.rb +32 -28
- data/lib/vedeu/colours/backgrounds.rb +13 -9
- data/lib/vedeu/colours/colour.rb +106 -102
- data/lib/vedeu/colours/foreground.rb +32 -28
- data/lib/vedeu/colours/foregrounds.rb +13 -9
- data/lib/vedeu/colours/repository.rb +70 -0
- data/lib/vedeu/colours/translator.rb +267 -0
- data/lib/vedeu/configuration/api.rb +10 -7
- data/lib/vedeu/configuration/configuration.rb +2 -1
- data/lib/vedeu/dsl/border.rb +15 -2
- data/lib/vedeu/dsl/composition.rb +6 -4
- data/lib/vedeu/dsl/geometry.rb +14 -7
- data/lib/vedeu/dsl/group.rb +2 -2
- data/lib/vedeu/dsl/interface.rb +5 -3
- data/lib/vedeu/dsl/keymap.rb +9 -7
- data/lib/vedeu/dsl/line.rb +7 -4
- data/lib/vedeu/dsl/menu.rb +3 -0
- data/lib/vedeu/dsl/presentation.rb +20 -10
- data/lib/vedeu/dsl/shared.rb +4 -4
- data/lib/vedeu/dsl/stream.rb +2 -2
- data/lib/vedeu/dsl/text.rb +11 -5
- data/lib/vedeu/dsl/use.rb +2 -2
- data/lib/vedeu/dsl/view.rb +8 -6
- data/lib/vedeu/events/aliases.rb +91 -0
- data/lib/vedeu/events/all.rb +15 -0
- data/lib/vedeu/events/collection.rb +13 -0
- data/lib/vedeu/events/event.rb +244 -239
- data/lib/vedeu/events/repository.rb +30 -0
- data/lib/vedeu/events/trigger.rb +68 -64
- data/lib/vedeu/exceptions.rb +65 -54
- data/lib/vedeu/geometry/coordinate.rb +3 -1
- data/lib/vedeu/geometry/grid.rb +2 -4
- data/lib/vedeu/input/editor/all.rb +2 -1
- data/lib/vedeu/input/editor/{virtual_cursor.rb → cursor.rb} +10 -10
- data/lib/vedeu/input/editor/document.rb +7 -7
- data/lib/vedeu/input/editor/insert.rb +70 -0
- data/lib/vedeu/input/editor/line.rb +4 -16
- data/lib/vedeu/input/editor/lines.rb +2 -16
- data/lib/vedeu/input/input_translator.rb +2 -2
- data/lib/vedeu/input/key.rb +2 -2
- data/lib/vedeu/internal_api.rb +6 -6
- data/lib/vedeu/log/lockless_log_device.rb +0 -74
- data/lib/vedeu/models/focus.rb +3 -3
- data/lib/vedeu/models/interface.rb +3 -3
- data/lib/vedeu/models/menu.rb +2 -2
- data/lib/vedeu/models/views/char.rb +1 -1
- data/lib/vedeu/models/views/composition.rb +1 -1
- data/lib/vedeu/models/views/line.rb +1 -1
- data/lib/vedeu/models/views/stream.rb +1 -1
- data/lib/vedeu/models/views/view.rb +6 -7
- data/lib/vedeu/output/presentation/colour.rb +23 -21
- data/lib/vedeu/output/renderers/renderer_options.rb +2 -4
- data/lib/vedeu/output/text.rb +1 -1
- data/lib/vedeu/output/wordwrap.rb +18 -7
- data/lib/vedeu/plugins/plugin.rb +2 -2
- data/lib/vedeu/refresh/refresh_buffer.rb +3 -3
- data/lib/vedeu/refresh/refresh_group.rb +3 -3
- data/lib/vedeu/repositories/repository.rb +7 -6
- data/lib/vedeu/runtime/application.rb +1 -1
- data/lib/vedeu/runtime/main_loop.rb +3 -3
- data/lib/vedeu/runtime/router.rb +14 -11
- data/lib/vedeu/templating/helpers.rb +5 -5
- data/lib/vedeu/templating/template.rb +4 -4
- data/lib/vedeu/templating/view_template.rb +1 -1
- data/lib/vedeu/terminal/terminal.rb +2 -2
- data/lib/vedeu/version.rb +1 -1
- data/test/lib/vedeu/application/application_view_test.rb +1 -1
- data/test/lib/vedeu/colours/background_test.rb +93 -89
- data/test/lib/vedeu/colours/backgrounds_test.rb +11 -7
- data/test/lib/vedeu/colours/colour_test.rb +155 -151
- data/test/lib/vedeu/colours/foreground_test.rb +93 -89
- data/test/lib/vedeu/colours/foregrounds_test.rb +11 -7
- data/test/lib/vedeu/colours/repository_test.rb +97 -0
- data/test/lib/vedeu/colours/translator_test.rb +173 -0
- data/test/lib/vedeu/configuration/api_test.rb +4 -4
- data/test/lib/vedeu/dsl/border_test.rb +12 -0
- data/test/lib/vedeu/dsl/composition_test.rb +3 -3
- data/test/lib/vedeu/dsl/geometry_test.rb +11 -0
- data/test/lib/vedeu/dsl/group_test.rb +2 -2
- data/test/lib/vedeu/dsl/interface_test.rb +4 -4
- data/test/lib/vedeu/dsl/keymap_test.rb +8 -4
- data/test/lib/vedeu/dsl/line_test.rb +6 -3
- data/test/lib/vedeu/dsl/menu_test.rb +6 -0
- data/test/lib/vedeu/dsl/presentation_test.rb +16 -3
- data/test/lib/vedeu/dsl/stream_test.rb +1 -1
- data/test/lib/vedeu/dsl/text_test.rb +7 -0
- data/test/lib/vedeu/dsl/view_test.rb +3 -3
- data/test/lib/vedeu/events/aliases_test.rb +144 -0
- data/test/lib/vedeu/events/collection_test.rb +22 -0
- data/test/lib/vedeu/events/event_test.rb +84 -80
- data/test/lib/vedeu/events/repository_test.rb +28 -0
- data/test/lib/vedeu/events/trigger_test.rb +41 -37
- data/test/lib/vedeu/geometry/grid_test.rb +4 -4
- data/test/lib/vedeu/input/editor/{virtual_cursor_test.rb → cursor_test.rb} +3 -3
- data/test/lib/vedeu/input/editor/insert_test.rb +36 -0
- data/test/lib/vedeu/input/key_test.rb +1 -1
- data/test/lib/vedeu/models/cell_test.rb +1 -1
- data/test/lib/vedeu/models/focus_test.rb +4 -2
- data/test/lib/vedeu/models/menu_test.rb +1 -1
- data/test/lib/vedeu/models/views/char_test.rb +8 -4
- data/test/lib/vedeu/models/views/line_test.rb +4 -4
- data/test/lib/vedeu/models/views/stream_test.rb +3 -3
- data/test/lib/vedeu/models/views/view_test.rb +1 -1
- data/test/lib/vedeu/output/html_char_test.rb +4 -2
- data/test/lib/vedeu/output/presentation/colour_test.rb +5 -5
- data/test/lib/vedeu/output/presentation_test.rb +4 -4
- data/test/lib/vedeu/output/renderers/json_test.rb +4 -2
- data/test/lib/vedeu/plugins/plugin_test.rb +1 -1
- data/test/lib/vedeu/refresh/refresh_buffer_test.rb +1 -1
- data/test/lib/vedeu/refresh/refresh_group_test.rb +1 -1
- data/test/lib/vedeu/repositories/repository_test.rb +2 -2
- data/test/lib/vedeu/runtime/router_test.rb +6 -6
- data/test/lib/vedeu/templating/decoder_test.rb +2 -3
- data/test/lib/vedeu/templating/encoder_test.rb +2 -3
- data/test/lib/vedeu/templating/helpers_test.rb +6 -6
- data/test/lib/vedeu/templating/template_test.rb +2 -2
- data/test/lib/vedeu/templating/view_template_test.rb +13 -7
- data/test/lib/vedeu/terminal/terminal_test.rb +3 -3
- metadata +24 -19
- data/lib/vedeu/colours/colour_translator.rb +0 -260
- data/lib/vedeu/colours/colours.rb +0 -66
- data/lib/vedeu/events/event_aliases.rb +0 -87
- data/lib/vedeu/events/event_collection.rb +0 -9
- data/lib/vedeu/events/events.rb +0 -26
- data/test/lib/vedeu/colours/colour_translator_test.rb +0 -169
- data/test/lib/vedeu/colours/colours_test.rb +0 -93
- data/test/lib/vedeu/events/event_aliases_test.rb +0 -140
- data/test/lib/vedeu/events/event_collection_test.rb +0 -18
- data/test/lib/vedeu/events/events_test.rb +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95b04552ad105549ad207ff5111b8a524a3295e2
|
4
|
+
data.tar.gz: 501502ff4b2358f6bca2740343581d399512fdc3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 53154cedb87837dce360e41dbfd01fc0a7081acb70294dd9ef09bc74618e76cc4937edc66f23607e467987346cc8f00933b1cf4252988b1f96ca747537dc8583
|
7
|
+
data.tar.gz: 9eaaceffc2eae74600586814a726ad512ed0d8f2381380978439cde334ceb393a86803a0810cb5faea4fab2f2742f8eff4ef222cf0cc500a694e74d54a339185
|
data/lib/vedeu/all.rb
CHANGED
@@ -27,7 +27,6 @@ require 'vedeu/models/toggleable'
|
|
27
27
|
|
28
28
|
require 'vedeu/repositories/collection'
|
29
29
|
require 'vedeu/input/keys'
|
30
|
-
require 'vedeu/events/event_collection'
|
31
30
|
require 'vedeu/repositories/repositories'
|
32
31
|
|
33
32
|
require 'vedeu/repositories/model'
|
@@ -52,13 +51,7 @@ require 'vedeu/geometry/geometries'
|
|
52
51
|
require 'vedeu/geometry/grid'
|
53
52
|
require 'vedeu/geometry/position'
|
54
53
|
|
55
|
-
require 'vedeu/colours/
|
56
|
-
require 'vedeu/colours/backgrounds'
|
57
|
-
require 'vedeu/colours/foregrounds'
|
58
|
-
require 'vedeu/colours/colour_translator'
|
59
|
-
require 'vedeu/colours/background'
|
60
|
-
require 'vedeu/colours/foreground'
|
61
|
-
require 'vedeu/colours/colour'
|
54
|
+
require 'vedeu/colours/all'
|
62
55
|
|
63
56
|
require 'vedeu/buffers/buffer'
|
64
57
|
require 'vedeu/buffers/buffers'
|
@@ -90,11 +83,7 @@ require 'vedeu/output/renderers/terminal'
|
|
90
83
|
require 'vedeu/output/renderers/text'
|
91
84
|
require 'vedeu/output/renderers'
|
92
85
|
|
93
|
-
require 'vedeu/events/
|
94
|
-
require 'vedeu/events/trigger'
|
95
|
-
require 'vedeu/events/events'
|
96
|
-
require 'vedeu/events/event'
|
97
|
-
|
86
|
+
require 'vedeu/events/all'
|
98
87
|
require 'vedeu/models/views/all'
|
99
88
|
|
100
89
|
require 'vedeu/models/cell'
|
data/lib/vedeu/api.rb
CHANGED
@@ -110,22 +110,22 @@ module Vedeu
|
|
110
110
|
# Vedeu.unbind(name)
|
111
111
|
#
|
112
112
|
# @!method bind
|
113
|
-
# @see Vedeu::Event.bind
|
113
|
+
# @see Vedeu::Events::Event.bind
|
114
114
|
# @!method bound?
|
115
|
-
# @see Vedeu::Event.bound?
|
115
|
+
# @see Vedeu::Events::Event.bound?
|
116
116
|
# @!method unbind
|
117
|
-
# @see Vedeu::Event.unbind
|
118
|
-
def_delegators Vedeu::Event, :bind, :bound?, :unbind
|
117
|
+
# @see Vedeu::Events::Event.unbind
|
118
|
+
def_delegators Vedeu::Events::Event, :bind, :bound?, :unbind
|
119
119
|
|
120
120
|
# @example
|
121
121
|
# Vedeu.bind_alias(alias_name, event_name)
|
122
122
|
# Vedeu.unbind_alias(alias_name)
|
123
123
|
#
|
124
124
|
# @!method bind_alias
|
125
|
-
# @see Vedeu::
|
125
|
+
# @see Vedeu::Events::Aliases.bind_alias
|
126
126
|
# @!method unbind_alias
|
127
|
-
# @see Vedeu::
|
128
|
-
def_delegators Vedeu::
|
127
|
+
# @see Vedeu::Events::Aliases.unbind_alias
|
128
|
+
def_delegators Vedeu::Events::Aliases, :bind_alias, :unbind_alias
|
129
129
|
|
130
130
|
# @example
|
131
131
|
# Vedeu.focus
|
@@ -205,8 +205,8 @@ module Vedeu
|
|
205
205
|
# Vedeu.trigger(:name)
|
206
206
|
#
|
207
207
|
# @!method trigger
|
208
|
-
# @see Vedeu::Trigger.trigger
|
209
|
-
def_delegators Vedeu::Trigger, :trigger
|
208
|
+
# @see Vedeu::Events::Trigger.trigger
|
209
|
+
def_delegators Vedeu::Events::Trigger, :trigger
|
210
210
|
|
211
211
|
# Exit the client application using Vedeu.
|
212
212
|
#
|
@@ -27,10 +27,10 @@ module Vedeu
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
# @raise [Vedeu::NotImplemented] Subclasses of this class must
|
31
|
-
# this method.
|
30
|
+
# @raise [Vedeu::Error::NotImplemented] Subclasses of this class must
|
31
|
+
# implement this method.
|
32
32
|
def render
|
33
|
-
fail Vedeu::NotImplemented,
|
33
|
+
fail Vedeu::Error::NotImplemented,
|
34
34
|
'The subclass of Vedeu::ApplicationView must implement the #render' \
|
35
35
|
'method.'
|
36
36
|
end
|
@@ -48,12 +48,10 @@ module Vedeu
|
|
48
48
|
#
|
49
49
|
# @param value [String]
|
50
50
|
# @return [String]
|
51
|
-
# :nocov:
|
52
51
|
def template(value)
|
53
52
|
@template = Vedeu::Configuration.base_path +
|
54
53
|
"/app/views/templates/#{value}.erb"
|
55
54
|
end
|
56
|
-
# :nocov:
|
57
55
|
|
58
56
|
end # ApplicationView
|
59
57
|
|
@@ -7,6 +7,10 @@ module Vedeu
|
|
7
7
|
# directly, however the produced events are all public and are highly
|
8
8
|
# recommended to be used.
|
9
9
|
#
|
10
|
+
# Unbinding any of these events is likely to cause problems, so I would
|
11
|
+
# advise leaving them alone. A safe rule: when the name starts and ends with
|
12
|
+
# an underscore, it's probably used by Vedeu internally.
|
13
|
+
#
|
10
14
|
module Bindings
|
11
15
|
|
12
16
|
extend self
|
@@ -15,7 +19,7 @@ module Vedeu
|
|
15
19
|
#
|
16
20
|
# @return [TrueClass]
|
17
21
|
def setup!
|
18
|
-
Vedeu::Events.reset!
|
22
|
+
Vedeu::Events::Repository.reset!
|
19
23
|
|
20
24
|
Vedeu::Bindings::Application.setup!
|
21
25
|
Vedeu::Bindings::Document.setup!
|
data/lib/vedeu/bindings/focus.rb
CHANGED
@@ -5,11 +5,6 @@ module Vedeu
|
|
5
5
|
# Creates system events which when called provide a variety of core
|
6
6
|
# functions and behaviours. They are soft-namespaced using underscores.
|
7
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: when the name starts with an
|
11
|
-
# underscore, it's probably used by Vedeu internally.
|
12
|
-
#
|
13
8
|
# :nocov:
|
14
9
|
module Focus
|
15
10
|
|
@@ -5,11 +5,6 @@ module Vedeu
|
|
5
5
|
# Creates system events which when called provide a variety of core
|
6
6
|
# functions and behaviours. They are soft-namespaced using underscores.
|
7
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: when the name starts with an
|
11
|
-
# underscore, it's probably used by Vedeu internally.
|
12
|
-
#
|
13
8
|
# :nocov:
|
14
9
|
module Refresh
|
15
10
|
|
@@ -5,11 +5,6 @@ module Vedeu
|
|
5
5
|
# Creates system events which when called provide a variety of core
|
6
6
|
# functions and behaviours. They are soft-namespaced using underscores.
|
7
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: when the name starts with an
|
11
|
-
# underscore, it's probably used by Vedeu internally.
|
12
|
-
#
|
13
8
|
# :nocov:
|
14
9
|
module System
|
15
10
|
|
@@ -169,7 +164,7 @@ module Vedeu
|
|
169
164
|
#
|
170
165
|
# @return [TrueClass]
|
171
166
|
def mode_switch!
|
172
|
-
Vedeu.bind(:_mode_switch_) { fail Vedeu::ModeSwitch }
|
167
|
+
Vedeu.bind(:_mode_switch_) { fail Vedeu::Error::ModeSwitch }
|
173
168
|
end
|
174
169
|
|
175
170
|
# When triggered will cause Vedeu to trigger the `:_clear_` and
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Vedeu
|
2
|
+
|
3
|
+
# Provides colour support to Vedeu.
|
4
|
+
#
|
5
|
+
module Colours
|
6
|
+
|
7
|
+
end # Colours
|
8
|
+
|
9
|
+
end # Vedeu
|
10
|
+
|
11
|
+
require 'vedeu/colours/repository'
|
12
|
+
require 'vedeu/colours/backgrounds'
|
13
|
+
require 'vedeu/colours/foregrounds'
|
14
|
+
require 'vedeu/colours/translator'
|
15
|
+
require 'vedeu/colours/background'
|
16
|
+
require 'vedeu/colours/foreground'
|
17
|
+
require 'vedeu/colours/colour'
|
@@ -1,32 +1,36 @@
|
|
1
1
|
module Vedeu
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
Vedeu
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
3
|
+
module Colours
|
4
|
+
|
5
|
+
# The class represents one half (the other, can be found at
|
6
|
+
# {Vedeu::Colours::Foreground}) of a terminal colour escape sequence.
|
7
|
+
#
|
8
|
+
class Background < Vedeu::Colours::Translator
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
# @return [String]
|
13
|
+
def named_codes
|
14
|
+
Vedeu::Esc.background_codes[colour]
|
15
|
+
end
|
16
|
+
|
17
|
+
# @return [String]
|
18
|
+
def numbered_prefix
|
19
|
+
"\e[48;5;"
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [Vedeu::Colours::Backgrounds]
|
23
|
+
def repository
|
24
|
+
Vedeu.background_colours
|
25
|
+
end
|
26
|
+
|
27
|
+
# @return [String]
|
28
|
+
def rgb_prefix
|
29
|
+
"\e[48;2;%s;%s;%sm"
|
30
|
+
end
|
31
|
+
|
32
|
+
end # Background
|
33
|
+
|
34
|
+
end # Colours
|
31
35
|
|
32
36
|
end # Vedeu
|
@@ -1,15 +1,19 @@
|
|
1
1
|
module Vedeu
|
2
2
|
|
3
|
-
|
4
|
-
#
|
5
|
-
class Backgrounds < Colours
|
3
|
+
module Colours
|
6
4
|
|
7
|
-
#
|
8
|
-
#
|
9
|
-
|
10
|
-
@background_colours ||= new
|
11
|
-
end
|
5
|
+
# Store background colour escape sequences by HTML/CSS code.
|
6
|
+
#
|
7
|
+
class Backgrounds < Vedeu::Colours::Repository
|
12
8
|
|
13
|
-
|
9
|
+
# @return [Vedeu::Colours::Backgrounds]
|
10
|
+
# @see Vedeu::Repository
|
11
|
+
def self.background_colours
|
12
|
+
@background_colours ||= new
|
13
|
+
end
|
14
|
+
|
15
|
+
end # Backgrounds
|
16
|
+
|
17
|
+
end # Colours
|
14
18
|
|
15
19
|
end # Vedeu
|
data/lib/vedeu/colours/colour.rb
CHANGED
@@ -1,113 +1,117 @@
|
|
1
1
|
module Vedeu
|
2
2
|
|
3
|
-
|
4
|
-
# foreground and background colours of a character or collection of
|
5
|
-
# characters.
|
6
|
-
#
|
7
|
-
# Vedeu uses HTML/CSS style notation (i.e. '#aadd00'), they can be used at the
|
8
|
-
# stream level, the line level or for the whole interface. Terminals generally
|
9
|
-
# support either 8, 16 or 256 colours, with few supporting full 24-bit colour
|
10
|
-
# (see notes below).
|
11
|
-
#
|
12
|
-
# Vedeu attempts to detect the colour depth using the `$TERM` environment
|
13
|
-
# variable.
|
14
|
-
#
|
15
|
-
# To set your `$TERM` variable to allow 256 colour support:
|
16
|
-
#
|
17
|
-
# ```bash
|
18
|
-
# echo "export TERM=xterm-256color" >> ~/.bashrc
|
19
|
-
# ```
|
20
|
-
#
|
21
|
-
# Notes:
|
22
|
-
# Terminals which support the 24-bit colour mode include (but are not limited
|
23
|
-
# to): iTerm2 (OSX), Gnome Terminal (Linux).
|
24
|
-
#
|
25
|
-
# Setting your `$TERM` environment variable as above gets you up to 256
|
26
|
-
# colours, but when you then add the `colour_mode 16_777_216` configuration to
|
27
|
-
# your client application, it's really a hit and miss affair. iTerm2 renders
|
28
|
-
# all the colours correctly as does Gnome Terminal. Terminator (Linux) goes
|
29
|
-
# crazy though and defaults to 16 colours despite the `$TERM` setting. This
|
30
|
-
# area needs more work in Vedeu.
|
31
|
-
#
|
32
|
-
# @todo Fix colours in all terminals. (GL: 2015-04-13)
|
33
|
-
#
|
34
|
-
class Colour
|
35
|
-
|
36
|
-
# @!attribute [r] background
|
37
|
-
# @return [Vedeu::Background]
|
38
|
-
attr_reader :background
|
39
|
-
|
40
|
-
# @!attribute [r] foreground
|
41
|
-
# @return [Vedeu::Foreground]
|
42
|
-
attr_reader :foreground
|
43
|
-
|
44
|
-
# @param value [Vedeu::Colour|Hash<Symbol => void>]
|
45
|
-
# @return [Object]
|
46
|
-
def self.coerce(value)
|
47
|
-
return value if value.is_a?(self)
|
48
|
-
return new unless value.is_a?(Hash)
|
49
|
-
|
50
|
-
if value[:colour] && value[:colour].is_a?(self)
|
51
|
-
value[:colour]
|
52
|
-
|
53
|
-
elsif value[:colour] && value[:colour].is_a?(Hash)
|
54
|
-
new(value[:colour])
|
55
|
-
|
56
|
-
elsif value[:background] || value[:foreground]
|
57
|
-
new(value)
|
58
|
-
|
59
|
-
else
|
60
|
-
new
|
3
|
+
module Colours
|
61
4
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
# Returns a new instance of Vedeu::Colour.
|
5
|
+
# Provides a container for terminal escape sequences controlling the
|
6
|
+
# foreground and background colours of a character or collection of
|
7
|
+
# characters.
|
66
8
|
#
|
67
|
-
#
|
68
|
-
#
|
69
|
-
#
|
70
|
-
#
|
71
|
-
def initialize(attributes = {})
|
72
|
-
@background = Vedeu::Background.coerce(attributes[:background])
|
73
|
-
@foreground = Vedeu::Foreground.coerce(attributes[:foreground])
|
74
|
-
end
|
75
|
-
|
76
|
-
# Converts the value into a Vedeu::Background.
|
9
|
+
# Vedeu uses HTML/CSS style notation (i.e. '#aadd00'), they can be used at
|
10
|
+
# the stream level, the line level or for the whole interface. Terminals
|
11
|
+
# generally support either 8, 16 or 256 colours, with few supporting full
|
12
|
+
# 24-bit colour (see notes below).
|
77
13
|
#
|
78
|
-
#
|
79
|
-
#
|
80
|
-
|
81
|
-
|
82
|
-
end
|
83
|
-
|
84
|
-
# An object is equal when its values are the same.
|
14
|
+
# Vedeu attempts to detect the colour depth using the `$TERM` environment
|
15
|
+
# variable.
|
16
|
+
#
|
17
|
+
# To set your `$TERM` variable to allow 256 colour support:
|
85
18
|
#
|
86
|
-
#
|
87
|
-
#
|
88
|
-
|
89
|
-
self.class == other.class && background == other.background &&
|
90
|
-
foreground == other.foreground
|
91
|
-
end
|
92
|
-
alias_method :==, :eql?
|
93
|
-
|
94
|
-
# Converts the value into a Vedeu::Foreground.
|
19
|
+
# ```bash
|
20
|
+
# echo "export TERM=xterm-256color" >> ~/.bashrc
|
21
|
+
# ```
|
95
22
|
#
|
96
|
-
#
|
97
|
-
#
|
98
|
-
|
99
|
-
@foreground = Vedeu::Foreground.coerce(value)
|
100
|
-
end
|
101
|
-
|
102
|
-
# Returns both or either of the converted attributes into a single escape
|
103
|
-
# sequence.
|
23
|
+
# Notes:
|
24
|
+
# Terminals which support the 24-bit colour mode include (but are not
|
25
|
+
# limited to): iTerm2 (OSX), Gnome Terminal (Linux).
|
104
26
|
#
|
105
|
-
#
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
27
|
+
# Setting your `$TERM` environment variable as above gets you up to 256
|
28
|
+
# colours, but when you then add the `colour_mode 16_777_216` configuration
|
29
|
+
# to your client application, it's really a hit and miss affair. iTerm2
|
30
|
+
# renders all the colours correctly as does Gnome Terminal. Terminator
|
31
|
+
# (Linux) goes crazy though and defaults to 16 colours despite the `$TERM`
|
32
|
+
# setting. This area needs more work in Vedeu.
|
33
|
+
#
|
34
|
+
# @todo Fix colours in all terminals. (GL: 2015-04-13)
|
35
|
+
#
|
36
|
+
class Colour
|
37
|
+
|
38
|
+
# @!attribute [r] background
|
39
|
+
# @return [Vedeu::Colours::Background]
|
40
|
+
attr_reader :background
|
41
|
+
|
42
|
+
# @!attribute [r] foreground
|
43
|
+
# @return [Vedeu::Colours::Foreground]
|
44
|
+
attr_reader :foreground
|
45
|
+
|
46
|
+
# @param value [Vedeu::Colours::Colour|Hash<Symbol => void>]
|
47
|
+
# @return [Object]
|
48
|
+
def self.coerce(value)
|
49
|
+
return value if value.is_a?(self)
|
50
|
+
return new unless value.is_a?(Hash)
|
51
|
+
|
52
|
+
if value[:colour] && value[:colour].is_a?(self)
|
53
|
+
value[:colour]
|
54
|
+
|
55
|
+
elsif value[:colour] && value[:colour].is_a?(Hash)
|
56
|
+
new(value[:colour])
|
57
|
+
|
58
|
+
elsif value[:background] || value[:foreground]
|
59
|
+
new(value)
|
60
|
+
|
61
|
+
else
|
62
|
+
new
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# Returns a new instance of Vedeu::Colours::Colour.
|
68
|
+
#
|
69
|
+
# @param attributes [Hash]
|
70
|
+
# @option attributes background [String]
|
71
|
+
# @option attributes foreground [String]
|
72
|
+
# @return [Vedeu::Colours::Colour]
|
73
|
+
def initialize(attributes = {})
|
74
|
+
@background = Vedeu::Colours::Background.coerce(attributes[:background])
|
75
|
+
@foreground = Vedeu::Colours::Foreground.coerce(attributes[:foreground])
|
76
|
+
end
|
77
|
+
|
78
|
+
# Converts the value into a Vedeu::Colours::Background.
|
79
|
+
#
|
80
|
+
# @param value [String]
|
81
|
+
# @return [String]
|
82
|
+
def background=(value)
|
83
|
+
@background = Vedeu::Colours::Background.coerce(value)
|
84
|
+
end
|
85
|
+
|
86
|
+
# An object is equal when its values are the same.
|
87
|
+
#
|
88
|
+
# @param other [Vedeu::Views::Char]
|
89
|
+
# @return [Boolean]
|
90
|
+
def eql?(other)
|
91
|
+
self.class == other.class && background == other.background &&
|
92
|
+
foreground == other.foreground
|
93
|
+
end
|
94
|
+
alias_method :==, :eql?
|
95
|
+
|
96
|
+
# Converts the value into a Vedeu::Colours::Foreground.
|
97
|
+
#
|
98
|
+
# @param value [String]
|
99
|
+
# @return [String]
|
100
|
+
def foreground=(value)
|
101
|
+
@foreground = Vedeu::Colours::Foreground.coerce(value)
|
102
|
+
end
|
103
|
+
|
104
|
+
# Returns both or either of the converted attributes into a single escape
|
105
|
+
# sequence.
|
106
|
+
#
|
107
|
+
# @return [String]
|
108
|
+
def to_s
|
109
|
+
foreground.to_s + background.to_s
|
110
|
+
end
|
111
|
+
alias_method :to_str, :to_s
|
112
|
+
|
113
|
+
end # Colour
|
110
114
|
|
111
|
-
end #
|
115
|
+
end # Colours
|
112
116
|
|
113
117
|
end # Vedeu
|