Class: Vedeu::Colour

Inherits:
Object
  • Object
show all
Defined in:
lib/vedeu/output/colour.rb

Overview

TODO:

Fix colours in all terminals. (GL: 2015-04-13)

Provides a container for terminal escape sequences controlling the foreground and background colours of a character or collection of characters.

Vedeu uses HTML/CSS style notation (i.e. ‘#aadd00’), they can be used at the stream level, the line level or for the whole interface. Terminals generally support either 8, 16 or 256 colours, with few supporting full 24-bit colour (see notes below).

Vedeu attempts to detect the colour depth using the ‘$TERM` environment variable.

To set your ‘$TERM` variable to allow 256 colour support:

“‘bash echo “export TERM=xterm-256color” >> ~/.bashrc “`

Notes: Terminals which support the 24-bit colour mode include (but are not limited to): iTerm2 (OSX), Gnome Terminal (Linux).

Setting your ‘$TERM` environment variable as above gets you up to 256 colours, but if you then add the `colour_mode 16_777_216` configuration to your client application, it’s really a hit and miss affair. iTerm2 renders all the colours correctly as does Gnome Terminal. Terminator (Linux) goes crazy though and defaults to 16 colours despite the ‘$TERM` setting. This area needs more work in Vedeu.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attributes = {}) ⇒ Vedeu::Colour

Returns a new instance of Vedeu::Colour.

Parameters:

  • attributes (Hash) (defaults to: {})

Options Hash (attributes):

  • background (String)
  • foreground (String)


66
67
68
# File 'lib/vedeu/output/colour.rb', line 66

def initialize(attributes = {})
  @attributes = defaults.merge!(attributes)
end

Instance Attribute Details

#attributesHash (readonly)

Returns:

  • (Hash)


37
38
39
# File 'lib/vedeu/output/colour.rb', line 37

def attributes
  @attributes
end

Class Method Details

.coerce(value) ⇒ Object

Parameters:

  • value

Returns:

  • (Object)


41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/vedeu/output/colour.rb', line 41

def self.coerce(value)
  return value if value.is_a?(self)
  return new unless value.is_a?(Hash)

  if value[:colour]
    return value[:colour] if value[:colour].is_a?(self)
    return new unless value[:colour].is_a?(Hash)
    return new(value[:colour]) if value[:colour][:background] ||
                                  value[:colour][:foreground]

  elsif value[:background] || value[:foreground]
    new(value)

  else
    new

  end
end

Instance Method Details

#backgroundVedeu::Background

Returns the background colour as a Vedeu::Background.

Returns:



73
74
75
# File 'lib/vedeu/output/colour.rb', line 73

def background
  @background ||= Vedeu::Background.coerce(attributes[:background])
end

#background=(value) ⇒ String

Converts the value into a Vedeu::Background.

Parameters:

  • value (String)

Returns:

  • (String)


81
82
83
# File 'lib/vedeu/output/colour.rb', line 81

def background=(value)
  @background = @attributes[:background] = Vedeu::Background.coerce(value)
end

#defaultsHash<Symbol => NilClass> (private)

The default values for a new instance of this class.

Returns:

  • (Hash<Symbol => NilClass>)


123
124
125
126
127
128
# File 'lib/vedeu/output/colour.rb', line 123

def defaults
  {
    background: '',
    foreground: '',
  }
end

#eql?(other) ⇒ Boolean Also known as: ==

An object is equal when its values are the same.

Parameters:

Returns:

  • (Boolean)


89
90
91
92
# File 'lib/vedeu/output/colour.rb', line 89

def eql?(other)
  self.class == other.class && background == other.background &&
    foreground == other.foreground
end

#foregroundVedeu::Foreground

Returns the foreground colour as a Vedeu::Foreground.

Returns:



98
99
100
# File 'lib/vedeu/output/colour.rb', line 98

def foreground
  @foreground ||= Vedeu::Foreground.coerce(attributes[:foreground])
end

#foreground=(value) ⇒ String

Converts the value into a Vedeu::Foreground.

Parameters:

  • value (String)

Returns:

  • (String)


106
107
108
# File 'lib/vedeu/output/colour.rb', line 106

def foreground=(value)
  @foreground = @attributes[:foreground] = Vedeu::Foreground.coerce(value)
end

#to_sString

Returns both or either of the converted attributes into a single escape sequence.

Returns:

  • (String)


114
115
116
# File 'lib/vedeu/output/colour.rb', line 114

def to_s
  foreground.to_s + background.to_s
end