wasko 0.0.1
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.
- data/.document +5 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +27 -0
- data/LICENSE.txt +20 -0
- data/README.mdown +42 -0
- data/Rakefile +55 -0
- data/VERSION +1 -0
- data/bin/wasko +104 -0
- data/docs/applescript.html +18 -0
- data/docs/color.html +200 -0
- data/docs/configuration.html +63 -0
- data/docs/docco.css +186 -0
- data/docs/palette.html +61 -0
- data/docs/terminal.html +78 -0
- data/docs/wasko.html +89 -0
- data/lib/wasko.rb +111 -0
- data/lib/wasko/applescript.rb +17 -0
- data/lib/wasko/color.rb +213 -0
- data/lib/wasko/configuration.rb +87 -0
- data/lib/wasko/palette.rb +90 -0
- data/lib/wasko/terminal.rb +90 -0
- data/sample_generator.rb +86 -0
- data/test/helper.rb +19 -0
- data/test/test_applescript.rb +8 -0
- data/test/test_color.rb +24 -0
- data/test/test_palette.rb +36 -0
- data/test/test_terminal.rb +22 -0
- data/test/test_wasko.rb +107 -0
- data/wasko.gemspec +111 -0
- metadata +274 -0
data/lib/wasko.rb
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
require "color/palette/monocontrast"
|
2
|
+
require "yaml"
|
3
|
+
# [Applescript: Small wrapper for running applescript](applescript.html)
|
4
|
+
require "wasko/applescript"
|
5
|
+
# [Terminal: Support for Terminal.app](terminal.html)
|
6
|
+
require "wasko/terminal"
|
7
|
+
# [Color: Small color utilities](color.html)
|
8
|
+
require "wasko/color"
|
9
|
+
# [Palette: Generates a color scheme](palette.html)
|
10
|
+
require "wasko/palette"
|
11
|
+
# [Configuration: Loading and saving themes](configuration.html)
|
12
|
+
require "wasko/configuration"
|
13
|
+
|
14
|
+
module Wasko
|
15
|
+
class << self
|
16
|
+
|
17
|
+
# Currently this only returns Apple's `Terminal.app`,
|
18
|
+
# in the future this could be used to support other
|
19
|
+
# Terminals as well.
|
20
|
+
def advanced_typing_apparatus
|
21
|
+
Wasko::Terminal
|
22
|
+
end
|
23
|
+
|
24
|
+
# ## Set/Get fonts and colors
|
25
|
+
#
|
26
|
+
# These all call the `advanced_typing_apparatus` and
|
27
|
+
# do exactly what they say on the tin.
|
28
|
+
#
|
29
|
+
def background_color
|
30
|
+
::Color::RGB.from_applescript(advanced_typing_apparatus.background_color).html
|
31
|
+
end
|
32
|
+
|
33
|
+
def set_background_color(color)
|
34
|
+
advanced_typing_apparatus.set_background_color(Wasko::Color.color_from_string(color).to_applescript)
|
35
|
+
end
|
36
|
+
|
37
|
+
def foreground_color
|
38
|
+
::Color::RGB.from_applescript(advanced_typing_apparatus.normal_text_color).html
|
39
|
+
end
|
40
|
+
|
41
|
+
def set_foreground_color(color)
|
42
|
+
advanced_typing_apparatus.set_normal_text_color(Wasko::Color.color_from_string(color).to_applescript)
|
43
|
+
end
|
44
|
+
|
45
|
+
def bold_color
|
46
|
+
::Color::RGB.from_applescript(advanced_typing_apparatus.bold_text_color).html
|
47
|
+
end
|
48
|
+
|
49
|
+
def set_bold_color(color)
|
50
|
+
advanced_typing_apparatus.set_bold_text_color(Wasko::Color.color_from_string(color).to_applescript)
|
51
|
+
end
|
52
|
+
|
53
|
+
def cursor_color
|
54
|
+
::Color::RGB.from_applescript(advanced_typing_apparatus.cursor_color).html
|
55
|
+
end
|
56
|
+
|
57
|
+
def set_cursor_color(color)
|
58
|
+
advanced_typing_apparatus.set_cursor_color(Wasko::Color.color_from_string(color).to_applescript)
|
59
|
+
end
|
60
|
+
|
61
|
+
def font_name
|
62
|
+
advanced_typing_apparatus.font_name
|
63
|
+
end
|
64
|
+
|
65
|
+
def set_font_name(name)
|
66
|
+
advanced_typing_apparatus.set_font_name name
|
67
|
+
end
|
68
|
+
|
69
|
+
def font_size
|
70
|
+
advanced_typing_apparatus.font_size
|
71
|
+
end
|
72
|
+
|
73
|
+
def set_font_size(size)
|
74
|
+
advanced_typing_apparatus.set_font_size size
|
75
|
+
end
|
76
|
+
|
77
|
+
def font
|
78
|
+
"#{advanced_typing_apparatus.font_name}, #{advanced_typing_apparatus.font_size}"
|
79
|
+
end
|
80
|
+
|
81
|
+
def set_font(font_size = 14, name = nil)
|
82
|
+
name = font_name if name.empty?
|
83
|
+
set_font_size font_size
|
84
|
+
set_font_name name
|
85
|
+
end
|
86
|
+
|
87
|
+
# ## Palette
|
88
|
+
#
|
89
|
+
# Returns a string representation of the current settings
|
90
|
+
def palette
|
91
|
+
[
|
92
|
+
"Background: #{background_color}",
|
93
|
+
"Foreground: #{foreground_color}",
|
94
|
+
"Bold Text : #{bold_color}",
|
95
|
+
"Cursor : #{cursor_color}",
|
96
|
+
"Font : #{font}"
|
97
|
+
].join("\n")
|
98
|
+
end
|
99
|
+
|
100
|
+
# Try to set a sensible palette from a base color
|
101
|
+
def set_palette(color_string)
|
102
|
+
p = Wasko::Palette::TheOriginal.new(color_string)
|
103
|
+
|
104
|
+
set_background_color p.colors[:base].html
|
105
|
+
set_foreground_color p.colors[:foreground].html
|
106
|
+
set_bold_color p.colors[:bold].html
|
107
|
+
set_cursor_color p.colors[:cursor].html
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Wasko
|
2
|
+
class Applescript
|
3
|
+
# Runs a piece of Applescript,
|
4
|
+
#
|
5
|
+
# Wasko::Applescript.run do
|
6
|
+
# "set ten_and_ten to 10 + 10"
|
7
|
+
# end
|
8
|
+
# => "20"
|
9
|
+
#
|
10
|
+
# Since Applescript has a nasy bit of littering its
|
11
|
+
# return values with `\n`, already escaping those.
|
12
|
+
def self.run
|
13
|
+
value = `/usr/bin/osascript -e "#{yield.gsub('"', '\"')}"`
|
14
|
+
value.gsub("\n", '')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/wasko/color.rb
ADDED
@@ -0,0 +1,213 @@
|
|
1
|
+
require "color"
|
2
|
+
|
3
|
+
class Color::RGB
|
4
|
+
|
5
|
+
class << self
|
6
|
+
# Creates a `color` from an `Applescript` string,
|
7
|
+
# `Applescript` uses `short int` to make the RGB,
|
8
|
+
# `65535` is the maximum.
|
9
|
+
#
|
10
|
+
# Example:
|
11
|
+
#
|
12
|
+
# Color::RGB.from_applescript "65535,65535,65535"
|
13
|
+
# => <RGB [#ffffff]>
|
14
|
+
#
|
15
|
+
def from_applescript(applescript_string)
|
16
|
+
applescript_string.gsub!(/\{|\}/, "")
|
17
|
+
rgb = applescript_string.strip.split(",")
|
18
|
+
colors = rgb.map do |value|
|
19
|
+
value.to_i / 257
|
20
|
+
end
|
21
|
+
Color::RGB.new(*colors)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Converts an instance of `Color` to an `Applescript`
|
26
|
+
# string color format.
|
27
|
+
def to_applescript
|
28
|
+
rgb = [self.red.to_i * 257, self.green.to_i * 257, self.blue.to_i * 257].join(", ")
|
29
|
+
"{#{rgb}}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
module Wasko
|
34
|
+
# This class will be used to handle (aptly named, it is)
|
35
|
+
# all things concerning Color. Internally we'll be mostly
|
36
|
+
# using the [color gem](http://rubydoc.info/gems/color/1.4.1/frames)
|
37
|
+
class Color
|
38
|
+
|
39
|
+
# Tries to get a `Color` from a string, will return `false`
|
40
|
+
# if it fails to do so, if it does recognize a color converts it
|
41
|
+
# to a format that `Applescript` will support.
|
42
|
+
#
|
43
|
+
# At the moment support all named css-colors (like `red`, `aliceblue`, etc.)
|
44
|
+
# and all hex-colors.
|
45
|
+
def self.color_from_string(color_string)
|
46
|
+
return ::Color::RGB.from_html(color_string) if hex_color?(color_string)
|
47
|
+
return ::Color::RGB.from_html(names_hash[color_string]) if named_color?(color_string)
|
48
|
+
false
|
49
|
+
end
|
50
|
+
|
51
|
+
# Looks through all the named css colors
|
52
|
+
def self.named_color?(color_string)
|
53
|
+
names_hash.keys.include?(color_string)
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.hex_color?(color_string)
|
57
|
+
# Blatantly stolen from [here](http://www.geekzilla.co.uk/View05C802F8-F1DF-4097-A969-0EACB51C7834.htm)
|
58
|
+
color_string =~ /^#?([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?$/
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.names_hash
|
62
|
+
{
|
63
|
+
"aliceblue" => "#f0f8ff",
|
64
|
+
"antiquewhite" => "#faebd7",
|
65
|
+
"aqua" => "#00ffff",
|
66
|
+
"aquamarine" => "#7fffd4",
|
67
|
+
"azure" => "#f0ffff",
|
68
|
+
"beige" => "#f5f5dc",
|
69
|
+
"bisque" => "#ffe4c4",
|
70
|
+
"black" => "#000000",
|
71
|
+
"blanchedalmond" => "#ffebcd",
|
72
|
+
"blue" => "#0000ff",
|
73
|
+
"blueviolet" => "#8a2be2",
|
74
|
+
"brown" => "#a52a2a",
|
75
|
+
"burlywood" => "#deb887",
|
76
|
+
"cadetblue" => "#5f9ea0",
|
77
|
+
"chartreuse" => "#7fff00",
|
78
|
+
"chocolate" => "#d2691e",
|
79
|
+
"coral" => "#ff7f50",
|
80
|
+
"cornflowerblue" => "#6495ed",
|
81
|
+
"cornsilk" => "#fff8dc",
|
82
|
+
"crimson" => "#dc143c",
|
83
|
+
"cyan" => "#00ffff",
|
84
|
+
"darkblue" => "#00008b",
|
85
|
+
"darkcyan" => "#008b8b",
|
86
|
+
"darkgoldenrod" => "#b8860b",
|
87
|
+
"darkgray" => "#a9a9a9",
|
88
|
+
"darkgrey" => "#a9a9a9",
|
89
|
+
"darkgreen" => "#006400",
|
90
|
+
"darkkhaki" => "#bdb76b",
|
91
|
+
"darkmagenta" => "#8b008b",
|
92
|
+
"darkolivegreen" => "#556b2f",
|
93
|
+
"darkorange" => "#ff8c00",
|
94
|
+
"darkorchid" => "#9932cc",
|
95
|
+
"darkred" => "#8b0000",
|
96
|
+
"darksalmon" => "#e9967a",
|
97
|
+
"darkseagreen" => "#8fbc8f",
|
98
|
+
"darkslateblue" => "#483d8b",
|
99
|
+
"darkslategray" => "#2f4f4f",
|
100
|
+
"darkslategrey" => "#2f4f4f",
|
101
|
+
"darkturquoise" => "#00ced1",
|
102
|
+
"darkviolet" => "#9400d3",
|
103
|
+
"deeppink" => "#ff1493",
|
104
|
+
"deepskyblue" => "#00bfff",
|
105
|
+
"dimgray" => "#696969",
|
106
|
+
"dimgrey" => "#696969",
|
107
|
+
"dodgerblue" => "#1e90ff",
|
108
|
+
"firebrick" => "#b22222",
|
109
|
+
"floralwhite" => "#fffaf0",
|
110
|
+
"forestgreen" => "#228b22",
|
111
|
+
"fuchsia" => "#ff00ff",
|
112
|
+
"gainsboro" => "#dcdcdc",
|
113
|
+
"ghostwhite" => "#f8f8ff",
|
114
|
+
"gold" => "#ffd700",
|
115
|
+
"goldenrod" => "#daa520",
|
116
|
+
"gray" => "#808080",
|
117
|
+
"grey" => "#808080",
|
118
|
+
"green" => "#008000",
|
119
|
+
"greenyellow" => "#adff2f",
|
120
|
+
"honeydew" => "#f0fff0",
|
121
|
+
"hotpink" => "#ff69b4",
|
122
|
+
"indianred" => "#cd5c5c",
|
123
|
+
"indigo" => "#4b0082",
|
124
|
+
"ivory" => "#fffff0",
|
125
|
+
"khaki" => "#f0e68c",
|
126
|
+
"lavender" => "#e6e6fa",
|
127
|
+
"lavenderblush" => "#fff0f5",
|
128
|
+
"lawngreen" => "#7cfc00",
|
129
|
+
"lemonchiffon" => "#fffacd",
|
130
|
+
"lightblue" => "#add8e6",
|
131
|
+
"lightcoral" => "#f08080",
|
132
|
+
"lightcyan" => "#e0ffff",
|
133
|
+
"lightgoldenrodyellow" => "#fafad2",
|
134
|
+
"lightgray" => "#d3d3d3",
|
135
|
+
"lightgrey" => "#d3d3d3",
|
136
|
+
"lightgreen" => "#90ee90",
|
137
|
+
"lightpink" => "#ffb6c1",
|
138
|
+
"lightsalmon" => "#ffa07a",
|
139
|
+
"lightseagreen" => "#20b2aa",
|
140
|
+
"lightskyblue" => "#87cefa",
|
141
|
+
"lightslategray" => "#778899",
|
142
|
+
"lightslategrey" => "#778899",
|
143
|
+
"lightsteelblue" => "#b0c4de",
|
144
|
+
"lightyellow" => "#ffffe0",
|
145
|
+
"lime" => "#00ff00",
|
146
|
+
"limegreen" => "#32cd32",
|
147
|
+
"linen" => "#faf0e6",
|
148
|
+
"magenta" => "#ff00ff",
|
149
|
+
"maroon" => "#800000",
|
150
|
+
"mediumaquamarine" => "#66cdaa",
|
151
|
+
"mediumblue" => "#0000cd",
|
152
|
+
"mediumorchid" => "#ba55d3",
|
153
|
+
"mediumpurple" => "#9370d8",
|
154
|
+
"mediumseagreen" => "#3cb371",
|
155
|
+
"mediumslateblue" => "#7b68ee",
|
156
|
+
"mediumspringgreen" => "#00fa9a",
|
157
|
+
"mediumturquoise" => "#48d1cc",
|
158
|
+
"mediumvioletred" => "#c71585",
|
159
|
+
"midnightblue" => "#191970",
|
160
|
+
"mintcream" => "#f5fffa",
|
161
|
+
"mistyrose" => "#ffe4e1",
|
162
|
+
"moccasin" => "#ffe4b5",
|
163
|
+
"navajowhite" => "#ffdead",
|
164
|
+
"navy" => "#000080",
|
165
|
+
"oldlace" => "#fdf5e6",
|
166
|
+
"olive" => "#808000",
|
167
|
+
"olivedrab" => "#6b8e23",
|
168
|
+
"orange" => "#ffa500",
|
169
|
+
"orangered" => "#ff4500",
|
170
|
+
"orchid" => "#da70d6",
|
171
|
+
"palegoldenrod" => "#eee8aa",
|
172
|
+
"palegreen" => "#98fb98",
|
173
|
+
"paleturquoise" => "#afeeee",
|
174
|
+
"palevioletred" => "#d87093",
|
175
|
+
"papayawhip" => "#ffefd5",
|
176
|
+
"peachpuff" => "#ffdab9",
|
177
|
+
"peru" => "#cd853f",
|
178
|
+
"pink" => "#ffc0cb",
|
179
|
+
"plum" => "#dda0dd",
|
180
|
+
"powderblue" => "#b0e0e6",
|
181
|
+
"purple" => "#800080",
|
182
|
+
"red" => "#ff0000",
|
183
|
+
"rosybrown" => "#bc8f8f",
|
184
|
+
"royalblue" => "#4169e1",
|
185
|
+
"saddlebrown" => "#8b4513",
|
186
|
+
"salmon" => "#fa8072",
|
187
|
+
"sandybrown" => "#f4a460",
|
188
|
+
"seagreen" => "#2e8b57",
|
189
|
+
"seashell" => "#fff5ee",
|
190
|
+
"sienna" => "#a0522d",
|
191
|
+
"silver" => "#c0c0c0",
|
192
|
+
"skyblue" => "#87ceeb",
|
193
|
+
"slateblue" => "#6a5acd",
|
194
|
+
"slategray" => "#708090",
|
195
|
+
"slategrey" => "#708090",
|
196
|
+
"snow" => "#fffafa",
|
197
|
+
"springgreen" => "#00ff7f",
|
198
|
+
"steelblue" => "#4682b4",
|
199
|
+
"tan" => "#d2b48c",
|
200
|
+
"teal" => "#008080",
|
201
|
+
"thistle" => "#d8bfd8",
|
202
|
+
"tomato" => "#ff6347",
|
203
|
+
"turquoise" => "#40e0d0",
|
204
|
+
"violet" => "#ee82ee",
|
205
|
+
"wheat" => "#f5deb3",
|
206
|
+
"white" => "#ffffff",
|
207
|
+
"whitesmoke" => "#f5f5f5",
|
208
|
+
"yellow" => "#ffff00",
|
209
|
+
"yellowgreen" => "#9acd32"
|
210
|
+
}
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require "fileutils"
|
2
|
+
|
3
|
+
module Wasko
|
4
|
+
# This class will handle all things considering
|
5
|
+
# loading and saving configuration. It should work
|
6
|
+
# like this.
|
7
|
+
#
|
8
|
+
# * User sets all things to his liking
|
9
|
+
# * User writes to a `.color` file in `~/.wasko`
|
10
|
+
# * User can share/edit this `.color` file
|
11
|
+
# * User can load `.color` file to restore settings
|
12
|
+
#
|
13
|
+
class Configuration
|
14
|
+
class << self
|
15
|
+
|
16
|
+
# All config files are stored in `~/.wasko/`
|
17
|
+
def wasko_directory
|
18
|
+
wasko_path = File.join(ENV['HOME'], ".wasko")
|
19
|
+
unless File.exists?(wasko_path) && File.directory?(wasko_path)
|
20
|
+
FileUtils.mkdir_p File.join(ENV['HOME'], ".wasko")
|
21
|
+
end
|
22
|
+
wasko_path
|
23
|
+
end
|
24
|
+
|
25
|
+
# All possible `.color` themes
|
26
|
+
def all_themes
|
27
|
+
Dir.chdir(wasko_directory) do |path|
|
28
|
+
Dir["*.color"].map do |filename|
|
29
|
+
filename.gsub(/\.color$/, "")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Blatantly stolen from [here](http://stackoverflow.com/questions/1032104/regex-for-finding-valid-filename)
|
35
|
+
# Spots all obvious bad filenames
|
36
|
+
def valid_name?(name)
|
37
|
+
name =~ /^[^\/?*:;{}\\]+$/
|
38
|
+
end
|
39
|
+
|
40
|
+
# File path of the color theme file
|
41
|
+
def config_file_with_name(name)
|
42
|
+
File.join(wasko_directory, "#{name}.color")
|
43
|
+
end
|
44
|
+
|
45
|
+
# Setup the color theme with the hash.
|
46
|
+
def color_theme_from_hash(name)
|
47
|
+
return {} unless all_themes.include?(name)
|
48
|
+
return {} unless Hash === YAML::load(File.open(config_file_with_name(name)))
|
49
|
+
YAML::load(File.open(config_file_with_name(name)))
|
50
|
+
end
|
51
|
+
|
52
|
+
# Transform a color theme to a hash
|
53
|
+
def color_theme_to_hash
|
54
|
+
%w(background_color foreground_color bold_color cursor_color font_size font_name).inject({}) do |hash, value|
|
55
|
+
hash[value] = Wasko.send(value)
|
56
|
+
hash
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# ## Loading and saving colors
|
61
|
+
|
62
|
+
# Draw the saved colors
|
63
|
+
def load_colors!(name)
|
64
|
+
color_theme_from_hash(name).each do |object, color|
|
65
|
+
Wasko.send("set_#{object}", color)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# Write out the colors
|
70
|
+
def save_colors!(name)
|
71
|
+
File.open(config_file_with_name(name), 'w') do |out|
|
72
|
+
out.write(configuration_help)
|
73
|
+
out.write(color_theme_to_hash.to_yaml)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def configuration_help
|
78
|
+
<<HELP
|
79
|
+
# This is a theme used by the wasko gem, it's nothing
|
80
|
+
# more than regular yaml. So (ab)use as you would normally
|
81
|
+
# do. The only thing to note is, colors take only valid
|
82
|
+
# css colors and this comment can be deleted.
|
83
|
+
HELP
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
module Wasko
|
2
|
+
# A module aimed at creating color schemes for terminals
|
3
|
+
# Pretty straightforward, no?
|
4
|
+
module Palette
|
5
|
+
# Since I change my mind pretty frequently on
|
6
|
+
# color schemes etc. Putting the actual logic in
|
7
|
+
# a class so it's easier to extend.
|
8
|
+
class TheOriginal
|
9
|
+
# Takes a valid css color string and an optional
|
10
|
+
# contrast argument. The contrast is useful to tweak
|
11
|
+
# the output of things.
|
12
|
+
#
|
13
|
+
# It sets a base color `@base` and creates a color
|
14
|
+
# palette derived from the base color using the
|
15
|
+
# `colors!` method.
|
16
|
+
def initialize(color_string, contrast = 0)
|
17
|
+
@colors = {}
|
18
|
+
@base = Wasko::Color.color_from_string(color_string)
|
19
|
+
@base = white unless @base
|
20
|
+
@contrast = 30 + contrast
|
21
|
+
colors!
|
22
|
+
end
|
23
|
+
|
24
|
+
# Returns a `color`-instance of white
|
25
|
+
def white
|
26
|
+
Wasko::Color.color_from_string("white")
|
27
|
+
end
|
28
|
+
|
29
|
+
# Returns a `color`-instance of black
|
30
|
+
def black
|
31
|
+
Wasko::Color.color_from_string("black")
|
32
|
+
end
|
33
|
+
|
34
|
+
# Checks the brightness of the base color and
|
35
|
+
# returns the appropriate opposite color.
|
36
|
+
#
|
37
|
+
# For example black will return white, white will
|
38
|
+
# return black.
|
39
|
+
def opposite_color
|
40
|
+
@base.brightness > 0.5 ? black : white
|
41
|
+
end
|
42
|
+
|
43
|
+
# To calculate colors that will fit our base color
|
44
|
+
# we need to find out to brighten them, or darken
|
45
|
+
# them
|
46
|
+
def inverse_brightness
|
47
|
+
@base.brightness > 0.5 ? -1 : 1
|
48
|
+
end
|
49
|
+
|
50
|
+
# Hash of the color palette
|
51
|
+
# TODO: attr_accessible
|
52
|
+
def colors
|
53
|
+
@colors
|
54
|
+
end
|
55
|
+
|
56
|
+
# Creates a palette based on the `@base`-color. This
|
57
|
+
# generates a color palette which has taken a good
|
58
|
+
# look at [Solarized](http://ethanschoonover.com/solarized)
|
59
|
+
# The plus side is you can use any base color, the
|
60
|
+
# downside is, the colors won't be picked as well as
|
61
|
+
# when using [Solarized](http://ethanschoonover.com/solarized) so if that's what you need, check it out.
|
62
|
+
def colors!
|
63
|
+
p = {}
|
64
|
+
p[:base] = @base
|
65
|
+
p[:foreground] = @base.mix_with(opposite_color, @contrast + 18)
|
66
|
+
p[:bold] = @base.mix_with(opposite_color, @contrast + 19.5)
|
67
|
+
p[:selection] = @base.adjust_brightness inverse_brightness * @contrast
|
68
|
+
p[:selected] = p[:bold]
|
69
|
+
p[:cursor] = p[:foreground]
|
70
|
+
|
71
|
+
# ANSI Colors
|
72
|
+
p[:red] = mix_base_with("red", 50, inverse_brightness * @contrast)
|
73
|
+
p[:green] = mix_base_with("green", 50, inverse_brightness * @contrast)
|
74
|
+
p[:yellow] = mix_base_with("yellow", 50, inverse_brightness * @contrast)
|
75
|
+
p[:white] = mix_base_with("white", 35, inverse_brightness * @contrast)
|
76
|
+
p[:black] = mix_base_with("black", 35, inverse_brightness * @contrast)
|
77
|
+
p[:blue] = mix_base_with("blue", 50, inverse_brightness * (@contrast))
|
78
|
+
p[:magenta] = mix_base_with("#CA1F7B", 35, inverse_brightness * @contrast)
|
79
|
+
p[:cyan] = mix_base_with("#00FFFF", 50, inverse_brightness * (@contrast - 20))
|
80
|
+
@colors = p
|
81
|
+
end
|
82
|
+
|
83
|
+
# Just a utility method that mixes colors, for more
|
84
|
+
# info on this check the docs of the `color`-gem.
|
85
|
+
def mix_base_with(color_name, mix_value = 50, brightness = 30)
|
86
|
+
@base.mix_with(Wasko::Color.color_from_string(color_name), mix_value).adjust_brightness(brightness)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|