Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/ruby
- # Tool to convert Ergodox-EZ Configurator generated keymaps
- # to something a little easier to read/work with.
- #
- # runs like:
- # cleanup.rb [downloaded keymap.c] > [destination keymap.c]
- 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, <<-END
- LAYOUT_ergodox(
- #{dent}// 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>
- #{ddnt}// 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}),
- END
- )
- 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)
Add Comment
Please, Sign In to add comment