diff --git a/keymaps/default/keymap.c b/keymaps/default/keymap.c index 77eb199..8f0ccf7 100644 --- a/keymaps/default/keymap.c +++ b/keymaps/default/keymap.c @@ -36,6 +36,12 @@ enum layer_indices { LAYER_KEYBOARD_IDX, }; +// Used by to set system keymap +enum key_encodings { + LANG_NULL, // For layers that don't care about input lang + LANG_EN, + LANG_RU +}; enum led_indices { // We have seperate indexes for LEDs because // some layers may not need an led map. @@ -79,6 +85,7 @@ void keyboard_post_init_user(void) { rgb_matrix_enable(); } +int current_lang = 0; void set_layer_color(int layer) { @@ -148,7 +155,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case ST_MACRO_1: if (record->event.pressed) { SEND_STRING(SS_LGUI(SS_TAP(X_P)) SS_DELAY(100) SS_TAP(X_Y) SS_DELAY(100) SS_TAP(X_ENTER)); - } break; @@ -206,6 +212,28 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; } + +void set_lang(int lang) { + if (current_lang != lang) { + switch (lang) { + case LANG_EN: + SEND_STRING(SS_LGUI(SS_LSFT(SS_LCTL(SS_TAP(X_0)))));; + current_lang = lang; + break; + + case LANG_RU: + SEND_STRING(SS_LGUI(SS_LSFT(SS_LCTL(SS_TAP(X_9))))); + current_lang = lang; + break; + + case LANG_NULL: + break; + default: + break; + } + } +} + uint32_t layer_state_set_user(uint32_t state) { uint8_t layer = biton32(state); @@ -214,43 +242,54 @@ uint32_t layer_state_set_user(uint32_t state) { ergodox_right_led_1_off(); ergodox_right_led_2_off(); ergodox_right_led_3_off(); + switch (layer) { - case 1: - ergodox_right_led_1_on(); + case LAYER_MAIN_IDX: + set_lang(LANG_EN); break; - case 2: - ergodox_right_led_2_on(); + case LAYER_RUSSIAN_IDX: + set_lang(LANG_RU); break; - case 3: - ergodox_right_led_3_on(); + case LAYER_COLEMAK_IDX: + set_lang(LANG_EN); break; - case 4: - ergodox_right_led_1_on(); - ergodox_right_led_2_on(); + case LAYER_NUMPAD_IDX: + set_lang(LANG_EN); break; - case 5: - ergodox_right_led_1_on(); - ergodox_right_led_3_on(); + case LAYER_SYMBOLS_IDX: + set_lang(LANG_EN); break; - case 6: - ergodox_right_led_2_on(); - ergodox_right_led_3_on(); + case LAYER_ARROWS_IDX: + set_lang(LANG_EN); break; - case 8: + case LAYER_FKEYS_IDX: + set_lang(LANG_EN); + break; + + case LAYER_NAVIGATE_IDX: + set_lang(LANG_EN); + break; + + case LAYER_DESKTOP_IDX: + set_lang(LANG_EN); + break; + + case LAYER_KEYBOARD_IDX: + set_lang(LANG_NULL); ergodox_right_led_1_on(); ergodox_right_led_2_on(); ergodox_right_led_3_on(); break; - default: break; } + return state; };