keymap.c (8493B)
1 /* Copyright 2020 noclew 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 18 // Defines names for use in layer keycodes and the keymap 19 enum layer_names { 20 _BASE, 21 _LOWER, 22 _RAISE, 23 _ADJUST 24 }; 25 26 // Defines the keycodes used by our macros in process_record_user 27 enum custom_keycodes { 28 BASE = SAFE_RANGE, 29 LOWER, 30 RAISE, 31 }; 32 33 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 34 /* BASE 35 * ------------------------------------------------------------------------------------------------------------------ 36 * | * | / | = | Del || ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | BSpc | 37 * ------------------------------------------------------------------------------------------------------------------ 38 * | + | 7 | 8 | 9 || Tab | Q | W | E | R | T | Y | U | I | O | P | \ | 39 *------------------------------------------------------------------------------------------------------------------- 40 * | + | 4 | 5 | 6 || Esc | A | S | D | F | G | H | J | K | L | ; | Enter| 41 *------------------------------------------------------------------------------------------------------------------ 42 * | Enter| 1 | 2 | 3 || Shift| Z | X | C | V | B | N | M | , | . | / | Shift| 43 *------------------------------------------------------------------------------------------------------------------- 44 * | Enter| . | 0 | 0 || Ctrl | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up | Right| 45 *------------------------------------------------------------------------------------------------------------------- 46 */ 47 [_BASE] = LAYOUT_ortho_5x16( 48 KC_PAST, KC_PSLS, KC_EQL, KC_DEL, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, 49 KC_PPLS, KC_7, KC_8, KC_9, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, 50 KC_PPLS, KC_4, KC_5, KC_6, KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, 51 KC_ENT, KC_1, KC_2, KC_3, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_QUOT), 52 KC_ENT, KC_PDOT, KC_0, KC_0, KC_LCTL, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT 53 ), 54 55 [_LOWER] = LAYOUT_ortho_5x16( 56 _______, _______, _______, _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , 57 _______, _______, _______, _______, KC_BSPC, KC_SLSH, KC_7 , KC_8 , KC_9 , KC_PPLS, KC_CIRC, KC_LBRC, KC_RBRC, KC_AT , KC_EXLM, KC_BSLS, 58 _______, _______, _______, _______, KC_EQL , KC_0 , KC_4 , KC_5 , KC_6 , KC_MINS, KC_PIPE, KC_LPRN, KC_RPRN, KC_HASH, KC_DQUO, _______, 59 _______, _______, _______, _______, KC_ENT , KC_PAST, KC_1 , KC_2 , KC_3 , KC_UNDS, KC_DLR , KC_LCBR, KC_RCBR, KC_AMPR, KC_PERC, _______, 60 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 61 ), 62 63 [_RAISE] = LAYOUT_ortho_5x16( 64 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 65 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_BSPC, KC_DEL , KC_END , _______, 66 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_QUOT, _______, 67 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, _______, KC_PGDN, _______, 68 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 69 ), 70 71 [_ADJUST] = LAYOUT_ortho_5x16( 72 _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DB_TOGG, 73 _______, _______, _______, _______, _______, UG_TOGG, UG_PREV, UG_NEXT, UG_VALD, UG_VALU, _______, _______, _______, _______, _______, _______, 74 _______, _______, _______, _______, KC_CAPS, _______, UG_HUED, UG_HUEU, UG_SATD, UG_SATU, _______, _______, _______, _______, _______, _______, 75 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 76 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 77 ) 78 }; 79 80 bool process_record_user(uint16_t keycode, keyrecord_t *record) { 81 switch (keycode) { 82 83 case LOWER: 84 if (record->event.pressed) { 85 layer_on(_LOWER); 86 update_tri_layer(_LOWER, _RAISE, _ADJUST); 87 } else { 88 layer_off(_LOWER); 89 update_tri_layer(_LOWER, _RAISE, _ADJUST); 90 } 91 return false; 92 93 case RAISE: 94 if (record->event.pressed) { 95 layer_on(_RAISE); 96 update_tri_layer(_LOWER, _RAISE, _ADJUST); 97 } else { 98 layer_off(_RAISE); 99 update_tri_layer(_LOWER, _RAISE, _ADJUST); 100 } 101 return false; 102 103 } 104 return true; 105 } 106 107 bool encoder_update_user(uint8_t index, bool clockwise) { 108 /* With an if statement we can check which encoder was turned. */ 109 if (index == 0) { /* First encoder */ 110 /* And with another if statement we can check the direction. */ 111 if (clockwise) { 112 if (IS_LAYER_ON(_LOWER)){ 113 tap_code(KC_RIGHT); 114 } else if (IS_LAYER_ON(_RAISE)){ 115 tap_code(KC_DOWN); 116 } else { 117 tap_code(KC_VOLU); 118 } 119 } else { 120 if (IS_LAYER_ON(_LOWER)){ 121 tap_code(KC_LEFT); 122 } else if (IS_LAYER_ON(_RAISE)){ 123 tap_code(KC_UP); 124 } else { 125 tap_code(KC_VOLD); 126 } 127 } 128 129 } else if (index == 1) { /* Second encoder. Only supported by Elite-C */ 130 if (clockwise) { 131 if (IS_LAYER_ON(_LOWER)){ 132 tap_code(KC_RIGHT); 133 } else if (IS_LAYER_ON(_RAISE)){ 134 tap_code(KC_DOWN); 135 } else { 136 tap_code(KC_VOLU); 137 } 138 } else { 139 if (IS_LAYER_ON(_LOWER)){ 140 tap_code(KC_LEFT); 141 } else if (IS_LAYER_ON(_RAISE)){ 142 tap_code(KC_UP); 143 } else { 144 tap_code(KC_VOLD); 145 } 146 } 147 } 148 return true; 149 }