keymap.c (20971B)
1 #include QMK_KEYBOARD_H 2 3 typedef union { 4 uint32_t raw; 5 struct { 6 bool thumb_alt :1; 7 bool iso :1; 8 }; 9 } user_config_t; 10 11 user_config_t user_config; 12 13 #ifdef STENO_ENABLE 14 #endif // STENO_ENABLE 15 16 17 #define QWERTY_base KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, \ 18 KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ 19 KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH 20 #define DVORAK_base KC_GRV, KC_QUOT, KC_COMM, KC_DOT,KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_LBRC, KC_RBRC, \ 21 KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \ 22 KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z 23 #define COLEMAK_base KC_GRV, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, \ 24 KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \ 25 KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH 26 #define WORKMAN_base KC_GRV, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_LBRC, KC_RBRC, \ 27 KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT, \ 28 KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH 29 #ifdef ALT_LAYOUTS_ENABLE 30 #include "keymap_dvorak.h" 31 #include "keymap_colemak.h" 32 #include "keymap_workman.h" 33 #define DVK2QWE_base DV_GRV, DV_Q, DV_W, DV_E, DV_R, DV_T, DV_Y, DV_U, DV_I, DV_O, DV_P, DV_LBRC, DV_RBRC, \ 34 DV_A, DV_S, DV_D, DV_F, DV_G, DV_H, DV_J, DV_K, DV_L, DV_SCLN, DV_QUOT, \ 35 DV_Z, DV_X, DV_C, DV_V, DV_B, DV_N, DV_M, DV_COMM, DV_DOT, DV_SLSH 36 #define CMK2QWE_base KC_GRV, CM_Q, CM_W, CM_E, CM_R, CM_T, CM_Y, CM_U, CM_I, CM_O, CM_P, KC_LBRC, KC_RBRC, \ 37 CM_A, CM_S, CM_D, CM_F, CM_G, CM_H, CM_J, CM_K, CM_L, CM_SCLN, KC_QUOT, \ 38 CM_Z, CM_X, CM_C, CM_V, CM_B, CM_N, CM_M, CM_COMM, CM_DOT, CM_SLSH 39 #define WMN2QWE_base KC_GRV, WK_Q, WK_W, WK_E, WK_R, WK_T, WK_Y, WK_U, WK_I, WK_O, WK_P, KC_LBRC, KC_RBRC, \ 40 WK_A, WK_S, WK_D, WK_F, WK_G, WK_H, WK_J, WK_K, WK_L, WK_SCLN, KC_QUOT, \ 41 WK_Z, WK_X, WK_C, WK_V, WK_B, WK_N, WK_M, KC_COMM, KC_DOT, KC_SLSH 42 #define CMK2DVK_base KC_GRV, KC_QUOT, KC_COMM, KC_DOT,CM_P, CM_Y, CM_F, CM_G, CM_C, CM_R, CM_L, KC_LBRC, KC_RBRC, \ 43 CM_A, CM_O, CM_E, CM_U, CM_I, CM_D, CM_H, CM_T, CM_N, CM_S, CM_SLSH, \ 44 CM_SCLN, CM_Q, CM_J, CM_K, CM_X, CM_B, CM_M, CM_W, CM_V, CM_Z 45 #define WMN2DVK_base KC_GRV, KC_QUOT, KC_COMM, KC_DOT,WK_P, WK_Y, WK_F, WK_G, WK_C, WK_R, WK_L, KC_LBRC, KC_RBRC, \ 46 WK_A, WK_O, WK_E, WK_U, WK_I, WK_D, WK_H, WK_T, WK_N, WK_S, KC_SLSH, \ 47 WK_SCLN, WK_Q, WK_J, WK_K, WK_X, WK_B, WK_M, WK_W, WK_V, WK_Z 48 #define DVK2CMK_base DV_GRV, DV_Q, DV_W, DV_F, DV_P, DV_G, DV_J, DV_L, DV_U, DV_Y, DV_SCLN, DV_LBRC, DV_RBRC, \ 49 DV_A, DV_R, DV_S, DV_T, DV_D, DV_H, DV_N, DV_E, DV_I, DV_O, DV_QUOT, \ 50 DV_Z, DV_X, DV_C, DV_V, DV_B, DV_K, DV_M, DV_COMM, DV_DOT, DV_SLSH 51 #define WMN2CMK_base KC_GRV, WK_Q, WK_W, WK_F, WK_P, WK_G, WK_J, WK_L, WK_U, WK_Y, WK_SCLN, KC_LBRC, KC_RBRC, \ 52 WK_A, WK_R, WK_S, WK_T, WK_D, WK_H, WK_N, WK_E, WK_I, WK_O, KC_QUOT, \ 53 WK_Z, WK_X, WK_C, WK_V, WK_B, WK_K, WK_M, KC_COMM, KC_DOT, KC_SLSH 54 #define DVK2WMN_base DV_GRV, DV_Q, DV_D, DV_R, DV_W, DV_B, DV_J, DV_F, DV_U, DV_P, DV_SCLN, DV_LBRC, DV_RBRC, \ 55 DV_A, DV_S, DV_H, DV_T, DV_G, DV_Y, DV_N, DV_E, DV_O, DV_I, DV_QUOT, \ 56 DV_Z, DV_X, DV_M, DV_C, DV_V, DV_K, DV_L, DV_COMM, DV_DOT, DV_SLSH 57 #define CMK2WMN_base KC_GRV, CM_Q, CM_D, CM_R, CM_W, CM_B, CM_J, CM_F, CM_U, CM_P, CM_SCLN, KC_LBRC, KC_RBRC, \ 58 CM_A, CM_S, CM_H, CM_T, CM_G, CM_Y, CM_N, CM_E, CM_O, CM_I, KC_QUOT, \ 59 CM_Z, CM_X, CM_M, CM_C, CM_V, CM_K, CM_L, CM_COMM, CM_DOT, CM_SLSH 60 #endif // ALT_LAYOUTS_ENABLE 61 62 enum jian_layers { 63 _QWERTY, 64 #ifdef ALT_LAYOUTS_ENABLE 65 _DVORAK, 66 _COLEMAK, 67 _WORKMAN, 68 _DVK2QWE, 69 _DVK2CMK, 70 _DVK2WMN, 71 _CMK2QWE, 72 _CMK2DVK, 73 _CMK2WMN, 74 _WMN2QWE, 75 _WMN2DVK, 76 _WMN2CMK, 77 #endif // ALT_LAYOUTS_ENABLE 78 _ISO, 79 _LOWER, 80 _RAISE, 81 _ADJUST, 82 _BCKLT_ADJ, 83 _THUMB_ALT, 84 #ifdef TRAINING_HALFES_LOCK 85 _LEFT, 86 _RIGHT, 87 #endif //TRAINING_HALFES_LOCK 88 #ifdef STENO_ENABLE 89 _PLOVER 90 #endif // STENO_ENABLE 91 }; 92 93 enum jian_keycodes { 94 QWERTY = SAFE_RANGE, 95 PLOVER, 96 EXT_PLV, 97 EXT_RGB, 98 ISO, 99 THUMB_ALT, 100 //ifdef ALT_LAYOUTS_ENABLE 101 CH_WMN, 102 CH_CMK, 103 CH_QWE, 104 CH_DVK, 105 //endif // ALT_LAYOUTS_ENABLE 106 #ifdef DIP_SWITCH_ENABLE 107 LAYOUT0, 108 LAYOUT1, 109 LAYOUT2, 110 LAYOUT3, 111 DIP_ISO, 112 FLIP_TH, 113 DIP6, 114 DIP7, 115 DIP8, 116 DIP9, 117 DIP10, 118 DIP11, 119 #endif // DIP_SWITCH_ENABLE 120 }; 121 122 #ifdef TRAINING_HALFES_LOCK 123 static uint8_t lock_timeout = 1; 124 static uint8_t lock_cooldown = 0; 125 #endif //TRAINING_HALFES_LOCK 126 #ifdef DIP_SWITCH_ENABLE 127 #ifdef ALT_LAYOUTS_ENABLE 128 static uint8_t layout_conversion_dip_state = 0; 129 #endif // ALT_LAYOUTS_ENABLE 130 #endif // DIP_SWITCH_ENABLE 131 132 #define LOWER MO(_LOWER) 133 #define RAISE MO(_RAISE) 134 135 #define BL_ADJ TG(_BCKLT_ADJ) 136 #define TG_LWR TG(_LOWER) 137 #define TG_RSE TG(_RAISE) 138 139 #define RBR_RGU MT(MOD_RGUI, KC_RBRC) 140 #define F12_RGU MT(MOD_RGUI, KC_F12) 141 #define EQL_LCT MT(MOD_LCTL, KC_EQL) 142 #define APP_LCT MT(MOD_LCTL, KC_APP) 143 #define EQL_RCT MT(MOD_RCTL, KC_EQL) 144 #define QUO_RCT MT(MOD_RCTL, KC_QUOT) 145 #define APP_RCT MT(MOD_RCTL, KC_APP) 146 #define MIN_RCT MT(MOD_RCTL, KC_MINS) 147 #define PLS_LAL MT(MOD_LALT, KC_PPLS) 148 #define BSL_RAL MT(MOD_RALT, KC_BSLS) 149 150 #define NBS_LCT MT(MOD_LCTL, KC_NUBS) 151 #define BSH_LAL MT(MOD_LALT, KC_BSLS) 152 #define APP_RAL MT(MOD_RALT, KC_APP) 153 154 #define BSP_LSH MT(MOD_LSFT, KC_BSPC) 155 #define BSP_RSH MT(MOD_RSFT, KC_BSPC) 156 #define SPC_LSH MT(MOD_LSFT, KC_SPC) 157 #define SPC_RSH MT(MOD_RSFT, KC_SPC) 158 #define DEL_RSE LT(_RAISE, KC_DEL) 159 #define TAB_RSE LT(_RAISE, KC_TAB) 160 #define ENT_LWR LT(_LOWER, KC_ENT) 161 #define ESC_LWR LT(_LOWER, KC_ESC) 162 163 #define RGU_RBR RGUI_T(KC_RBRC) 164 #define RCT_QUO RCTL_T(KC_QUOT) 165 166 #define LAYOUT_base( \ 167 GRV, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, \ 168 A, S, D, F, G, H, J, K, L, SCLN, QUOT, \ 169 Z, X, C, V, B, N, M, COMM, DOT, SLSH \ 170 ) \ 171 LAYOUT( \ 172 KC_LGUI, GRV, Q, W, E, R, T, Y, U, I, O, P, LBRC, RGU_RBR, \ 173 KC_LCTL, A, S, D, F, G, H, J, K, L, SCLN, RCT_QUO, \ 174 KC_LALT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, BSL_RAL, \ 175 TAB_RSE, SPC_LSH, ENT_LWR, ESC_LWR, BSP_RSH, DEL_RSE \ 176 ) 177 #define LAYOUT_base_wrapper(...) LAYOUT_base(__VA_ARGS__) 178 179 #ifdef SWAP_HANDS_ENABLE 180 #define SW_TG SH_TOGG 181 #else 182 #define SW_TG _______ 183 #endif 184 185 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 186 187 [_QWERTY] = LAYOUT_base_wrapper(QWERTY_base), 188 189 [_LOWER] = LAYOUT( 190 _______, KC_UNDS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, F12_RGU, 191 EQL_LCT, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, MIN_RCT, 192 PLS_LAL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, 193 _______, _______, _______, _______, _______, _______ 194 ), 195 196 [_RAISE] = LAYOUT( 197 _______, KC_NUM, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_VOLU, KC_HOME, KC_PSCR, KC_PGUP, KC_SCRL, KC_CAPS, _______, 198 EQL_LCT, KC_PAST, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_MUTE, KC_LEFT, KC_UP, KC_RGHT, KC_INS, APP_RCT, 199 _______, KC_P0, KC_P1, KC_P2, KC_P3, KC_PCMM, KC_VOLD, KC_END, KC_DOWN, KC_PGDN, KC_PAUS, _______, 200 _______, _______, _______, _______, _______, _______ 201 ), 202 203 [_ADJUST] = LAYOUT( 204 QK_BOOT, DB_TOGG, AS_UP, CH_WMN, CH_CMK, CH_QWE, CH_DVK, CH_DVK, CH_QWE, CH_CMK, CH_WMN, AS_UP, DB_TOGG, QK_BOOT, 205 AS_RPT, AS_TOGG, XXXXXXX, XXXXXXX, QWERTY, PLOVER, PLOVER, QWERTY, XXXXXXX, XXXXXXX, AS_TOGG, AS_RPT, 206 BL_ADJ, AS_DOWN, XXXXXXX, XXXXXXX, ISO, THUMB_ALT, THUMB_ALT, ISO, XXXXXXX, XXXXXXX, AS_DOWN, BL_ADJ, 207 _______, SW_TG, _______, _______, SW_TG, _______ 208 ), 209 #if defined(RGBLIGHT) | defined(BACKLIGHT_ENABLE) 210 [_BCKLT_ADJ] = LAYOUT( 211 XXXXXXX, XXXXXXX, XXXXXXX, BL_UP, UG_VALU, UG_HUED, UG_HUEU, UG_HUEU, UG_HUED, UG_VALU, BL_UP, XXXXXXX, XXXXXXX, XXXXXXX, 212 XXXXXXX, XXXXXXX, BL_DOWN, UG_VALD, UG_SATD, UG_SATU, UG_SATU, UG_SATD, UG_VALD, BL_DOWN, XXXXXXX, XXXXXXX, 213 BL_ADJ, BL_BRTG, BL_TOGG, UG_TOGG, UG_PREV, UG_NEXT, UG_NEXT, UG_PREV, UG_TOGG, BL_TOGG, BL_BRTG, BL_ADJ, 214 _______, _______, _______, _______, _______, _______ 215 ), 216 #endif // defined(RGBLIGHT) | defined(BACKLIGHT_ENABLE) 217 #ifdef TRAINING_HALFES_LOCK 218 [_LEFT] = LAYOUT_base( 219 _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, 220 _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, 221 _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX 222 ), 223 224 [_RIGHT] = LAYOUT_base( 225 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, 226 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, _______, 227 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______ 228 ), 229 #endif // TRAINING_HALFES_LOCK 230 231 #ifdef STENO_ENABLE 232 [_PLOVER] = LAYOUT( 233 EXT_PLV, STN_N1, STN_N2, STN_N3, STN_N4, STN_N5, STN_N6, STN_N7, STN_N8, STN_N9, STN_NA, STN_NB, STN_NC, EXT_PLV, 234 STN_FN, STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR, 235 XXXXXXX, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR, 236 XXXXXXX, STN_A, STN_O, STN_E, STN_U, XXXXXXX 237 ), 238 #endif // STENO_ENABLE 239 240 [_THUMB_ALT] = LAYOUT( 241 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 242 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 243 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 244 DEL_RSE, BSP_LSH, ESC_LWR, ENT_LWR, SPC_RSH, TAB_RSE 245 ), 246 247 [_ISO] = LAYOUT( 248 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 249 LCTL_T(KC_NUBS), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 250 LALT_T(KC_NUHS), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RALT, 251 _______, _______, _______, _______, _______, _______ 252 ), 253 254 #ifdef ALT_LAYOUTS_ENABLE 255 [_DVORAK] = LAYOUT_base_wrapper(DVORAK_base), 256 [_COLEMAK] = LAYOUT_base_wrapper(COLEMAK_base), 257 [_WORKMAN] = LAYOUT_base_wrapper(WORKMAN_base), 258 [_DVK2QWE] = LAYOUT_base_wrapper(DVK2QWE_base), 259 [_CMK2QWE] = LAYOUT_base_wrapper(CMK2QWE_base), 260 [_WMN2QWE] = LAYOUT_base_wrapper(WMN2QWE_base), 261 [_CMK2DVK] = LAYOUT_base_wrapper(CMK2DVK_base), 262 [_WMN2DVK] = LAYOUT_base_wrapper(WMN2DVK_base), 263 [_DVK2CMK] = LAYOUT_base_wrapper(DVK2CMK_base), 264 [_WMN2CMK] = LAYOUT_base_wrapper(WMN2CMK_base), 265 [_DVK2WMN] = LAYOUT_base_wrapper(DVK2WMN_base), 266 [_CMK2WMN] = LAYOUT_base_wrapper(CMK2WMN_base) 267 #endif // ALT_LAYOUTS_ENABLE 268 }; 269 270 layer_state_t layer_state_set_user(layer_state_t state) { 271 return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); 272 } 273 274 #ifdef DIP_SWITCH_ENABLE 275 #ifdef ALT_LAYOUTS_ENABLE 276 void layout_convert(uint8_t statuses) { 277 switch (0b1111 & statuses) { 278 case 0b0000: 279 set_single_persistent_default_layer(_QWERTY); 280 break; 281 case 0b0001: 282 set_single_persistent_default_layer(_DVORAK); 283 break; 284 case 0b0010: 285 set_single_persistent_default_layer(_COLEMAK); 286 break; 287 case 0b0011: 288 set_single_persistent_default_layer(_WORKMAN); 289 break; 290 case 0b0100: 291 set_single_persistent_default_layer(_DVK2QWE); 292 break; 293 case 0b0101: 294 set_single_persistent_default_layer(_QWERTY); 295 break; 296 case 0b0110: 297 set_single_persistent_default_layer(_DVK2CMK); 298 break; 299 case 0b0111: 300 set_single_persistent_default_layer(_DVK2WMN); 301 break; 302 case 0b1000: 303 set_single_persistent_default_layer(_CMK2QWE); 304 break; 305 case 0b1001: 306 set_single_persistent_default_layer(_CMK2DVK); 307 break; 308 case 0b1010: 309 set_single_persistent_default_layer(_QWERTY); 310 break; 311 case 0b1011: 312 set_single_persistent_default_layer(_CMK2WMN); 313 break; 314 case 0b1100: 315 set_single_persistent_default_layer(_WMN2QWE); 316 break; 317 case 0b1101: 318 set_single_persistent_default_layer(_WMN2DVK); 319 break; 320 case 0b1110: 321 set_single_persistent_default_layer(_WMN2CMK); 322 break; 323 case 0b1111: 324 set_single_persistent_default_layer(_QWERTY); 325 break; 326 } 327 } 328 #endif // ALT_LAYOUTS_ENABLE 329 #endif // DIP_SWITCH_ENABLE 330 331 void keyboard_post_init_user(void) { 332 user_config.raw = eeconfig_read_user(); 333 if (user_config.thumb_alt) { 334 layer_on(_THUMB_ALT); 335 } else { 336 layer_off(_THUMB_ALT); 337 } 338 if (user_config.iso) { 339 layer_on(_ISO); 340 } else { 341 layer_off(_ISO); 342 } 343 } 344 345 #ifdef ALT_LAYOUTS_ENABLE 346 static char change_layout_input = 0; 347 static bool change_layout_keystroke = 0; 348 void change_layout_conversion(uint16_t keycode) { 349 switch (keycode) { 350 case CH_WMN: 351 change_layout_input |= 0b1000 << (change_layout_keystroke << 2); 352 break; 353 case CH_CMK: 354 change_layout_input |= 0b0100 << (change_layout_keystroke << 2); 355 break; 356 case CH_DVK: 357 change_layout_input |= 0b0010 << (change_layout_keystroke << 2); 358 break; 359 case CH_QWE: 360 change_layout_input |= 0b0001 << (change_layout_keystroke << 2); 361 break; 362 } 363 if (change_layout_keystroke == 1) { 364 switch (change_layout_input) { 365 case 0b00010001: 366 set_single_persistent_default_layer(_QWERTY); 367 break; 368 case 0b00100001: 369 set_single_persistent_default_layer(_DVORAK); 370 break; 371 case 0b01000001: 372 set_single_persistent_default_layer(_COLEMAK); 373 break; 374 case 0b10000001: 375 set_single_persistent_default_layer(_WORKMAN); 376 break; 377 case 0b00010010: 378 set_single_persistent_default_layer(_DVK2QWE); 379 break; 380 case 0b00100010: 381 set_single_persistent_default_layer(_QWERTY); 382 break; 383 case 0b01000010: 384 set_single_persistent_default_layer(_DVK2CMK); 385 break; 386 case 0b10000010: 387 set_single_persistent_default_layer(_DVK2WMN); 388 break; 389 case 0b00010100: 390 set_single_persistent_default_layer(_CMK2QWE); 391 break; 392 case 0b00100100: 393 set_single_persistent_default_layer(_CMK2DVK); 394 break; 395 case 0b01000100: 396 set_single_persistent_default_layer(_QWERTY); 397 break; 398 case 0b10000100: 399 set_single_persistent_default_layer(_CMK2WMN); 400 break; 401 case 0b00011000: 402 set_single_persistent_default_layer(_WMN2QWE); 403 break; 404 case 0b00101000: 405 set_single_persistent_default_layer(_WMN2DVK); 406 break; 407 case 0b01001000: 408 set_single_persistent_default_layer(_WMN2CMK); 409 break; 410 case 0b10001000: 411 set_single_persistent_default_layer(_QWERTY); 412 break; 413 } 414 change_layout_input = 0; 415 } 416 change_layout_keystroke ^= 1; 417 } 418 #endif // ALT_LAYOUTS_ENABLE 419 420 bool process_record_user(uint16_t keycode, keyrecord_t *record) { 421 #ifdef TRAINING_HALFES_LOCK 422 if (!record->event.pressed) { 423 lock_cooldown = --lock_cooldown < 0 ? 0 : lock_cooldown; 424 } 425 if (lock_cooldown == 0) { 426 layer_off(_LEFT); 427 layer_off(_RIGHT); 428 } 429 #endif // TRAINING_HALFES_LOCK 430 switch (keycode) { 431 #ifdef TRAINING_HALFES_LOCK 432 case SPC_RSH: 433 case BSP_RSH: 434 case DEL_RSE: 435 case ESC_LWR: 436 case BSL_RAL: 437 case RGU_RBR: 438 case RCT_QUO: 439 if (record->event.pressed) { 440 layer_on(_LEFT); 441 lock_cooldown = lock_timeout; 442 } 443 else { 444 lock_cooldown = 0; 445 layer_off(_LEFT); 446 } 447 break; 448 case BSP_LSH: 449 case SPC_LSH: 450 case TAB_RSE: 451 case ENT_LWR: 452 case KC_LCTL: 453 case KC_LGUI: 454 case KC_LALT: 455 if (record->event.pressed) { 456 layer_on(_RIGHT); 457 lock_cooldown = lock_timeout; 458 } 459 else { 460 lock_cooldown = 0; 461 layer_off(_RIGHT); 462 } 463 break; 464 #endif // TRAINING_HALFES_LOCK 465 #ifdef STENO_ENABLE 466 case PLOVER: 467 if (!record->event.pressed) { 468 layer_off(_RAISE); 469 layer_off(_LOWER); 470 layer_off(_ADJUST); 471 layer_on(_PLOVER); 472 if (!eeconfig_is_enabled()) { 473 eeconfig_init(); 474 } 475 eeconfig_read_keymap(&keymap_config); 476 keymap_config.nkro = 1; 477 eeconfig_update_keymap(&keymap_config); 478 } 479 return false; 480 case EXT_PLV: 481 if (record->event.pressed) { 482 layer_off(_PLOVER); 483 } 484 return false; 485 #endif // STENO_ENABLE 486 case QWERTY: 487 if (record->event.pressed) { 488 set_single_persistent_default_layer(_QWERTY); 489 } 490 return false; 491 #ifdef ALT_LAYOUTS_ENABLE 492 case CH_WMN: 493 case CH_CMK: 494 case CH_QWE: 495 case CH_DVK: 496 if (record->event.pressed) { 497 change_layout_conversion(keycode); 498 } 499 return false; 500 #endif // ALT_LAYOUTS_ENABLE 501 case THUMB_ALT: 502 if (record->event.pressed) { 503 layer_invert(_THUMB_ALT); 504 user_config.thumb_alt ^= 1; 505 eeconfig_update_user(user_config.raw); 506 } 507 return false; 508 case ISO: 509 if (record->event.pressed) { 510 layer_invert(_ISO); 511 user_config.iso ^= 1; 512 eeconfig_update_user(user_config.raw); 513 } 514 return false; 515 } 516 return true; 517 } 518 519 #if defined(DIP_SWITCH_ENABLE) 520 bool dip_switch_update_user(uint8_t index, bool active) { 521 switch (index) { 522 # if defined(ALT_LAYOUTS_ENABLE) 523 case 0: // LAYOUT0 524 case 6: 525 if (active) { 526 layout_conversion_dip_state |= 1 << 0; 527 } else { 528 layout_conversion_dip_state &= ~(1 << 0); 529 } 530 layout_convert(layout_conversion_dip_state); 531 break; 532 case 1: // LAYOUT1 533 case 7: 534 if (active) { 535 layout_conversion_dip_state |= 1 << 1; 536 } else { 537 layout_conversion_dip_state &= ~(1 << 1); 538 } 539 layout_convert(layout_conversion_dip_state); 540 break; 541 case 2: // LAYOUT2 542 case 8: 543 if (active) { 544 layout_conversion_dip_state |= 1 << 2; 545 } else { 546 layout_conversion_dip_state &= ~(1 << 2); 547 } 548 layout_convert(layout_conversion_dip_state); 549 break; 550 case 3: // LAYOUT3 551 case 9: 552 if (active) { 553 layout_conversion_dip_state |= 1 << 3; 554 } else { 555 layout_conversion_dip_state &= ~(1 << 3); 556 } 557 layout_convert(layout_conversion_dip_state); 558 break; 559 case 4: // DIP_ISO 560 case 10: 561 if (active) { 562 layer_on(_ISO); 563 } else { 564 layer_off(_ISO); 565 } 566 break; 567 case 5: // FLIP_TH 568 case 11: 569 if (active) { 570 layer_on(_THUMB_ALT); 571 } else { 572 layer_off(_THUMB_ALT); 573 } 574 break; 575 # endif 576 } 577 578 return true; 579 } 580 #endif