keymap.c (14382B)
1 #include QMK_KEYBOARD_H 2 3 4 #ifdef RGBLIGHT_ENABLE 5 //Following line allows macro to read current RGB settings 6 extern rgblight_config_t rgblight_config; 7 rgblight_config_t RGB_current_config; 8 #endif 9 10 extern uint8_t is_master; 11 12 // Each layer gets a name for readability, which is then used in the keymap matrix below. 13 // The underscores don't mean anything - you can have a layer called STUFF or any other name. 14 // Layer names don't all need to be of the same length, obviously, and you can also skip them 15 // entirely and just use numbers. 16 enum layer_number { 17 _QWERTY = 0, 18 _COLEMAK, 19 _DVORAK, 20 _LOWER, 21 _RAISE, 22 _ADJUST 23 }; 24 25 enum custom_keycodes { 26 LOWER = SAFE_RANGE, 27 RAISE, 28 ADJUST, 29 BACKLIT, 30 KANA, 31 EISU, 32 RGBRST 33 }; 34 35 #define QWERTY PDF(_QWERTY) 36 #define COLEMAK PDF(_COLEMAK) 37 #define DVORAK PDF(_DVORAK) 38 39 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 40 /* Qwerty 41 * ,-----------------------------------------. ,-----------------------------------------. 42 * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp | 43 * |------+------+------+------+------+------| |------+------+------+------+------+------| 44 * | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' | 45 * |------+------+------+------+------+------| |------+------+------+------+------+------| 46 * | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter | 47 * |------+------+------+------+------+------| |------+------+------+------+------+------| 48 * | Esc |ADJUST| Win | Alt |LOWER |Space | | Space| RAISE| Left | Down | Up | Right| 49 * `-----------------------------------------' `-----------------------------------------' 50 */ 51 [_QWERTY] = LAYOUT_ortho_4x12( 52 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, 53 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, 54 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , 55 KC_ESC, ADJUST, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT 56 ), 57 58 /* Colemak 59 * ,-----------------------------------------. ,-----------------------------------------. 60 * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp | 61 * |------+------+------+------+------+------| |------+------+------+------+------+------| 62 * | Ctrl | A | R | S | T | D | | H | N | E | I | O | ' | 63 * |------+------+------+------+------+------| |------+------+------+------+------+------| 64 * | Shift| Z | X | C | V | B | | K | M | , | . | / |Enter | 65 * |------+------+------+------+------+------| |------+------+------+------+------+------| 66 * | Esc |ADJUST| Alt | Win |LOWER |Space | | Space| RAISE| Left | Down | Up | Right| 67 * `-----------------------------------------' `-----------------------------------------' 68 */ 69 [_COLEMAK] = LAYOUT_ortho_4x12( 70 KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, 71 KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, 72 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , 73 KC_ESC, ADJUST, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT 74 ), 75 76 /* Dvorak 77 * ,-----------------------------------------. ,-----------------------------------------. 78 * | Tab | ' | , | . | P | Y | | F | G | C | R | L | Del | 79 * |------+------+------+------+------+------| |------+------+------+------+------+------| 80 * | Ctrl | A | O | E | U | I | | D | H | T | N | S | / | 81 * |------+------+------+------+------+------| |------+------+------+------+------+------| 82 * | Shift| ; | Q | J | K | X | | B | M | W | V | Z |Enter | 83 * |------+------+------+------+------+------| |------+------+------+------+------+------| 84 * | Esc |ADJUST| Alt | Win |LOWER |Space | | Space| RAISE| Left | Down | Up | Right| 85 * `-----------------------------------------' `-----------------------------------------' 86 */ 87 [_DVORAK] = LAYOUT_ortho_4x12( 88 KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL, 89 KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, 90 KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , 91 KC_ESC, ADJUST, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT 92 ), 93 94 /* Lower 95 * ,-----------------------------------------. ,-----------------------------------------. 96 * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | | 97 * |------+------+------+------+------+------| |------+------+------+------+------+------| 98 * | | | | | | | | - | _ | + | { | } | | | 99 * |------+------+------+------+------+------| |------+------+------+------+------+------| 100 * | | | | | | | | | | | Home | End | | 101 * |------+------+------+------+------+------| |------+------+------+------+------+------| 102 * | | | | | | | | | | Next | Vol- | Vol+ | Play | 103 * `-----------------------------------------' `-----------------------------------------' 104 */ 105 [_LOWER] = LAYOUT_ortho_4x12( 106 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, 107 _______, _______, _______, _______, _______, _______, KC_MINS, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, 108 _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_END, _______, 109 _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY 110 ), 111 112 /* Raise 113 * ,-----------------------------------------. ,-----------------------------------------. 114 * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del | 115 * |------+------+------+------+------+------| |------+------+------+------+------+------| 116 * | | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ | 117 * |------+------+------+------+------+------| |------+------+------+------+------+------| 118 * | | F7 | F8 | F9 | F10 | F11 | | F12 | | | | | 119 * |------+------+------+------+------+------| |------+------+------+------+------+------| 120 * | | | | | | | | | | Next | Vol- | Vol+ | Play | 121 * `-----------------------------------------' `-----------------------------------------' 122 */ 123 [_RAISE] = LAYOUT_ortho_4x12( 124 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, 125 _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, 126 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, 127 _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY 128 ), 129 130 /* Adjust (Lower + Raise) 131 * ,-----------------------------------------. ,-----------------------------------------. 132 * | | Reset|RGBRST|Aud on|Audoff| | | |Qwerty|Colemk|Dvorak| | Ins | 133 * |------+------+------+------+------+------| |------+------+------+------+------+------| 134 * | |RGB ON| HUE+ | SAT+ | VAL+ | Mac | | Win | - | = |Print |ScLock|Pause | 135 * |------+------+------+------+------+------| |------+------+------+------+------+------| 136 * |MODE R| MODE | HUE- | SAT- | VAL- | | | | | | |PageUp| | 137 * |------+------+------+------+------+------| |------+------+------+------+------+------| 138 * | | | | EISU | EISU | EISU | | KANA | KANA | Home |PageDn|PageUp| End | 139 * `-----------------------------------------' `-----------------------------------------' 140 */ 141 [_ADJUST] = LAYOUT_ortho_4x12( 142 _______, QK_BOOT, RGBRST, _______, _______, _______, _______, QWERTY, COLEMAK, DVORAK, _______, KC_INS, 143 _______, UG_TOGG, UG_HUEU, UG_SATU, UG_VALU, AG_NORM, AG_SWAP, KC_MINS, KC_EQL, KC_PSCR, KC_SCRL, KC_PAUS, 144 UG_PREV, UG_NEXT, UG_HUED, UG_SATD, UG_VALD, _______, _______, _______, _______, _______, KC_PGUP, _______, 145 _______, _______, _______, EISU, EISU, EISU, KANA, KANA, KANA, KC_HOME, KC_PGDN, KC_END 146 ) 147 }; 148 149 // define variables for reactive RGB 150 bool TOG_STATUS = false; 151 152 // Setting ADJUST layer RGB back to default 153 void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) { 154 if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) { 155 #ifdef RGBLIGHT_ENABLE 156 rgblight_mode_noeeprom(RGB_current_config.mode); 157 #endif 158 layer_on(layer3); 159 } else { 160 layer_off(layer3); 161 } 162 } 163 164 bool process_record_user(uint16_t keycode, keyrecord_t *record) { 165 switch (keycode) { 166 case LOWER: 167 if (record->event.pressed) { 168 //not sure how to have keyboard check mode and set it to a variable, so my work around 169 //uses another variable that would be set to true after the first time a reactive key is pressed. 170 if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false 171 } else { 172 TOG_STATUS = !TOG_STATUS; 173 #ifdef RGBLIGHT_ENABLE 174 rgblight_mode_noeeprom(16); 175 #endif 176 } 177 layer_on(_LOWER); 178 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); 179 } else { 180 #ifdef RGBLIGHT_ENABLE 181 rgblight_mode_noeeprom(RGB_current_config.mode); // revert RGB to initial mode prior to RGB mode change 182 #endif 183 TOG_STATUS = false; 184 layer_off(_LOWER); 185 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); 186 } 187 return false; 188 break; 189 190 case RAISE: 191 if (record->event.pressed) { 192 //not sure how to have keyboard check mode and set it to a variable, so my work around 193 //uses another variable that would be set to true after the first time a reactive key is pressed. 194 if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false 195 } else { 196 TOG_STATUS = !TOG_STATUS; 197 #ifdef RGBLIGHT_ENABLE 198 rgblight_mode_noeeprom(15); 199 #endif 200 } 201 layer_on(_RAISE); 202 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); 203 } else { 204 #ifdef RGBLIGHT_ENABLE 205 rgblight_mode_noeeprom(RGB_current_config.mode); // revert RGB to initial mode prior to RGB mode change 206 #endif 207 layer_off(_RAISE); 208 TOG_STATUS = false; 209 update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); 210 } 211 return false; 212 break; 213 214 case ADJUST: 215 if (record->event.pressed) { 216 layer_on(_ADJUST); 217 } else { 218 layer_off(_ADJUST); 219 } 220 return false; 221 break; 222 223 //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released 224 case QK_UNDERGLOW_MODE_PREVIOUS: 225 #if defined(RGBLIGHT_ENABLE) 226 if (record->event.pressed) { 227 rgblight_mode_noeeprom(RGB_current_config.mode); 228 rgblight_step_reverse(); 229 RGB_current_config.mode = rgblight_config.mode; 230 } 231 return false; 232 #endif 233 break; 234 235 case QK_UNDERGLOW_MODE_NEXT: 236 #if defined(RGBLIGHT_ENABLE) 237 if (record->event.pressed) { 238 rgblight_mode_noeeprom(RGB_current_config.mode); 239 rgblight_step(); 240 RGB_current_config.mode = rgblight_config.mode; 241 } 242 return false; 243 #endif 244 break; 245 246 case EISU: 247 if (record->event.pressed) { 248 if(keymap_config.swap_lalt_lgui==false){ 249 register_code(KC_LNG2); 250 }else{ 251 SEND_STRING(SS_LALT("`")); 252 } 253 } else { 254 unregister_code(KC_LNG2); 255 } 256 return false; 257 break; 258 case KANA: 259 if (record->event.pressed) { 260 if(keymap_config.swap_lalt_lgui==false){ 261 register_code(KC_LNG1); 262 }else{ 263 SEND_STRING(SS_LALT("`")); 264 } 265 } else { 266 unregister_code(KC_LNG1); 267 } 268 return false; 269 break; 270 271 case RGBRST: 272 #ifdef RGBLIGHT_ENABLE 273 if (record->event.pressed) { 274 eeconfig_update_rgblight_default(); 275 rgblight_enable(); 276 RGB_current_config = rgblight_config; 277 } 278 #endif 279 break; 280 } 281 return true; 282 } 283 284 285 void matrix_init_user(void) { 286 #ifdef RGBLIGHT_ENABLE 287 rgblight_init(); 288 RGB_current_config = rgblight_config; 289 #endif 290 }