295 lines
5.7 KiB
Ruby
Executable file
295 lines
5.7 KiB
Ruby
Executable file
#!/usr/bin/env ruby
|
||
|
||
# https://developer.valvesoftware.com/wiki/Bind
|
||
|
||
keys = {
|
||
escape: {
|
||
title: 'Escape',
|
||
keycap: 'ESC',
|
||
},
|
||
tab: {
|
||
title: 'Tabulator',
|
||
keycap: '↹',
|
||
},
|
||
capslock: {
|
||
title: 'Capslock',
|
||
keycap: '⇪',
|
||
},
|
||
shift: {
|
||
title: 'Shift',
|
||
keycap: '⇧',
|
||
},
|
||
ctrl: {
|
||
title: 'Control',
|
||
keycap: 'CTL',
|
||
},
|
||
alt: {
|
||
title: 'ALT',
|
||
keycap: 'ALT',
|
||
},
|
||
space: {
|
||
title: 'Space',
|
||
keycap: 'SPACE',
|
||
},
|
||
backspace: {
|
||
title: 'Backspace',
|
||
keycap: '⇦',
|
||
},
|
||
enter: {
|
||
title: 'Enter',
|
||
keycap: '↵',
|
||
},
|
||
semicolon: {
|
||
title: 'Semicolon',
|
||
keycap: ';',
|
||
},
|
||
lwin: {
|
||
title: 'Left Super',
|
||
keycap: '⊞',
|
||
},
|
||
rwin: {
|
||
title: 'Right Super',
|
||
keycap: '⊞',
|
||
},
|
||
apps: {
|
||
title: 'Menu',
|
||
keycap: '≡',
|
||
},
|
||
numlock: {
|
||
title: 'Numlock',
|
||
keycap: 'NUM',
|
||
},
|
||
scrolllock: {
|
||
title: 'Scrollock',
|
||
keycap: 'SCR',
|
||
},
|
||
uparrow: {
|
||
title: 'Arrow Up',
|
||
keycap: '↑',
|
||
},
|
||
downarrow: {
|
||
title: 'Arrow Down',
|
||
keycap: '↓',
|
||
},
|
||
leftarrow: {
|
||
title: 'Arrow Left',
|
||
keycap: '←',
|
||
},
|
||
rightarrow: {
|
||
title: 'Arrow Right',
|
||
keycap: '→',
|
||
},
|
||
ins: {
|
||
title: 'Insert',
|
||
keycap: 'INS',
|
||
},
|
||
del: {
|
||
title: 'Delete',
|
||
keycap: '⇨',
|
||
},
|
||
pgdn: {
|
||
title: 'Page Down',
|
||
keycap: '⇣',
|
||
},
|
||
pgup: {
|
||
title: 'Page Up',
|
||
keycap: '⇡',
|
||
},
|
||
home: {
|
||
title: 'Home',
|
||
keycap: '⌂',
|
||
},
|
||
end: {
|
||
title: 'End',
|
||
keycap: '⇥',
|
||
},
|
||
pause: {
|
||
title: 'Pause',
|
||
keycap: '⏸',
|
||
},
|
||
kp_end: {
|
||
title: 'Keypad 1 (End)',
|
||
keycap: '1',
|
||
},
|
||
kp_downarrow: {
|
||
title: 'Keypad 2 (Arrow Down)',
|
||
keycap: '2',
|
||
},
|
||
kp_pgdn: {
|
||
title: 'Keypad 3 (Page Down)',
|
||
keycap: '3',
|
||
},
|
||
kp_leftarrow: {
|
||
title: 'Keypad 4 (Arrow Left)',
|
||
keycap: '4',
|
||
},
|
||
kp_5: {
|
||
title: 'Keypad 5',
|
||
keycap: '5',
|
||
},
|
||
kp_rightarrow: {
|
||
title: 'Keypad 6 (Arrow Right)',
|
||
keycap: '6',
|
||
},
|
||
kp_home: {
|
||
title: 'Keypad 7 (Home)',
|
||
keycap: '7',
|
||
},
|
||
kp_uparrow: {
|
||
title: 'Keypad 8 (Arrow Up)',
|
||
keycap: '8',
|
||
},
|
||
kp_pgup: {
|
||
title: 'Keypad 9 (Page Up)',
|
||
keycap: '9',
|
||
},
|
||
kp_enter: {
|
||
title: 'Keypad Enter',
|
||
keycap: '↵',
|
||
},
|
||
kp_ins: {
|
||
title: 'Keypad 0',
|
||
keycap: '0',
|
||
},
|
||
kp_del: {
|
||
title: 'Keypad .',
|
||
keycap: '.',
|
||
},
|
||
kp_slash: {
|
||
title: 'Keypad /',
|
||
keycap: '/',
|
||
},
|
||
kp_multiply: {
|
||
title: 'Keypad *',
|
||
keycap: '*',
|
||
},
|
||
kp_minus: {
|
||
title: 'Keypad -',
|
||
keycap: '-',
|
||
},
|
||
kp_plus: {
|
||
title: 'Keypad +',
|
||
keycap: '+',
|
||
},
|
||
mwheeldown: {
|
||
title: 'Mousewheel Down',
|
||
keycap: '⇟',
|
||
},
|
||
mwheelup: {
|
||
title: 'Mousewheel Up',
|
||
keycap: '⇞',
|
||
},
|
||
mouse1: {
|
||
title: 'Mouse 1',
|
||
keycap: '🖱️1',
|
||
},
|
||
mouse2: {
|
||
title: 'Mouse 2',
|
||
keycap: '🖱️2',
|
||
},
|
||
mouse3: {
|
||
title: 'Mouse 3',
|
||
keycap: '🖱️3',
|
||
},
|
||
mouse4: {
|
||
title: 'Mouse 4',
|
||
keycap: '🖱️4',
|
||
},
|
||
mouse5: {
|
||
title: 'Mouse 5',
|
||
keycap: '🖱️5',
|
||
},
|
||
}
|
||
%(0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜß,.+-*/#^´).each_char do |char|
|
||
keys[char.to_sym] = {
|
||
title: char,
|
||
'keymap': char,
|
||
}
|
||
end
|
||
(1..12).each do |num|
|
||
keys[:"F#{num}"] = {
|
||
title: "Function #{num}",
|
||
'keymap': "F#{num}",
|
||
}
|
||
end
|
||
|
||
keycaps = {
|
||
'h1': {
|
||
width: 1,
|
||
points: '-0.44,-0.44 0.44,-0.44 0.44,0.44 -0.44,0.44',
|
||
},
|
||
'h1.25': {
|
||
width: 1.25,
|
||
points: '-0.565,-0.44 0.565,-0.44 0.565,0.44 -0.565,0.44',
|
||
},
|
||
'h1.5': {
|
||
width: 1.5,
|
||
points: '-0.69,-0.44 0.69,-0.44 0.69,0.44 -0.69,0.44',
|
||
},
|
||
'h1.75': {
|
||
width: 1.75,
|
||
points: '-0.815,-0.44 0.815,-0.44 0.815,0.44 -0.815,0.44',
|
||
},
|
||
'h2': {
|
||
width: 2,
|
||
points: '-0.94,-0.44 0.94,-0.44 0.94,0.44 -0.94,0.44',
|
||
},
|
||
'h2.5': {
|
||
width: 2.5,
|
||
points: '-1.19,-0.44 1.19,-0.44 1.19,0.44 -1.19,0.44',
|
||
},
|
||
'h2.75': {
|
||
width: 2.75,
|
||
points: '-1.315,-0.44 1.315,-0.44 1.315,0.44 -1.315,0.44',
|
||
},
|
||
'h6.5': {
|
||
width: 6.5,
|
||
points: '-3.19,-0.44 3.19,-0.44 3.19,0.44 -3.19,0.44',
|
||
},
|
||
'v2': {
|
||
width: 1,
|
||
points: '-0.44,-0.44 0.44,-0.44 0.44,1.44 -0.44,1.44',
|
||
},
|
||
'enter_iso': {
|
||
width: 1.5,
|
||
points: '-0.69,-0.44 0.69,-0.44 0.69,1.44 -0.44,1.44 -0.44,0.44 -0.69,0.44',
|
||
},
|
||
}
|
||
|
||
keyboard = {
|
||
0 => 'ESC :1 F1 F2 F3 F4 :.5 F5 F6 F7 F8 :.5 F9 F10 F11 F12 :.25 PNT ROL PAU',
|
||
1.25 => '^ 1 2 3 4 5 6 7 8 9 0 ß ´ BACKSP:h2 :.25 INS HOM PUP :.25 NUM / * -',
|
||
2.25 => 'TAB:h1.5 Q W E R T Z U I O P Ü + ENT:enter_iso :.25 DEL END PDN :.25 7 8 9 +:v2',
|
||
3.25 => 'CAPS:h1.75 A S D F G H J K L Ö Ä # :1.25 :.25 :1 :1 :1 :.25 4 5 6',
|
||
4.25 => 'SHIFT:h1.25 < Y X C V B N M , . - SHIFT:h2.75 :.25 :1 ARU :1 :.25 1 2 3 ENT:v2',
|
||
5.25 => 'CTL:h1.25 SUP:h1.25 ALT:h1.25 SPACE:h6.5 AGR:h1.25 SUP:h1.25 MENU CTL:h1.25 :.25 ARL ARD ARR :.25 0:h2 DEL'
|
||
}
|
||
|
||
keyboard_keys = []
|
||
total_h = 0
|
||
total_v = 0
|
||
|
||
keyboard.each do |row_v, row_text|
|
||
row_h = 0
|
||
row_text.split.each do |element|
|
||
if element.start_with? ':'
|
||
row_h += element[1..].to_f
|
||
else
|
||
key, keycap = element.split(':')
|
||
keycap ||= :h1
|
||
keyboard_keys.append({
|
||
name: key,
|
||
keycap: keycap,
|
||
x: row_h + keycaps[keycap.to_sym][:width]/2.0,
|
||
y: 0.5 + row_v,
|
||
})
|
||
row_h += keycaps[keycap.to_sym][:width]
|
||
end
|
||
end
|
||
total_h = [total_h, row_h].max
|
||
total_v = [total_v, row_v].max
|
||
end
|
||
|
||
require "erb"
|
||
html = ERB.new(File.read(File.join(__dir__, 'keyboard.erb'))).result_with_hash({keys: keyboard_keys, total_h: total_h, total_v: total_v+1})
|
||
File.write(File.join(__dir__, 'keyboard.html'), html)
|