keymap.c (32461B)
1 /* Copyright 2021 Richard Nunez <antebios1@gmail.com> 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 17 #include QMK_KEYBOARD_H 18 #include "print.h" 19 20 // Keep track of key presses for Modifier 21 typedef struct { 22 bool is_press_action; 23 int state; 24 } tap; 25 26 // Key Tap enumerator 27 enum { 28 SINGLE_TAP = 1, 29 SINGLE_HOLD = 2, 30 DOUBLE_TAP = 3, 31 DOUBLE_HOLD = 4, 32 TRIPLE_TAP = 5, 33 TRIPLE_HOLD = 6 34 }; 35 36 // Each layer gets a name for readability, which is then used in the keymap matrix below. 37 // The underscores don't mean anything - you can have a layer called STUFF or any other name. 38 // Layer names don't all need to be of the same length, obviously, and you can also skip them 39 // entirely and just use numbers. 40 enum custom_layer { 41 _QWERTY, 42 _ALT, 43 _CTRL, 44 _LOWER, 45 _RAISE, 46 _MOUSE, 47 _ADJUST, 48 }; 49 50 enum custom_keycodes { 51 LOWER = SAFE_RANGE, 52 RAISE, 53 ADJUST 54 }; 55 56 #define QWERTY PDF(_QWERTY) 57 #define MOUSE PDF(_MOUSE) 58 59 // TAP DANCE *********************************************************** 60 //Tap Dance Declarations 61 enum { 62 ALT_OSL1 = 0, 63 CTL_OSL1, 64 TD_DEL_BSPC , 65 TD_ESC_GRAVE, 66 TD_TAB_TILDE, 67 TD_9_LPRN, 68 TD_0_RPRN, 69 TD_MINS_UNDS, 70 TD_EQL_PLUS, 71 TD_LBRC_LCBR, 72 TD_RBRC_RCBR, 73 TD_SCLN_COLN, 74 TD_QUOT_DQT, 75 TD_COMM_LABK, 76 TD_DOT_RABK, 77 TD_SLSH_QUES, 78 TD_BSLS_PIPE, 79 80 TD_PGUP_HOME, 81 TD_PGDN_END, 82 83 TD_Q_LrALT, 84 TD_W_Lyr2, 85 TD_E_Lyr3, 86 TD_R_LrKey, 87 TD_T_LrMS, 88 89 TD_SHIFT_CAPS, 90 TD_SPC_ENT, 91 TD_SPC_BKSPC, 92 TD_LSPACE, 93 TD_RSPACE, 94 95 TD_LayerDn, 96 TD_LayerUp 97 }; 98 99 100 // Alt key action: 101 // SINGLE_TAP = toggle layer, then wait for keypress on called layer, then switch back to original layer. 102 // SINGLE_HOLD = will work as normal sending the keypress. 103 // DOUBLE_TAP = 3, 104 // DOUBLE_HOLD = will then toggle layer and keep sending the Alt keycode until next keypress, then switch back to original layer. 105 // TRIPLE_TAP = 5, 106 // TRIPLE_HOLD = 6 107 // // Alt held down, then use as normal. 108 // 109 // Alt tapped, then hold Alt, 110 int cur_dance (tap_dance_state_t *state); 111 void alt_finished (tap_dance_state_t *state, void *user_data); 112 void alt_reset (tap_dance_state_t *state, void *user_data); 113 114 int cur_dance (tap_dance_state_t *state) { 115 if (state->count == 1) { 116 if (state->pressed) return SINGLE_HOLD; 117 else return SINGLE_TAP; 118 } 119 else if (state->count == 2) { 120 if (state->pressed) return DOUBLE_HOLD; 121 else return DOUBLE_TAP; 122 } 123 else if (state->count == 3) { 124 if (state->interrupted || !state->pressed) return TRIPLE_TAP; 125 else return TRIPLE_HOLD; 126 } 127 else return 8; 128 } 129 130 static tap alttap_state = { 131 .is_press_action = true, 132 .state = 0 133 }; 134 135 void alt_finished (tap_dance_state_t *state, void *user_data) { 136 alttap_state.state = cur_dance(state); 137 switch (alttap_state.state) { 138 case SINGLE_TAP: set_oneshot_layer(_ALT, ONESHOT_START); clear_oneshot_layer_state(ONESHOT_PRESSED); break; 139 case SINGLE_HOLD: register_code(KC_LALT); break; 140 case DOUBLE_TAP: set_oneshot_layer(_ALT, ONESHOT_START); set_oneshot_layer(_ALT, ONESHOT_PRESSED); break; 141 case DOUBLE_HOLD: register_code(KC_LALT); layer_on(_ALT); break; 142 //Last case is for fast typing. Assuming your key is `f`: 143 //For example, when typing the word `buffer`, and you want to make sure that you send `ff` and not `Esc`. 144 //In order to type `ff` when typing fast, the next character will have to be hit within the `TAPPING_TERM`, which by default is 200ms. 145 } 146 } 147 148 void alt_reset (tap_dance_state_t *state, void *user_data) { 149 switch (alttap_state.state) { 150 case SINGLE_TAP: break; 151 case SINGLE_HOLD: unregister_code(KC_LALT); break; 152 case DOUBLE_TAP: break; 153 case DOUBLE_HOLD: layer_off(_ALT); unregister_code(KC_LALT); break; 154 } 155 alttap_state.state = 0; 156 } 157 158 // Ctrl tapped, then hold Ctrl, 159 void ctl_finished (tap_dance_state_t *state, void *user_data); 160 void ctl_reset (tap_dance_state_t *state, void *user_data); 161 162 static tap ctltap_state = { 163 .is_press_action = true, 164 .state = 0 165 }; 166 167 void ctl_finished (tap_dance_state_t *state, void *user_data) { 168 ctltap_state.state = cur_dance(state); 169 switch (ctltap_state.state) { 170 case SINGLE_TAP: set_oneshot_mods(MOD_BIT(KC_LCTL)); break; 171 case SINGLE_HOLD: register_code(KC_LCTL); break; 172 case DOUBLE_TAP: set_oneshot_layer(_ALT, ONESHOT_START); set_oneshot_layer(_ALT, ONESHOT_PRESSED); break; 173 case DOUBLE_HOLD: register_code(KC_LCTL); layer_on(_ALT); break; 174 case TRIPLE_TAP: register_mods(MOD_BIT(KC_LCTL)); register_mods(MOD_BIT(KC_LSFT)); break; 175 } 176 } 177 178 void ctl_reset (tap_dance_state_t *state, void *user_data) { 179 switch (ctltap_state.state) { 180 case SINGLE_TAP: break; 181 case SINGLE_HOLD: unregister_code(KC_LCTL); break; 182 case DOUBLE_TAP: break; 183 case DOUBLE_HOLD: layer_off(_ALT); unregister_code(KC_LCTL); break; 184 case TRIPLE_TAP: break; 185 } 186 ctltap_state.state = 0; 187 } 188 189 190 // Layer Down tap dance 191 void layerDown_finished (tap_dance_state_t *state, void *user_data); 192 void layerDown_reset (tap_dance_state_t *state, void *user_data); 193 194 static tap layerdn_tap_state = { 195 .is_press_action = true, 196 .state = 0 197 }; 198 199 void layerDown_finished (tap_dance_state_t *state, void *user_data) { 200 layerdn_tap_state.state = cur_dance(state); 201 switch (layerdn_tap_state.state) { 202 case SINGLE_TAP: break; 203 case SINGLE_HOLD: layer_on(_LOWER); break; 204 case DOUBLE_TAP: layer_move(_QWERTY); break; 205 case DOUBLE_HOLD: break; 206 case TRIPLE_TAP: reset_keyboard(); break; 207 } 208 } 209 210 void layerDown_reset (tap_dance_state_t *state, void *user_data) { 211 switch (layerdn_tap_state.state) { 212 case SINGLE_TAP: break; 213 case SINGLE_HOLD: layer_off(_LOWER); break; 214 case DOUBLE_TAP: break; 215 case DOUBLE_HOLD: break; 216 } 217 layerdn_tap_state.state = 0; 218 } 219 220 // Layer Up tap dance 221 void layerUp_finished (tap_dance_state_t *state, void *user_data); 222 void layerUp_reset (tap_dance_state_t *state, void *user_data); 223 224 static tap layerup_tap_state = { 225 .is_press_action = true, 226 .state = 0 227 }; 228 229 void layerUp_finished (tap_dance_state_t *state, void *user_data) { 230 layerup_tap_state.state = cur_dance(state); 231 switch (layerup_tap_state.state) { 232 case SINGLE_TAP: break; 233 case SINGLE_HOLD: layer_on(_RAISE); break; 234 case DOUBLE_TAP: layer_move(_RAISE); break; 235 case DOUBLE_HOLD: break; 236 case TRIPLE_TAP: layer_move(_MOUSE); break; 237 } 238 } 239 240 void layerUp_reset (tap_dance_state_t *state, void *user_data) { 241 switch (layerup_tap_state.state) { 242 case SINGLE_TAP: break; 243 case SINGLE_HOLD: layer_off(_RAISE); break; 244 case DOUBLE_TAP: break; 245 case DOUBLE_HOLD: break; 246 case TRIPLE_TAP: break; 247 } 248 layerup_tap_state.state = 0; 249 } 250 251 252 // Shift key action: 253 // Shift held down, then use as normal and use Shift Mode of key. 254 // Shift tapped, then Capitlize next keystroke only. 255 // Shift double-tapped, then CAPSLOCK 256 // Shift double-tapped again, CAPS UNLOCKED 257 // void dance_onshot_lsft(tap_dance_state_t *state, void *user_data) { 258 void lshift_finished (tap_dance_state_t *state, void *user_data); 259 void lshift_reset (tap_dance_state_t *state, void *user_data); 260 261 static tap lshifttap_state = { 262 .is_press_action = true, 263 .state = 0 264 }; 265 266 void lshift_finished (tap_dance_state_t *state, void *user_data) { 267 lshifttap_state.state = cur_dance(state); 268 switch (lshifttap_state.state) { 269 case SINGLE_TAP: set_oneshot_mods(MOD_BIT(KC_LSFT)); break; 270 case SINGLE_HOLD: register_code(KC_LSFT); break; 271 case DOUBLE_TAP: tap_code (KC_CAPS); break; 272 case DOUBLE_HOLD: break; 273 } 274 } 275 276 void lshift_reset (tap_dance_state_t *state, void *user_data) { 277 switch (lshifttap_state.state) { 278 case SINGLE_TAP: break; 279 case SINGLE_HOLD: unregister_code(KC_LSFT); break; 280 case DOUBLE_TAP: break; 281 case DOUBLE_HOLD: break; 282 } 283 lshifttap_state.state = 0; 284 } 285 286 //TD_LSPACE 287 void lspace_finished (tap_dance_state_t *state, void *user_data); 288 void lspace_reset (tap_dance_state_t *state, void *user_data); 289 290 static tap lspacetap_state = { 291 .is_press_action = true, 292 .state = 0 293 }; 294 295 void lspace_finished (tap_dance_state_t *state, void *user_data) { 296 lspacetap_state.state = cur_dance(state); 297 switch (lspacetap_state.state) { 298 case SINGLE_TAP: tap_code (KC_SPACE); break; 299 case SINGLE_HOLD: layer_on(_LOWER); break; 300 case DOUBLE_TAP: tap_code (KC_ENT);break; 301 case DOUBLE_HOLD: break; 302 } 303 } 304 305 void lspace_reset (tap_dance_state_t *state, void *user_data) { 306 switch (lspacetap_state.state) { 307 case SINGLE_TAP: break; 308 case SINGLE_HOLD: layer_off(_LOWER); break; 309 case DOUBLE_TAP: break; 310 case DOUBLE_HOLD: break; 311 } 312 lspacetap_state.state = 0; 313 } 314 315 //TD_RSPACE 316 317 318 319 //Tap Dance Definitions 320 tap_dance_action_t tap_dance_actions[] = { 321 [TD_DEL_BSPC] = ACTION_TAP_DANCE_DOUBLE(KC_DEL, KC_BSPC), 322 [TD_ESC_GRAVE] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_GRAVE), 323 [TD_TAB_TILDE] = ACTION_TAP_DANCE_DOUBLE(KC_TAB, KC_TILDE), 324 325 [TD_9_LPRN] = ACTION_TAP_DANCE_DOUBLE(KC_9, KC_LPRN), 326 [TD_0_RPRN] = ACTION_TAP_DANCE_DOUBLE(KC_0, KC_RPRN), 327 328 [TD_MINS_UNDS] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_UNDS), 329 [TD_EQL_PLUS] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_PLUS), 330 331 [TD_LBRC_LCBR] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_LCBR), 332 [TD_RBRC_RCBR] = ACTION_TAP_DANCE_DOUBLE(KC_RBRC, KC_RCBR), 333 334 [TD_SCLN_COLN] = ACTION_TAP_DANCE_DOUBLE(KC_SCLN, KC_COLN), 335 [TD_QUOT_DQT] = ACTION_TAP_DANCE_DOUBLE(KC_QUOT, KC_DQT), 336 337 [TD_COMM_LABK] = ACTION_TAP_DANCE_DOUBLE(KC_COMM, KC_LABK), 338 [TD_DOT_RABK] = ACTION_TAP_DANCE_DOUBLE(KC_DOT, KC_RABK), 339 [TD_SLSH_QUES] = ACTION_TAP_DANCE_DOUBLE(KC_SLSH, KC_QUES), 340 [TD_BSLS_PIPE] = ACTION_TAP_DANCE_DOUBLE(KC_BSLS, KC_PIPE), 341 342 [TD_PGUP_HOME] = ACTION_TAP_DANCE_DOUBLE(KC_PGUP, KC_HOME), 343 [TD_PGDN_END] = ACTION_TAP_DANCE_DOUBLE(KC_PGDN, KC_END), 344 345 [TD_Q_LrALT] = ACTION_TAP_DANCE_LAYER_MOVE(KC_Q, _ALT), 346 [TD_R_LrKey] = ACTION_TAP_DANCE_LAYER_MOVE(KC_R, _RAISE), 347 [TD_T_LrMS] = ACTION_TAP_DANCE_LAYER_MOVE(KC_T, _MOUSE), 348 349 [TD_SHIFT_CAPS] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,lshift_finished, lshift_reset), 350 [TD_SPC_ENT] = ACTION_TAP_DANCE_DOUBLE(KC_SPACE, KC_ENT), 351 [TD_SPC_BKSPC] = ACTION_TAP_DANCE_DOUBLE(KC_SPACE, KC_BSPC), 352 [TD_LSPACE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,lspace_finished,lspace_reset), 353 354 [ALT_OSL1] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,alt_finished, alt_reset), 355 [CTL_OSL1] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,ctl_finished, ctl_reset), 356 [TD_LayerDn] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,layerDown_finished, layerDown_reset), 357 [TD_LayerUp] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,layerUp_finished, layerUp_reset) 358 }; 359 360 // Fillers to make layering more clear 361 // #define _______ KC_TRNS 362 // #define XXXXXXX KC_NO 363 364 #define KC_L1 LOWER 365 #define KC_L2 RAISE 366 // MO(_LOWER) 367 // MO(_RAISE) 368 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 369 370 /* Qwerty 371 * ,-------------------------------------------------------------------------------------------------. 372 * | DEL | Bksp | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | 373 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 374 * | PGUP | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | 375 * |------+------+------+------+------+------+-------------+------+------+------+------+------+------| 376 * | PGDN | Enter| A | S | D | F | G | H | J | K | L | ; | ' | Enter| 377 * |------+------+------+------+------+------+------|------+------+------+------+------+------+------| 378 * | Shift| Shift| Z | X | C | V | B | N | M | , | . | / | \ | Shift| 379 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 380 * | Ctrl | Win | Alt |Lower |Raise | Space/Enter | Space/Bkspc | <-- | v | ^ | --> | Esc | 381 * `-------------------------------------------------------------------------------------------------' 382 */ 383 [_QWERTY] = LAYOUT( 384 //,-----------------+-----------------+---------------+--------------+--------------+--------------+--------------+------+-----------+-----------------+----------------+-----------------+-----------------+------------------. 385 TD(TD_DEL_BSPC) , KC_BSPC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , TD(TD_9_LPRN) , TD(TD_0_RPRN) ,TD(TD_MINS_UNDS) , TD(TD_EQL_PLUS), 386 //|-----------------+-----------------+---------------+--------------+--------------+--------------+--------------+------+-----------+-----------------+----------------+-----------------+-----------------+------------------| 387 TD(TD_PGUP_HOME) , TD(TD_TAB_TILDE), TD(TD_Q_LrALT), KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,TD(TD_LBRC_LCBR) , TD(TD_RBRC_RCBR), 388 //|-----------------+-----------------+---------------+--------------+--------------+--------------+--------------+------+-----------+-----------------+----------------+-----------------+-----------------+------------------| 389 TD(TD_PGDN_END) , KC_ENT , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L ,TD(TD_SCLN_COLN) ,TD(TD_QUOT_DQT) , KC_ENT, 390 //|-----------------+-----------------+---------------+--------------+--------------+--------------+--------------+------+-----------+-----------------+----------------+-----------------+-----------------+------------------| 391 TD(TD_SHIFT_CAPS),TD(TD_SHIFT_CAPS), KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M ,TD(TD_COMM_LABK) ,TD(TD_DOT_RABK) ,TD(TD_SLSH_QUES) ,TD(TD_BSLS_PIPE) , KC_RSFT, 392 //|-----------------+-----------------+---------------+--------------+--------------+--------------+--------------+------+-----------+-----------------+--------+-------+-----------------+-----------------+------------------| 393 TD(CTL_OSL1) , OSM(MOD_LGUI) , TD(ALT_OSL1) ,TD(TD_LayerDn),TD(TD_LayerUp), TD(TD_LSPACE) , TD(TD_SPC_BKSPC) , KC_LEFT , KC_DOWN , KC_UP , KC_RIGHT ,TD(TD_ESC_GRAVE) 394 //`-----------------+-----------------+---------------+--------------+--------------+-----------------------------+----------------------------------+--------+-------+-----------------+----------------+-------------------' 395 ), 396 397 /* ALT Layout 398 * ,-----------------------------------------------------------------------------------------------------. 399 * | DEL | Bksp | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | 400 * |----------+------+------+------+------+------+------+------+------+------+------+------+------+------| 401 * | PGUP | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | 402 * |----------+------+------+------+------+------+-------------+------+------+------+------+------+------| 403 * | PGDN | Enter| A | S | D | F | G | H | J | K | L | ; | ' | Enter| 404 * |----------+------+------+------+------+------+------|------+------+------+------+------+------+------| 405 * | Shift | Shift| Z | X | C | V | B | N | M | , | . | / | \ | Shift| 406 * |----------+------+------+------+------+------+------+------+------+------+------+------+------+------| 407 * | Ctrl | Win | Alt |Lower |Raise | Space/Enter | Space/Bkspc | <-- | v | ^ | --> | Esc | 408 * `----------------------------------------------------------------------------------------------------' 409 */ 410 [_ALT] = LAYOUT( 411 //,---------------+---------------+-------------+---------------+--------------+---------+-----------------+-----------------+---------+---------+----------------+---------------+---------------+----------------. 412 KC_TRNS , KC_TRNS , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12, 413 //|---------------+---------------+-------------+---------------+--------------+---------+-----------------+-----------------+---------+---------+----------------+---------------+---------------+----------------| 414 KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS, 415 //|---------------+---------------+-------------+---------------+--------------+---------+-----------------+-----------------+---------+---------+----------------+---------------+---------------+----------------| 416 KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS, 417 //|---------------+---------------+-------------+---------------+--------------+---------+-----------------+-----------------+---------+---------+----------------+---------------+---------------+----------------| 418 KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS, 419 //|---------------+---------------+-------------+---------------+--------------+---------+-----------------+-----------------+---------+---------+----------------+---------------+---------------+----------------| 420 TD(CTL_OSL1) , OSM(MOD_LGUI) , TD(ALT_OSL1), TD(TD_LayerDn),TD(TD_LayerUp), TD(TD_SPC_ENT) , TD(TD_SPC_BKSPC) , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS ,TD(TD_ESC_GRAVE) 421 //`---------------+---------------+-------------+---------------+--------------+---------------------------+---------------------------+---------+----------------+---------------+---------------+----------------' 422 ), 423 424 /* CTRL Layout 425 * ,-----------------------------------------------------------------------------------------------------. 426 * | DEL/Bksp | F1 | F2 | F3 | F4 | F5 | DEL | Bksp | F6 | F7 | F8 | F9 | F10 | F11 | 427 * |----------+------+------+------+------+------+------+------+------+------+------+------+------+------| 428 * | Tab | Q | W | E | R | T | [ | ] | Y | U | I | O | P | F12 | 429 * |----------+------+------+------+------+------+-------------+------+------+------+------+------+------| 430 * | Enter | A | S | D | F | G | PGUP | HOME | H | J | K | L | ; | ' | 431 * |----------+------+------+------+------+------+------|------+------+------+------+------+------+------| 432 * | Shift | Z | X | C | V | B | PGDN | END | N | M | , | . | / | \ | 433 * |----------+------+------+------+------+------+------+------+------+------+------+------+------+------| 434 * | Ctrl | Win | Alt | Fn |Lower | Space/Enter | Space | <-- | v | ^ | --> | Esc | 435 * `----------------------------------------------------------------------------------------------------' 436 */ 437 // [_CTRL] = LAYOUT( 438 // //,-----------------+-------------+-------------+--------------+--------------+---------+-----------------+-----------------+---------+---------+----------------+---------------+---------------+----------------. 439 // KC_TRNS , KC_TRNS , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12, 440 // //|-----------------+-------------+-------------+--------------+--------------+---------+-----------------+-----------------+---------+---------+----------------+---------------+---------------+----------------| 441 // KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS, 442 // //|-----------------+-------------+-------------+--------------+--------------+---------+-----------------+-----------------+---------+---------+----------------+---------------+---------------+----------------| 443 // KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS, 444 // //|-----------------+-------------+-------------+--------------+--------------+---------+-----------------+-----------------+---------+---------+----------------+---------------+---------------+----------------| 445 // KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS, 446 // //|-----------------+-------------+-------------+--------------+--------------+---------+-----------------+-----------------+---------+---------+----------------+---------------+---------------+----------------| 447 // TD(CTL_OSL1) , KC_LGUI , TD(ALT_OSL1),TD(TD_LayerDn),TD(TD_LayerUp), TD(TD_SPC_ENT) , TD(TD_SPC_ENT) , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS ,TD(TD_ESC_GRAVE) 448 // //`-----------------+-------------+-------------+--------------+--------------+---------------------------+---------------------------+---------+----------------+---------------+---------------+----------------' 449 // ), 450 451 /* Lower 452 * ,-------------------------------------------------------------------------------------------------. 453 * | ` | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | 454 * |------+------+------+------+------+------+------+-------------+------+------+------+------+------| 455 * | ~ | | | | UP | | | | Prev | Next | Vol- | Vol+ | Play | | 456 * |------+------+------+------+------+------+------+-------------+------+------+------+------+------| 457 * | |Enter | | LEFT | DOWN |RIGHT | | | | | MUTE | | | | 458 * |------+------+------+------+------+------+------|------+------+------+------+------+------+------| 459 * | | | | | | | | | | | | | | | 460 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 461 * | | | | | | | | | | | | | 462 * `------------------------------------------------------------------------------------------+------' 463 */ 464 [_LOWER] = LAYOUT( 465 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, 466 KC_TILD, _______, _______, _______ , KC_UP , _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, 467 _______, KC_ENT , _______, KC_LEFT, KC_DOWN , KC_RIGHT, _______, _______, _______, _______, KC_MUTE, _______, _______, _______, 468 _______, _______, _______, _______ , _______ , _______, _______, _______, _______, _______, _______, _______, _______, _______, 469 _______, _______, _______, _______ , _______ , _______ , _______ , _______, _______, _______, _______, _______ 470 ), 471 472 /* Raise 473 * ,-------------------------------------------------------------------------------------------------. 474 * | | | | | | | | | | | | | | | 475 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 476 477 * ,-------------------------------------------------------------------------------------------------. 478 * | Ins | |Brite+|Brite-| | | | | 7 | 8 | 9 | / | - | = | 479 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 480 * | Home | PrtSc| | | |Reset | | | 4 | 5 | 6 | * | | | 481 * |------+------+------+------+------+-------------+------+------+------+------+------+------+------| 482 * | End | ScLk | | |Debug | | | | 1 | 2 | 3 | - | | | 483 * |------+------+------+------+------+------|------+------+------+------+------+------+------+------| 484 * | | Pause| | | | | | | 0 | , | . | + | | | 485 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 486 * |CtAlDl| | | | | | Enter | | | | | | 487 * `-------------------------------------------------------------------------------------------------' 488 */ 489 /* 490 KC_INS 491 KC_PSCR 492 KC_SCRL 493 KC_PAUS 494 495 */ 496 497 [_RAISE] = LAYOUT( 498 KC_INS , XXXXXXX , KC_BRIU, KC_BRID, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_7 , KC_8 , KC_9 , KC_SLASH , KC_MINUS, KC_EQUAL, 499 KC_HOME , KC_PSCR , XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, XXXXXXX, XXXXXXX, KC_4 , KC_5 , KC_6 , KC_ASTR , XXXXXXX , XXXXXXX, 500 KC_END , KC_SCRL , XXXXXXX, XXXXXXX, DB_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, KC_1 , KC_2 , KC_3 , KC_MINUS , XXXXXXX , XXXXXXX, 501 XXXXXXX , KC_PAUSE , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_0 , KC_DOT , KC_COMMA , KC_PLUS , XXXXXXX , XXXXXXX, 502 LALT(LCTL(KC_DEL)), _______ , _______, _______, _______, _______ , KC_KP_ENTER , _______, _______ , _______ , _______ , _______ 503 ), 504 505 /* Adjust (Lower + Raise) 506 * ,-------------------------------------------------------------------------------------------------. 507 * | Del | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | 508 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 509 * | | | | | | Reset| | | | | | | | | 510 * |------+------+------+------+------+------+------+-------------+------+------+------+------+------| 511 * | | | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | 512 * |------+------+------+------+------+------+------+------|------+------+------+------+------+------| 513 * | | | |Voice-|Voice+|Musoff|Mus on| | | | | | | | 514 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 515 * | | | | | | | | | | | | | | 516 * `-------------------------------------------------------------------------------------------------' 517 */ 518 [_ADJUST] = LAYOUT( 519 KC_DEL , _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, 520 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, 521 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, XXXXXXX, XXXXXXX, XXXXXXX, _______, 522 XXXXXXX, XXXXXXX, XXXXXXX, AU_PREV, AU_NEXT, MU_ON, MU_OFF, MI_ON, MI_OFF, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 523 XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 524 ) 525 , 526 527 /* Layer 3 - Mouse Controls 528 * ,-------------------------------------------------------------------------------------------------. 529 * | | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | 530 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 531 * | PGUP | | | |MS UP | |SPEED0| | |WHUP | | | | | 532 * |------+------+------+------+------+------+------+-------------+------+------+------+------+------| 533 * | PGDN | | |MSLeft|MS DN |MSRite|SPEED1| |WHLeft|WHDN |WHRite| | | | 534 * |------+------+------+------+------+------+------+------|------+------+------+------+------+------| 535 * | | | | | | |SPEED2| | BTN1 | BTN2 | BTN3 | | | | 536 * |------+------+------+------+------+------+------+------+------+------+------+------+------+------| 537 * | Ctrl | Win | Alt |Lower |Raise | Space/Enter | BTN1 | <-- | v | ^ | --> | Esc | 538 * `-------------------------------------------------------------------------------------------------' 539 */ 540 [_MOUSE] = LAYOUT( 541 _______ , XXXXXXX , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12, 542 _______ , XXXXXXX , XXXXXXX , XXXXXXX , MS_UP , XXXXXXX , MS_ACL0 , XXXXXXX, XXXXXXX , MS_WHLU , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX, 543 _______ , XXXXXXX , XXXXXXX , MS_LEFT , MS_DOWN , MS_RGHT , MS_ACL1 , XXXXXXX, MS_WHLL , MS_WHLD , MS_WHLR , XXXXXXX , XXXXXXX , XXXXXXX, 544 XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , MS_ACL2 , XXXXXXX, MS_BTN1 , MS_BTN2 , MS_BTN3 , XXXXXXX , XXXXXXX , XXXXXXX, 545 TD(CTL_OSL1), OSM(MOD_LGUI), TD(ALT_OSL1), TD(TD_LayerDn) ,TD(TD_LayerUp), TD(TD_SPC_ENT) , MS_BTN1 , KC_LEFT , KC_DOWN , KC_UP , KC_RIGHT, TD(TD_ESC_GRAVE) 546 ) 547 548 }; 549 550 551 bool process_record_user(uint16_t keycode, keyrecord_t *record) { 552 #ifdef CONSOLE_ENABLE 553 //uprintf("%s keycode\n", keycode); 554 dprintf("process --> KL: kc: 0x%04X, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed); 555 #endif 556 557 switch (keycode) { 558 case KC_TRNS: 559 case KC_NO: 560 /* Always cancel one-shot layer when another key gets pressed */ 561 if (record->event.pressed && is_oneshot_layer_active()) 562 clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED); 563 return true; 564 case QK_BOOT: 565 /* Don't allow reset from oneshot layer state */ 566 if (record->event.pressed && is_oneshot_layer_active()){ 567 clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED); 568 return false; 569 } 570 return true; 571 case LOWER: 572 if (record->event.pressed) { 573 layer_on(_LOWER); 574 update_tri_layer(_LOWER, _RAISE, _ADJUST); 575 } else { 576 layer_off(_LOWER); 577 update_tri_layer(_LOWER, _RAISE, _ADJUST); 578 } 579 return false; 580 case RAISE: 581 if (record->event.pressed) { 582 layer_on(_RAISE); 583 update_tri_layer(_LOWER, _RAISE, _ADJUST); 584 } else { 585 layer_off(_RAISE); 586 update_tri_layer(_LOWER, _RAISE, _ADJUST); 587 } 588 return false; 589 } 590 return true; 591 }; 592 593 void post_process_record_user(uint16_t keycode, keyrecord_t *record) { 594 #ifdef CONSOLE_ENABLE 595 //print("Running post_process_record_user.\n"); 596 dprintf("post_process --> KL: kc: 0x%04X, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed); 597 #endif 598 if (!record->event.pressed) { 599 if(keyboard_report->mods & MOD_BIT(KC_LCTL)) { 600 #ifdef CONSOLE_ENABLE 601 dprint("FOUND 2nd challenge: KC_LCTL is enabled.\n"); 602 #endif 603 if(keyboard_report->mods & MOD_BIT(KC_LSFT)) { 604 #ifdef CONSOLE_ENABLE 605 dprint("FOUND 3rd challenge: KC_LSFT is enabled.\n"); 606 #endif 607 // Remove Left Ctrl and Left Shift keys from Triple Tap of Left Ctrl key. 608 // Works with 'ctl_finished' function, Triple Tap. 609 unregister_mods(MOD_BIT(KC_LCTL)); 610 unregister_mods(MOD_BIT(KC_LSFT)); 611 #ifdef CONSOLE_ENABLE 612 dprint("** MODs for LCTL and LSFT have been released.\n"); 613 #endif 614 } 615 } 616 } 617 } 618