Guest User

Untitled

a guest
Jan 23rd, 2019
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.60 KB | None | 0 0
  1. #!/usr/bin/ruby
  2.  
  3. # Tool to convert Ergodox-EZ Configurator generated keymaps
  4. # to something a little easier to read/work with.
  5. #
  6. # runs like:
  7. # cleanup.rb [downloaded keymap.c] > [destination keymap.c]
  8.  
  9.  
  10. def fix_keymap(km_str)
  11. km_str.gsub!(/LALT\(LCTL\(LGUI\(LSFT\((.*?)\)\)\)\)/,'HYPR(\1)')
  12. km_str.gsub!(/LGUI\(LSFT\((.*?)\)\)/,'SGUI(\1)')
  13. km_str.gsub!(/LALT\(LCTL\((.*?)\)\)/,'LCA(\1)')
  14. km_str.gsub!(/LCTL\(LGUI\(LSFT\((.*?)\)\)\)/,'LCGS(\1)')
  15. km_str.gsub!(/LCTL\(LSFT\((.*?)\)\)/,'LCS(\1)')
  16. km_str.gsub!(/MT\(MOD_HYPR, (.*?)\)/,'HYPR_T(\1)')
  17. km_str.gsub!(/MT\(MOD_MEH, (.*?)\)/,'MEH_T(\1)')
  18.  
  19. km_str.gsub!(/KC_TRANSPARENT/,'_______')
  20. km_str.gsub!(/KC_NO/,'XXXXXXX')
  21. km_str.gsub!(/KC_ENTER/,'KC_ENT')
  22. km_str.gsub!(/KC_ESCAPE/,'KC_ESC')
  23. km_str.gsub!(/KC_BSPACE/,'KC_BSPC')
  24. km_str.gsub!(/KC_SPACE/,'KC_SPC')
  25. km_str.gsub!(/KC_MINUS/,'KC_MINS')
  26. km_str.gsub!(/KC_EQUAL/,'KC_EQL')
  27. km_str.gsub!(/KC_LBRACKET/,'KC_LBRC')
  28. km_str.gsub!(/KC_RBRACKET/,'KC_RBRC')
  29. km_str.gsub!(/KC_BSLASH/,'KC_BSLS')
  30. km_str.gsub!(/KC_NONUS_HASH/,'KC_NUHS')
  31. km_str.gsub!(/KC_SCOLON/,'KC_SCLN')
  32. km_str.gsub!(/KC_QUOTE/,'KC_QUOT')
  33. km_str.gsub!(/KC_GRAVE/,'KC_GRV')
  34. km_str.gsub!(/KC_COMMA/,'KC_COMM')
  35. km_str.gsub!(/KC_SLASH/,'KC_SLSH')
  36. km_str.gsub!(/KC_NONUS_BSLASH/,'KC_NUBS')
  37. km_str.gsub!(/KC_CAPSLOCK/,'KC_CLCK')
  38. km_str.gsub!(/KC_CAPSLOCK/,'KC_CAPS')
  39. km_str.gsub!(/KC_SCROLLLOCK/,'KC_SLCK')
  40. km_str.gsub!(/KC_NUMLOCK/,'KC_NLCK')
  41. km_str.gsub!(/KC_LOCKING_CAPS/,'KC_LCAP')
  42. km_str.gsub!(/KC_LOCKING_NUM/,'KC_LNUM')
  43. km_str.gsub!(/KC_LOCKING_SCROLL/,'KC_LSCR')
  44. km_str.gsub!(/KC_PSCREEN/,'KC_PSCR')
  45. km_str.gsub!(/KC_PAUSE/,'KC_PAUS')
  46. km_str.gsub!(/KC_PAUSE/,'KC_BRK')
  47. km_str.gsub!(/KC_INSERT/,'KC_INS')
  48. km_str.gsub!(/KC_DELETE/,'KC_DEL')
  49. km_str.gsub!(/KC_PGDOWN/,'KC_PGDN')
  50. km_str.gsub!(/KC_RIGHT/,'KC_RGHT')
  51. km_str.gsub!(/KC_APPLICATION/,'KC_APP')
  52. km_str.gsub!(/KC_EXECUTE/,'KC_EXEC')
  53. km_str.gsub!(/KC_SELECT/,'KC_SLCT')
  54. km_str.gsub!(/KC_AGAIN/,'KC_AGIN')
  55. km_str.gsub!(/KC_PASTE/,'KC_PSTE')
  56. km_str.gsub!(/KC_ALT_ERASE/,'KC_ERAS')
  57. km_str.gsub!(/KC_CLEAR/,'KC_CLR')
  58. km_str.gsub!(/KC_KP_SLASH/,'KC_PSLS')
  59. km_str.gsub!(/KC_KP_ASTERISK/,'KC_PAST')
  60. km_str.gsub!(/KC_KP_MINUS/,'KC_PMNS')
  61. km_str.gsub!(/KC_KP_PLUS/,'KC_PPLS')
  62. km_str.gsub!(/KC_KP_ENTER/,'KC_PENT')
  63. km_str.gsub!(/KC_KP_1/,'KC_P1')
  64. km_str.gsub!(/KC_KP_2/,'KC_P2')
  65. km_str.gsub!(/KC_KP_3/,'KC_P3')
  66. km_str.gsub!(/KC_KP_4/,'KC_P4')
  67. km_str.gsub!(/KC_KP_5/,'KC_P5')
  68. km_str.gsub!(/KC_KP_6/,'KC_P6')
  69. km_str.gsub!(/KC_KP_7/,'KC_P7')
  70. km_str.gsub!(/KC_KP_8/,'KC_P8')
  71. km_str.gsub!(/KC_KP_9/,'KC_P9')
  72. km_str.gsub!(/KC_KP_0/,'KC_P0')
  73. km_str.gsub!(/KC_KP_DOT/,'KC_PDOT')
  74. km_str.gsub!(/KC_KP_EQUAL/,'KC_PEQL')
  75. km_str.gsub!(/KC_KP_COMMA/,'KC_PCMM')
  76. km_str.gsub!(/KC_GRAVE/,'KC_ZKHK')
  77. km_str.gsub!(/KC_INT1/,'KC_RO')
  78. km_str.gsub!(/KC_INT2/,'KC_KANA')
  79. km_str.gsub!(/KC_INT3/,'KC_JYEN')
  80. km_str.gsub!(/KC_INT4/,'KC_HENK')
  81. km_str.gsub!(/KC_INT5/,'KC_MHEN')
  82. km_str.gsub!(/KC_LANG1/,'KC_HAEN')
  83. km_str.gsub!(/KC_LANG2/,'KC_HANJ')
  84. km_str.gsub!(/KC_LCTRL/,'KC_LCTL')
  85. km_str.gsub!(/KC_LSHIFT/,'KC_LSFT')
  86. km_str.gsub!(/KC_LGUI/,'KC_LCMD')
  87. km_str.gsub!(/KC_LGUI/,'KC_LWIN')
  88. km_str.gsub!(/KC_RCTRL/,'KC_RCTL')
  89. km_str.gsub!(/KC_RSHIFT/,'KC_RSFT')
  90. km_str.gsub!(/KC_RALT/,'KC_ALGR')
  91. km_str.gsub!(/KC_RGUI/,'KC_RCMD')
  92. km_str.gsub!(/KC_RGUI/,'KC_RWIN')
  93. km_str.gsub!(/KC_SYSTEM_POWER/,'KC_PWR')
  94. km_str.gsub!(/KC_SYSTEM_SLEEP/,'KC_SLEP')
  95. km_str.gsub!(/KC_SYSTEM_WAKE/,'KC_WAKE')
  96. km_str.gsub!(/KC_AUDIO_MUTE/,'KC_MUTE')
  97. km_str.gsub!(/KC_AUDIO_VOL_UP/,'KC_VOLU')
  98. km_str.gsub!(/KC_AUDIO_VOL_DOWN/,'KC_VOLD')
  99. km_str.gsub!(/KC_MEDIA_NEXT_TRACK/,'KC_MNXT')
  100. km_str.gsub!(/KC_MEDIA_PREV_TRACK/,'KC_MPRV')
  101. km_str.gsub!(/KC_MEDIA_STOP/,'KC_MSTP')
  102. km_str.gsub!(/KC_MEDIA_PLAY_PAUSE/,'KC_MPLY')
  103. km_str.gsub!(/KC_MEDIA_SELECT/,'KC_MSEL')
  104. km_str.gsub!(/KC_MEDIA_EJECT/,'KC_EJCT')
  105. km_str.gsub!(/KC_MAIL/,'KC_MAIL')
  106. km_str.gsub!(/KC_CALCULATOR/,'KC_CALC')
  107. km_str.gsub!(/KC_MY_COMPUTER/,'KC_MYCM')
  108. km_str.gsub!(/KC_WWW_SEARCH/,'KC_WSCH')
  109. km_str.gsub!(/KC_WWW_HOME/,'KC_WHOM')
  110. km_str.gsub!(/KC_WWW_BACK/,'KC_WBAK')
  111. km_str.gsub!(/KC_WWW_FORWARD/,'KC_WFWD')
  112. km_str.gsub!(/KC_WWW_STOP/,'KC_WSTP')
  113. km_str.gsub!(/KC_WWW_REFRESH/,'KC_WREF')
  114. km_str.gsub!(/KC_WWW_FAVORITES/,'KC_WFAV')
  115. km_str.gsub!(/KC_MEDIA_FAST_FORWARD/,'KC_MFFD')
  116. km_str.gsub!(/KC_MEDIA_REWIND/,'KC_MRWD')
  117. km_str.gsub!(/KC_BRIGHTNESS_UP/,'KC_BRIU')
  118. km_str.gsub!(/KC_BRIGHTNESS_DOWN/,'KC_BRID')
  119. km_str.gsub!(/KC_PAUSE/,'KC_BRMU')
  120. km_str.gsub!(/KC_SCROLLLOCK/,'KC_BRMD')
  121. km_str.gsub!(/KC_MS_UP/,'KC_MS_U')
  122. km_str.gsub!(/KC_MS_DOWN/,'KC_MS_D')
  123. km_str.gsub!(/KC_MS_LEFT/,'KC_MS_L')
  124. km_str.gsub!(/KC_MS_RIGHT/,'KC_MS_R')
  125. km_str.gsub!(/KC_MS_BTN1/,'KC_BTN1')
  126. km_str.gsub!(/KC_MS_BTN2/,'KC_BTN2')
  127. km_str.gsub!(/KC_MS_BTN3/,'KC_BTN3')
  128. km_str.gsub!(/KC_MS_BTN4/,'KC_BTN4')
  129. km_str.gsub!(/KC_MS_BTN5/,'KC_BTN5')
  130. km_str.gsub!(/KC_MS_WH_UP/,'KC_WH_U')
  131. km_str.gsub!(/KC_MS_WH_DOWN/,'KC_WH_D')
  132. km_str.gsub!(/KC_MS_WH_LEFT/,'KC_WH_L')
  133. km_str.gsub!(/KC_MS_WH_RIGHT/,'KC_WH_R')
  134. km_str.gsub!(/KC_MS_ACCEL0/,'KC_ACL0')
  135. km_str.gsub!(/KC_MS_ACCEL1/,'KC_ACL1')
  136. km_str.gsub!(/KC_MS_ACCEL2/,'KC_ACL2')
  137.  
  138. defines = <<-END_DEFS
  139. #define LCGS(code) LCTL(LGUI(LSFT(code)))
  140. #define LCS(code) LCTL(LSFT(code))
  141. END_DEFS
  142.  
  143.  
  144. key_codes = km_str.scan /[A-Z][A-Z0-9_]*?(?:\(.*?\))?,/
  145. size = key_codes.sort_by(&:length).last.length
  146. pad = " " * size
  147. pad8 = pad * 4
  148. pad6 = pad8 + pad
  149. pad7 = pad6 + pad
  150. dent = " " * 4
  151. ddnt = dent * 2
  152. km_str.gsub!(/LAYOUT_ergodox\(
  153. (?<line1>(?:[A-Z0-9_]*?(?:\(.*?\))?,){7})
  154. (?<line2>(?:[A-Z0-9_]*?(?:\(.*?\))?,){7})
  155. (?<line3>(?:[A-Z0-9_]*?(?:\(.*?\))?,){6})
  156. (?<line4>(?:[A-Z0-9_]*?(?:\(.*?\))?,){7})
  157. (?<line5>(?:[A-Z0-9_]*?(?:\(.*?\))?,){5})
  158. (?<line6>(?:[A-Z0-9_]*?(?:\(.*?\))?,){2})
  159. (?<line7>(?:[A-Z0-9_]*?(?:\(.*?\))?,){1})
  160. (?<line8>(?:[A-Z0-9_]*?(?:\(.*?\))?,){3})
  161. (?<line9>(?:[A-Z0-9_]*?(?:\(.*?\))?,){7})
  162. (?<line10>(?:[A-Z0-9_]*?(?:\(.*?\))?,){7})
  163. (?<line11>(?:[A-Z0-9_]*?(?:\(.*?\))?,){6})
  164. (?<line12>(?:[A-Z0-9_]*?(?:\(.*?\))?,){7})
  165. (?<line13>(?:[A-Z0-9_]*?(?:\(.*?\))?,){5})
  166. (?<line14>(?:[A-Z0-9_]*?(?:\(.*?\))?,){2})
  167. (?<line15>(?:[A-Z0-9_]*?(?:\(.*?\))?,){1})
  168. (?<line16>(?:[A-Z0-9_]*?(?:\(.*?\))?,){2})
  169. (?<lastkey>[A-Z0-9_]*?(?:\(.*?\))?)
  170. \),/x, <<-END
  171. LAYOUT_ergodox(
  172. #{dent}// left hand
  173. #{dent}\\k<line1>
  174. #{dent}\\k<line2>
  175. #{dent}\\k<line3>
  176. #{dent}\\k<line4>
  177. #{dent}\\k<line5>
  178. #{dent}#{pad6}\\k<line6>
  179. #{dent}#{pad7}\\k<line7>
  180. #{dent}#{pad8}\\k<line8>
  181.  
  182. #{ddnt}// right hand
  183. #{ddnt}\\k<line9>
  184. #{ddnt}\\k<line10>
  185. #{ddnt}#{pad}\\k<line11>
  186. #{ddnt}\\k<line12>
  187. #{ddnt}\\k<line13>
  188. #{ddnt}\\k<line14>
  189. #{ddnt}\\k<line15>
  190. #{ddnt}\\k<line16>\\k<lastkey>
  191. #{dent}),
  192. END
  193. )
  194. km_str.gsub!(/([A-Z_][A-Z0-9_]*?(?:\(.*?\))?,)/) {|k| "%-#{size}s" % k}
  195. km_str.gsub!(/(enum custom_keycodes)/,"#{defines}\n\\1")
  196. km_str
  197. end
  198.  
  199. keymap = File.read(ARGV[0])
  200. puts fix_keymap(keymap)
Add Comment
Please, Sign In to add comment