Replace default colors with an rgb gradient
This commit is contained in:
parent
b20b1bf0d9
commit
66f0e181f8
|
@ -10,33 +10,50 @@ class Keyboard
|
||||||
@raw_layout = File.read(name)
|
@raw_layout = File.read(name)
|
||||||
i = 0
|
i = 0
|
||||||
c = @raw_layout.chars
|
c = @raw_layout.chars
|
||||||
|
|
||||||
# iterates over characters in layout
|
# iterates over characters in layout
|
||||||
while i < c.size
|
while i < c.size
|
||||||
# outputs a hashmap of characters inside [] in the layout and sets each to 0 uses
|
# outputs a hashmap of characters inside [] in the layout and sets each to 0 uses
|
||||||
if c[i] == '['
|
if c[i] == '['
|
||||||
until c[i+1] == ']'
|
until c[i + 1] == ']'
|
||||||
# character escape
|
# character escape
|
||||||
if c[i+1] == '\\'
|
if c[i + 1] == '\\'
|
||||||
i += 1
|
i += 1
|
||||||
end
|
|
||||||
@layout[c[i += 1]] = 0
|
|
||||||
end
|
end
|
||||||
|
@layout[c[i += 1]] = 0
|
||||||
|
end
|
||||||
end
|
end
|
||||||
i += 1
|
i += 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_s(io : IO)
|
def to_s(io : IO)
|
||||||
# remove character escapes
|
# remove character escapes
|
||||||
formatted = @raw_layout.gsub(/\\(\S)/, &.[1])
|
formatted = @raw_layout.gsub(/\\(\S)/, &.[1])
|
||||||
# defines heatmap colors
|
|
||||||
colors = %i(default light_yellow yellow light_red red)
|
# an rgb gradient from purple to red
|
||||||
|
# defines the heatmap colors
|
||||||
|
colors = [
|
||||||
|
{74, 16, 99},
|
||||||
|
{113, 30, 114},
|
||||||
|
{137, 40, 107},
|
||||||
|
{160, 50, 100},
|
||||||
|
{183, 60, 94},
|
||||||
|
{207, 70, 87},
|
||||||
|
{230, 80, 80},
|
||||||
|
]
|
||||||
|
|
||||||
# add a keypress heatmap
|
# add a keypress heatmap
|
||||||
max = @layout.to_a.sort_by { |k, v| v }.reverse.to_h.values[0]
|
max = @layout.to_a.sort_by { |_, v| v }.reverse.to_h.values[0]
|
||||||
formatted = formatted.gsub(/\[(.{1,2})\]/) {|m|
|
formatted = formatted.gsub(/\[(.{1,2})\]/) { |m|
|
||||||
# calculate proportion of key usage to colors
|
# calculate proportion of key usage to colors
|
||||||
m.colorize.fore(:white).back(colors[((@layout[m.chars[1]] * (colors.size - 1)) / max).to_i])
|
char_color = colors[((@layout[m.chars[1]] * (colors.size - 1)) / max).to_i]
|
||||||
|
|
||||||
|
# set the key color
|
||||||
|
m.colorize.fore(:white).back(Colorize::ColorRGB.new(char_color[0].to_u8, char_color[1].to_u8, char_color[2].to_u8))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# output the result
|
||||||
io << formatted
|
io << formatted
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue