Created
January 22, 2019 20:52
-
-
Save dougmarcey/5e9f960f6ee5a58fd28e41f4fe3d9756 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/ruby | |
def fix_keymap(km_str) | |
km_str.gsub!(/LALT\(LCTL\(LGUI\(LSFT\((.*?)\)\)\)\)/,'HYPR(\1)') | |
km_str.gsub!(/LGUI\(LSFT\((.*?)\)\)/,'SGUI(\1)') | |
km_str.gsub!(/LALT\(LCTL\((.*?)\)\)/,'LCA(\1)') | |
km_str.gsub!(/LCTL\(LGUI\(LSFT\((.*?)\)\)\)/,'LCGS(\1)') | |
km_str.gsub!(/LCTL\(LSFT\((.*?)\)\)/,'LCS(\1)') | |
km_str.gsub!(/MT\(MOD_HYPR, (.*?)\)/,'HYPR_T(\1)') | |
km_str.gsub!(/MT\(MOD_MEH, (.*?)\)/,'MEH_T(\1)') | |
km_str.gsub!(/KC_TRANSPARENT/,'_______') | |
km_str.gsub!(/KC_NO/,'XXXXXXX') | |
km_str.gsub!(/KC_ENTER/,'KC_ENT') | |
km_str.gsub!(/KC_ESCAPE/,'KC_ESC') | |
km_str.gsub!(/KC_BSPACE/,'KC_BSPC') | |
km_str.gsub!(/KC_SPACE/,'KC_SPC') | |
km_str.gsub!(/KC_MINUS/,'KC_MINS') | |
km_str.gsub!(/KC_EQUAL/,'KC_EQL') | |
km_str.gsub!(/KC_LBRACKET/,'KC_LBRC') | |
km_str.gsub!(/KC_RBRACKET/,'KC_RBRC') | |
km_str.gsub!(/KC_BSLASH/,'KC_BSLS') | |
km_str.gsub!(/KC_NONUS_HASH/,'KC_NUHS') | |
km_str.gsub!(/KC_SCOLON/,'KC_SCLN') | |
km_str.gsub!(/KC_QUOTE/,'KC_QUOT') | |
km_str.gsub!(/KC_GRAVE/,'KC_GRV') | |
km_str.gsub!(/KC_COMMA/,'KC_COMM') | |
km_str.gsub!(/KC_SLASH/,'KC_SLSH') | |
km_str.gsub!(/KC_NONUS_BSLASH/,'KC_NUBS') | |
km_str.gsub!(/KC_CAPSLOCK/,'KC_CLCK') | |
km_str.gsub!(/KC_CAPSLOCK/,'KC_CAPS') | |
km_str.gsub!(/KC_SCROLLLOCK/,'KC_SLCK') | |
km_str.gsub!(/KC_NUMLOCK/,'KC_NLCK') | |
km_str.gsub!(/KC_LOCKING_CAPS/,'KC_LCAP') | |
km_str.gsub!(/KC_LOCKING_NUM/,'KC_LNUM') | |
km_str.gsub!(/KC_LOCKING_SCROLL/,'KC_LSCR') | |
km_str.gsub!(/KC_PSCREEN/,'KC_PSCR') | |
km_str.gsub!(/KC_PAUSE/,'KC_PAUS') | |
km_str.gsub!(/KC_PAUSE/,'KC_BRK') | |
km_str.gsub!(/KC_INSERT/,'KC_INS') | |
km_str.gsub!(/KC_DELETE/,'KC_DEL') | |
km_str.gsub!(/KC_PGDOWN/,'KC_PGDN') | |
km_str.gsub!(/KC_RIGHT/,'KC_RGHT') | |
km_str.gsub!(/KC_APPLICATION/,'KC_APP') | |
km_str.gsub!(/KC_EXECUTE/,'KC_EXEC') | |
km_str.gsub!(/KC_SELECT/,'KC_SLCT') | |
km_str.gsub!(/KC_AGAIN/,'KC_AGIN') | |
km_str.gsub!(/KC_PASTE/,'KC_PSTE') | |
km_str.gsub!(/KC_ALT_ERASE/,'KC_ERAS') | |
km_str.gsub!(/KC_CLEAR/,'KC_CLR') | |
km_str.gsub!(/KC_KP_SLASH/,'KC_PSLS') | |
km_str.gsub!(/KC_KP_ASTERISK/,'KC_PAST') | |
km_str.gsub!(/KC_KP_MINUS/,'KC_PMNS') | |
km_str.gsub!(/KC_KP_PLUS/,'KC_PPLS') | |
km_str.gsub!(/KC_KP_ENTER/,'KC_PENT') | |
km_str.gsub!(/KC_KP_1/,'KC_P1') | |
km_str.gsub!(/KC_KP_2/,'KC_P2') | |
km_str.gsub!(/KC_KP_3/,'KC_P3') | |
km_str.gsub!(/KC_KP_4/,'KC_P4') | |
km_str.gsub!(/KC_KP_5/,'KC_P5') | |
km_str.gsub!(/KC_KP_6/,'KC_P6') | |
km_str.gsub!(/KC_KP_7/,'KC_P7') | |
km_str.gsub!(/KC_KP_8/,'KC_P8') | |
km_str.gsub!(/KC_KP_9/,'KC_P9') | |
km_str.gsub!(/KC_KP_0/,'KC_P0') | |
km_str.gsub!(/KC_KP_DOT/,'KC_PDOT') | |
km_str.gsub!(/KC_KP_EQUAL/,'KC_PEQL') | |
km_str.gsub!(/KC_KP_COMMA/,'KC_PCMM') | |
km_str.gsub!(/KC_GRAVE/,'KC_ZKHK') | |
km_str.gsub!(/KC_INT1/,'KC_RO') | |
km_str.gsub!(/KC_INT2/,'KC_KANA') | |
km_str.gsub!(/KC_INT3/,'KC_JYEN') | |
km_str.gsub!(/KC_INT4/,'KC_HENK') | |
km_str.gsub!(/KC_INT5/,'KC_MHEN') | |
km_str.gsub!(/KC_LANG1/,'KC_HAEN') | |
km_str.gsub!(/KC_LANG2/,'KC_HANJ') | |
km_str.gsub!(/KC_LCTRL/,'KC_LCTL') | |
km_str.gsub!(/KC_LSHIFT/,'KC_LSFT') | |
km_str.gsub!(/KC_LGUI/,'KC_LCMD') | |
km_str.gsub!(/KC_LGUI/,'KC_LWIN') | |
km_str.gsub!(/KC_RCTRL/,'KC_RCTL') | |
km_str.gsub!(/KC_RSHIFT/,'KC_RSFT') | |
km_str.gsub!(/KC_RALT/,'KC_ALGR') | |
km_str.gsub!(/KC_RGUI/,'KC_RCMD') | |
km_str.gsub!(/KC_RGUI/,'KC_RWIN') | |
km_str.gsub!(/KC_SYSTEM_POWER/,'KC_PWR') | |
km_str.gsub!(/KC_SYSTEM_SLEEP/,'KC_SLEP') | |
km_str.gsub!(/KC_SYSTEM_WAKE/,'KC_WAKE') | |
km_str.gsub!(/KC_AUDIO_MUTE/,'KC_MUTE') | |
km_str.gsub!(/KC_AUDIO_VOL_UP/,'KC_VOLU') | |
km_str.gsub!(/KC_AUDIO_VOL_DOWN/,'KC_VOLD') | |
km_str.gsub!(/KC_MEDIA_NEXT_TRACK/,'KC_MNXT') | |
km_str.gsub!(/KC_MEDIA_PREV_TRACK/,'KC_MPRV') | |
km_str.gsub!(/KC_MEDIA_STOP/,'KC_MSTP') | |
km_str.gsub!(/KC_MEDIA_PLAY_PAUSE/,'KC_MPLY') | |
km_str.gsub!(/KC_MEDIA_SELECT/,'KC_MSEL') | |
km_str.gsub!(/KC_MEDIA_EJECT/,'KC_EJCT') | |
km_str.gsub!(/KC_MAIL/,'KC_MAIL') | |
km_str.gsub!(/KC_CALCULATOR/,'KC_CALC') | |
km_str.gsub!(/KC_MY_COMPUTER/,'KC_MYCM') | |
km_str.gsub!(/KC_WWW_SEARCH/,'KC_WSCH') | |
km_str.gsub!(/KC_WWW_HOME/,'KC_WHOM') | |
km_str.gsub!(/KC_WWW_BACK/,'KC_WBAK') | |
km_str.gsub!(/KC_WWW_FORWARD/,'KC_WFWD') | |
km_str.gsub!(/KC_WWW_STOP/,'KC_WSTP') | |
km_str.gsub!(/KC_WWW_REFRESH/,'KC_WREF') | |
km_str.gsub!(/KC_WWW_FAVORITES/,'KC_WFAV') | |
km_str.gsub!(/KC_MEDIA_FAST_FORWARD/,'KC_MFFD') | |
km_str.gsub!(/KC_MEDIA_REWIND/,'KC_MRWD') | |
km_str.gsub!(/KC_BRIGHTNESS_UP/,'KC_BRIU') | |
km_str.gsub!(/KC_BRIGHTNESS_DOWN/,'KC_BRID') | |
km_str.gsub!(/KC_PAUSE/,'KC_BRMU') | |
km_str.gsub!(/KC_SCROLLLOCK/,'KC_BRMD') | |
km_str.gsub!(/KC_MS_UP/,'KC_MS_U') | |
km_str.gsub!(/KC_MS_DOWN/,'KC_MS_D') | |
km_str.gsub!(/KC_MS_LEFT/,'KC_MS_L') | |
km_str.gsub!(/KC_MS_RIGHT/,'KC_MS_R') | |
km_str.gsub!(/KC_MS_BTN1/,'KC_BTN1') | |
km_str.gsub!(/KC_MS_BTN2/,'KC_BTN2') | |
km_str.gsub!(/KC_MS_BTN3/,'KC_BTN3') | |
km_str.gsub!(/KC_MS_BTN4/,'KC_BTN4') | |
km_str.gsub!(/KC_MS_BTN5/,'KC_BTN5') | |
km_str.gsub!(/KC_MS_WH_UP/,'KC_WH_U') | |
km_str.gsub!(/KC_MS_WH_DOWN/,'KC_WH_D') | |
km_str.gsub!(/KC_MS_WH_LEFT/,'KC_WH_L') | |
km_str.gsub!(/KC_MS_WH_RIGHT/,'KC_WH_R') | |
km_str.gsub!(/KC_MS_ACCEL0/,'KC_ACL0') | |
km_str.gsub!(/KC_MS_ACCEL1/,'KC_ACL1') | |
km_str.gsub!(/KC_MS_ACCEL2/,'KC_ACL2') | |
defines = <<-END_DEFS | |
#define LCGS(code) LCTL(LGUI(LSFT(code))) | |
#define LCS(code) LCTL(LSFT(code)) | |
END_DEFS | |
key_codes = km_str.scan /[A-Z][A-Z0-9_]*?(?:\(.*?\))?,/ | |
size = key_codes.sort_by(&:length).last.length | |
pad = " " * size | |
pad8 = pad * 4 | |
pad6 = pad8 + pad | |
pad7 = pad6 + pad | |
dent = " " * 4 | |
ddnt = dent * 2 | |
km_str.gsub!(/LAYOUT_ergodox\( | |
(?<line1>(?:[A-Z0-9_]*?(?:\(.*?\))?,){7}) | |
(?<line2>(?:[A-Z0-9_]*?(?:\(.*?\))?,){7}) | |
(?<line3>(?:[A-Z0-9_]*?(?:\(.*?\))?,){6}) | |
(?<line4>(?:[A-Z0-9_]*?(?:\(.*?\))?,){7}) | |
(?<line5>(?:[A-Z0-9_]*?(?:\(.*?\))?,){5}) | |
(?<line6>(?:[A-Z0-9_]*?(?:\(.*?\))?,){2}) | |
(?<line7>(?:[A-Z0-9_]*?(?:\(.*?\))?,){1}) | |
(?<line8>(?:[A-Z0-9_]*?(?:\(.*?\))?,){3}) | |
(?<line9>(?:[A-Z0-9_]*?(?:\(.*?\))?,){7}) | |
(?<line10>(?:[A-Z0-9_]*?(?:\(.*?\))?,){7}) | |
(?<line11>(?:[A-Z0-9_]*?(?:\(.*?\))?,){6}) | |
(?<line12>(?:[A-Z0-9_]*?(?:\(.*?\))?,){7}) | |
(?<line13>(?:[A-Z0-9_]*?(?:\(.*?\))?,){5}) | |
(?<line14>(?:[A-Z0-9_]*?(?:\(.*?\))?,){2}) | |
(?<line15>(?:[A-Z0-9_]*?(?:\(.*?\))?,){1}) | |
(?<line16>(?:[A-Z0-9_]*?(?:\(.*?\))?,){2}) | |
(?<lastkey>[A-Z0-9_]*?(?:\(.*?\))?) | |
\),/x, "LAYOUT_ergodox( | |
// left hand | |
#{dent}\\k<line1> | |
#{dent}\\k<line2> | |
#{dent}\\k<line3> | |
#{dent}\\k<line4> | |
#{dent}\\k<line5> | |
#{dent}#{pad6}\\k<line6> | |
#{dent}#{pad7}\\k<line7> | |
#{dent}#{pad8}\\k<line8> | |
// right hand | |
#{ddnt}\\k<line9> | |
#{ddnt}\\k<line10> | |
#{ddnt}#{pad}\\k<line11> | |
#{ddnt}\\k<line12> | |
#{ddnt}\\k<line13> | |
#{ddnt}\\k<line14> | |
#{ddnt}\\k<line15> | |
#{ddnt}\\k<line16>\\k<lastkey> | |
#{dent}),") | |
km_str.gsub!(/([A-Z_][A-Z0-9_]*?(?:\(.*?\))?,)/) {|k| "%-#{size}s" % k} | |
km_str.gsub!(/(enum custom_keycodes)/,"#{defines}\n\1") | |
km_str | |
end | |
keymap = File.read(ARGV[0]) | |
puts fix_keymap(keymap) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment