keymap.c 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. /* Copyright 2019 SwanMatch
  2. *
  3. * This program is free software: you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License as published by
  5. * the Free Software Foundation, either version 2 of the License, or
  6. * (at your option) any later version.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. #include QMK_KEYBOARD_H
  17. // Defines the keycodes used by our macros in process_record_user
  18. //enum custom_keycodes {
  19. // QMKBEST = SAFE_RANGE,
  20. // QMKURL
  21. //};
  22. enum layer {
  23. _QWERTY,
  24. _CURSOL,
  25. _CALC,
  26. _ADJUST,
  27. };
  28. enum custom_keycodes {
  29. RGBRST = SAFE_RANGE,
  30. KC_00,
  31. ALTAB,
  32. SALTAB
  33. };
  34. #define CALC LT(_CALC, KC_ESC)
  35. #define CUSL LT(_CURSOL, KC_TAB)
  36. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  37. /* QWERTY
  38. * ,-----------------------------------------. ,-----------------------------------------.
  39. * |TabMOS| Q | W | E | R | T | | Y | U | I | O | P | = |
  40. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  41. * |Shift | A | S | D | F | G | | H | J | K | L | ; | ' |
  42. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  43. * | Ctrl | Z | X | C | V | B |-------.-------. ,---------------| N | M | , | . | / | - |
  44. * `-----------------------------------------/ / / \ \ \----------------------------------------'
  45. * | Alt | Bksp | / Shift / Calc / \ Cursol\ Ctrl | Del | App |
  46. * | F5 | |/ Space / Esc / \ Tab \ Enter\ | F12 |
  47. * `-----------------------------' '---------------------------'
  48. */
  49. [_QWERTY] = LAYOUT(
  50. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_EQL,
  51. KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
  52. KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
  53. LALT_T(KC_F5), KC_BSPC, LSFT_T(KC_SPC), CALC, CUSL, LCTL_T(KC_ENT), KC_DEL, GUI_T(KC_F12)
  54. ),
  55. /* Cursol
  56. * ,-----------------------------------------. ,-----------------------------------------.
  57. * | | F1 | F2 | PgUp | F4 | F5 | | F6 | F7 | Up | F9 | F10 |PrtSc |
  58. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  59. * | | ~ | Home | PgDw | End | ( | | ) | Left | Down |Right | F8 | F11 |
  60. * |------+------+------+------+------+------+ +------+------+------+------+------+------|
  61. * | | ` | CLft | F3 | CRgt |SALTAB|-------.-------. ,---------------|ALTTAB| OSL | F8 | OSR | | |
  62. * `-----------------------------------------/ / / \ \ \----------------------------------------'
  63. * | | | / / / \ \ \ | | |
  64. * | | |/ / / \ \ \ | | |
  65. * `-----------------------------' '-----------------------------'
  66. */
  67. [_CURSOL] = LAYOUT(
  68. QK_BOOT , KC_F1, KC_F2, KC_PGUP, KC_F4, KC_F5, KC_F6, KC_F7, KC_UP, KC_F9, KC_F10, QK_BOOT,
  69. _______, KC_TILD, KC_HOME, KC_PGDN, KC_END, KC_LPRN, KC_RPRN, KC_LEFT, KC_DOWN, KC_RGHT, KC_PIPE, KC_F11,
  70. _______, KC_GRV, C(KC_LEFT), KC_F3, C(KC_RGHT), SALTAB, ALTAB, LCA(KC_LEFT), KC_F8, LCA(KC_RGHT), KC_BSLS, RGBRST,
  71. _______, _______, C(KC_SPC), MO(_ADJUST), _______, _______, _______, _______
  72. ),
  73. /* Calculater
  74. * ,-----------------------------------------. ,-----------------------------------------.
  75. * | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
  76. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  77. * | | @ | # | $ | % | [ | | ] | 4 | 5 | 6 | + | |
  78. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  79. * | | ^ | & | * | ! | { |-------.-------. ,---------------| } | 1 | 2 | 3 | = | |
  80. * `-----------------------------------------/ / / \ \ \----------------------------------------'
  81. * | | | / / / \ \ \ | | |
  82. * | | |/ / / \ \ 0 \ | 00 | . |
  83. * `-----------------------------' '------------------------------'
  84. */
  85. [_CALC] = LAYOUT(
  86. _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
  87. _______, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_LBRC, KC_RBRC, KC_4, KC_5, KC_6, KC_PPLS, _______,
  88. _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_EXLM, KC_LCBR, KC_RCBR, KC_1, KC_2, KC_3, KC_PEQL, _______,
  89. _______, _______, _______, _______, MO(_ADJUST), KC_0, KC_00, KC_PDOT
  90. ),
  91. /* ADJUST
  92. * ,-----------------------------------------. ,-----------------------------------------.
  93. * | | | |FrqRst| | | | | | | | | |
  94. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  95. * | | |Music |FrqUp |Sound | | | SPD+ | MOD+ | VAL+ | SAD+ | HUE+ | |
  96. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  97. * | | |Scale |FrqDwn| | |-------.-------. ,---------------| SPD- | SPD- | VAL- | SAD- | HUE- | |
  98. * `-----------------------------------------/ / / \ \ \----------------------------------------'
  99. * | | | / / / \ \ \ | | |
  100. * | | |/ / / \ \ \ | | |
  101. * `-----------------------------' '------------------------------'
  102. */
  103. [_ADJUST] = LAYOUT(
  104. _______, XXXXXXX, XXXXXXX, CK_RST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
  105. XXXXXXX, XXXXXXX, MU_TOGG, CK_UP, AU_TOGG, XXXXXXX, RGB_SPI, RGB_MOD, RGB_VAI, RGB_SAI, RGB_HUI, XXXXXXX,
  106. XXXXXXX, XXXXXXX, MU_NEXT, CK_DOWN, XXXXXXX, XXXXXXX, RGB_SPD, RGB_RMOD, RGB_VAD, RGB_SAD, RGB_HUD, XXXXXXX,
  107. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
  108. )
  109. };
  110. #ifdef RGBLIGHT_ENABLE
  111. // Following line allows macro to read current RGB settings
  112. extern rgblight_config_t rgblight_config;
  113. #endif
  114. int RGB_current_mode;
  115. bool alt_pressed = false;
  116. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  117. switch (keycode) {
  118. #ifdef RGBLIGHT_ENABLE
  119. case RGBRST:
  120. if (record->event.pressed) {
  121. eeconfig_update_rgblight_default();
  122. rgblight_enable();
  123. RGB_current_mode = rgblight_config.mode;
  124. }
  125. break;
  126. #endif
  127. case KC_SCLN:
  128. if (keyboard_report->mods & MOD_BIT(KC_LSFT)) {
  129. if (record->event.pressed) {
  130. unregister_code(KC_LSFT);
  131. tap_code16(keycode);
  132. register_code(KC_LSFT);
  133. }
  134. /* } else if (keyboard_report->mods & MOD_BIT(KC_RSFT)) {
  135. if (record->event.pressed) {
  136. unregister_code(KC_RSFT);
  137. tap_code16(keycode);
  138. register_code(KC_RSFT);
  139. } */
  140. } else {
  141. if (record->event.pressed) {
  142. tap_code16(S(keycode));
  143. }
  144. }
  145. return false;
  146. break;
  147. case KC_00:
  148. if (record->event.pressed) {
  149. tap_code(KC_0);
  150. register_code(KC_0);
  151. } else {
  152. unregister_code(KC_0);
  153. }
  154. return false;
  155. break;
  156. case SALTAB:
  157. case ALTAB:
  158. if (record->event.pressed) {
  159. if (!alt_pressed) {
  160. alt_pressed = true;
  161. register_code(KC_LALT);
  162. }
  163. if (keycode == SALTAB) {
  164. register_code(KC_LSFT);
  165. }
  166. register_code(KC_TAB);
  167. } else {
  168. unregister_code(KC_TAB);
  169. if (keycode == SALTAB) {
  170. unregister_code(KC_LSFT);
  171. }
  172. }
  173. return false;
  174. break;
  175. default:
  176. if (alt_pressed) {
  177. alt_pressed = false;
  178. unregister_code(KC_LALT);
  179. if (record->event.pressed) {
  180. return false;
  181. }
  182. }
  183. break;
  184. }
  185. return true;
  186. }
  187. void matrix_init_user(void) {
  188. #ifdef RGBLIGHT_ENABLE
  189. RGB_current_mode = rgblight_config.mode;
  190. #endif
  191. }