keymap.c 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. #include QMK_KEYBOARD_H
  2. bool is_lgui_active = false;
  3. uint16_t lgui_timer = 0;
  4. //Macro Declarations
  5. enum my_keycodes {
  6. KI_NO = SAFE_RANGE,
  7. KI_1,
  8. KI_2,
  9. KI_3,
  10. KI_4,
  11. KI_5,
  12. KI_6,
  13. KI_7,
  14. KI_8,
  15. KI_9,
  16. KI_10,
  17. KI_11,
  18. KI_12,
  19. KI_ESC,
  20. KI_BKSP,
  21. KI_BSLS,
  22. KI_WLFT,
  23. KI_WRGT,
  24. };
  25. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  26. LAYOUT_all(
  27. KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, XXXXXXX, KC_BSPC,
  28. KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS,
  29. MO(1), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT,
  30. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(2), KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, XXXXXXX, KC_RSFT, XXXXXXX,
  31. KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), XXXXXXX, MO(3), KC_RCTL),
  32. LAYOUT_all(
  33. KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
  34. _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGUP, KC_HOME, KC_UP, KC_END, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  35. _______, XXXXXXX, KC_TAB, KC_LSFT, KC_LCTL, XXXXXXX, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_CAPS, XXXXXXX,
  36. _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,,
  37. _______, _______, XXXXXXX, KC_ENT, KC_ENT, KC_ENT, _______, _______, _______, _______, RESET),
  38. LAYOUT_all(
  39. KI_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, KI_BKSP,
  40. _______, KI_1, KI_2, KI_3, KI_4, KI_5, KI_6, KI_7, KI_8, KI_9, KI_10, KI_11, KI_12, KI_BSLS,
  41. _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  42. _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, KI_WLFT, KI_WRGT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  43. _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX),
  44. LAYOUT_all(
  45. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  46. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  47. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  48. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  49. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
  50. };
  51. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  52. switch (keycode) {
  53. // Keycodes Starting with KI_ are place holders for my personal macros. They are set below. Most are simple SEND_STRINGS().
  54. case KI_ESC:
  55. if (record->event.pressed) {
  56. SEND_STRING("");
  57. } else {
  58. }
  59. return false; // Skip all further processing of this key
  60. case KI_1:
  61. if (record->event.pressed) {
  62. SEND_STRING("");
  63. } else {
  64. }
  65. return false; // Skip all further processing of this key
  66. case KI_2:
  67. if (record->event.pressed) {
  68. SEND_STRING("");
  69. } else {
  70. }
  71. return false; // Skip all further processing of this key
  72. case KI_3:
  73. if (record->event.pressed) {
  74. SEND_STRING("");
  75. } else {
  76. }
  77. return false; // Skip all further processing of this key
  78. case KI_4:
  79. if (record->event.pressed) {
  80. SEND_STRING("");
  81. } else {
  82. }
  83. return false; // Skip all further processing of this key
  84. case KI_5:
  85. if (record->event.pressed) {
  86. SEND_STRING("");
  87. } else {
  88. }
  89. return false; // Skip all further processing of this key
  90. case KI_6:
  91. if (record->event.pressed) {
  92. SEND_STRING("");
  93. } else {
  94. }
  95. return false; // Skip all further processing of this key
  96. case KI_7:
  97. if (record->event.pressed) {
  98. SEND_STRING("");
  99. } else {
  100. }
  101. return false; // Skip all further processing of this key
  102. case KI_8:
  103. if (record->event.pressed) {
  104. SEND_STRING("");
  105. } else {
  106. }
  107. return false; // Skip all further processing of this key
  108. case KI_9:
  109. if (record->event.pressed) {
  110. SEND_STRING("");
  111. } else {
  112. }
  113. return false; // Skip all further processing of this key
  114. case KI_10:
  115. if (record->event.pressed) {
  116. SEND_STRING("");
  117. } else {
  118. }
  119. return false; // Skip all further processing of this key
  120. case KI_11:
  121. if (record->event.pressed) {
  122. SEND_STRING("");
  123. } else {
  124. }
  125. return false; // Skip all further processing of this key
  126. case KI_12:
  127. if (record->event.pressed) {
  128. SEND_STRING("");
  129. } else {
  130. }
  131. return false; // Skip all further processing of this key
  132. case KI_BKSP:
  133. if (record->event.pressed) {
  134. SEND_STRING("");
  135. } else {
  136. }
  137. return false; // Skip all further processing of this key
  138. case KI_BSLS:
  139. if (record->event.pressed) {
  140. SEND_STRING("");
  141. } else {
  142. }
  143. return false; // Skip all further processing of this key
  144. //Windows Win+Left tap to move window without resetting KC_LGUI
  145. //Additional code is in matrix_scan_user()
  146. case KI_WLFT:
  147. if (record->event.pressed) {
  148. if (!is_lgui_active) {
  149. is_lgui_active = true;
  150. register_code(KC_LGUI);
  151. }
  152. lgui_timer = timer_read();
  153. tap_code(KC_LEFT);
  154. } else {
  155. }
  156. return false; // Skip all further processing of this key
  157. //Windows Win+Right tap to move window without resetting KC_LGUI
  158. //Additional code is in matrix_scan_user()
  159. case KI_WRGT:
  160. if (record->event.pressed) {
  161. if (!is_lgui_active) {
  162. is_lgui_active = true;
  163. register_code(KC_LGUI);
  164. }
  165. lgui_timer = timer_read();
  166. tap_code(KC_RIGHT);
  167. } else {
  168. }
  169. return false; // Skip all further processing of this key
  170. default:
  171. return true; // Process all other keycodes normally
  172. }
  173. }
  174. //Check if KC_LGUI is active in KI_WLFT and KI_WRGT
  175. void matrix_scan_user(void) {
  176. if (is_lgui_active) {
  177. if (timer_elapsed(lgui_timer) > 1000) {
  178. unregister_code(KC_LGUI);
  179. is_lgui_active = false;
  180. }
  181. }
  182. }