From b5eef54b2caf6dadb6e2d2fc7cd738aaf834cf2c Mon Sep 17 00:00:00 2001 From: Mark Date: Wed, 9 Feb 2022 12:07:34 -0800 Subject: [PATCH] Added russian control hack --- keymaps/default/keymap.c | 73 ++++++++++++++++++-------------- keymaps/default/keymap.h | 7 +++ keymaps/default/layers/main.h | 2 +- keymaps/default/layers/russian.h | 14 +++--- 4 files changed, 56 insertions(+), 40 deletions(-) diff --git a/keymaps/default/keymap.c b/keymaps/default/keymap.c index 8f0ccf7..2754331 100644 --- a/keymaps/default/keymap.c +++ b/keymaps/default/keymap.c @@ -14,7 +14,9 @@ enum custom_keycodes { ST_MACRO_1, RU_LAYER, EN_LAYER, - RU_SYMBOL, + M_RU_CTRL, + M_RU_ALT, + }; enum tap_dance_codes { @@ -78,14 +80,14 @@ const uint8_t PROGMEM ledmap[][DRIVER_LED_TOTAL][3] = { [LAYER_DESKTOP_LEDS_IDX] = LAYER_DESKTOP_LEDS }; -extern bool g_suspend_state; -extern rgb_config_t rgb_matrix_config; +int current_lang = LANG_EN; void keyboard_post_init_user(void) { rgb_matrix_enable(); + //set_lang(LANG_EN); } -int current_lang = 0; + void set_layer_color(int layer) { @@ -143,6 +145,27 @@ void rgb_matrix_indicators_user(void) { } } +void set_lang(int lang) { set_lang_long(lang, false); } +void set_lang_long(int lang, bool force) { + if (current_lang != lang || force) { + 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; + } + } +} bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { @@ -160,25 +183,32 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case RU_LAYER: if (record->event.pressed) { - SEND_STRING(SS_LGUI(SS_LSFT(SS_LCTL(SS_TAP(X_9))))); + set_lang(LANG_RU); layer_move(LAYER_RUSSIAN_IDX); } break; case EN_LAYER: if (record->event.pressed) { - SEND_STRING(SS_LGUI(SS_LSFT(SS_LCTL(SS_TAP(X_0))))); + set_lang(LANG_EN); layer_move(LAYER_MAIN_IDX); } break; - case RU_SYMBOL: + case M_RU_CTRL: if (record->event.pressed) { - SEND_STRING(SS_LGUI(SS_LSFT(SS_LCTL(SS_TAP(X_0))))); - layer_on(LAYER_SYMBOLS_IDX); + if (current_lang == LANG_RU) { + set_lang_long(LANG_EN, true); + layer_move(LAYER_MAIN_IDX); + current_lang = LANG_RU; + } + register_code16(KC_LCTRL); } else { - SEND_STRING(SS_LGUI(SS_LSFT(SS_LCTL(SS_TAP(X_9))))); - layer_off(LAYER_SYMBOLS_IDX); + unregister_code16(KC_LCTRL); + if (current_lang == LANG_RU) { + layer_move(LAYER_RUSSIAN_IDX); + set_lang_long(LANG_RU, true); + } } break; @@ -213,27 +243,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } -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); diff --git a/keymaps/default/keymap.h b/keymaps/default/keymap.h index db8be39..f1a7d9c 100644 --- a/keymaps/default/keymap.h +++ b/keymaps/default/keymap.h @@ -44,3 +44,10 @@ #define NO_BSLS_ALT KC_EQUAL #define LSA_T(kc) MT(MOD_LSFT | MOD_LALT, kc) #define BP_NDSH_MAC ALGR(KC_8) + +extern int current_lang; +extern bool g_suspend_state; +extern rgb_config_t rgb_matrix_config; + +void set_lang(int lang); +void set_lang_long(int lang, bool force); diff --git a/keymaps/default/layers/main.h b/keymaps/default/layers/main.h index 9477cbd..2c11da2 100644 --- a/keymaps/default/layers/main.h +++ b/keymaps/default/layers/main.h @@ -5,7 +5,7 @@ KC_ESCAPE, KC_1, KC_2, KC_3, KC_4, KC_5, TG(LAYER_NUMPAD_IDX),\ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LGUI,\ KC_DELETE, KC_A, KC_S, KC_D, KC_F, KC_G,\ - KC_LCTRL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_TRANSPARENT,\ + M_RU_CTRL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_TRANSPARENT,\ MO(LAYER_DESKTOP_IDX), OSL(LAYER_FKEYS_IDX), KC_LALT, KC_LSHIFT, MO(LAYER_ARROWS_IDX),\ \ KC_PSCREEN, LT(LAYER_KEYBOARD_IDX,KC_NO),\ diff --git a/keymaps/default/layers/russian.h b/keymaps/default/layers/russian.h index e8df9d6..6b48054 100644 --- a/keymaps/default/layers/russian.h +++ b/keymaps/default/layers/russian.h @@ -5,22 +5,22 @@ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,\ KC_TRANSPARENT, RU_CHE, RU_SHA, RU_IE, RU_ER, RU_TE, RU_YO,\ KC_TRANSPARENT, RU_A, RU_ES, RU_DE, RU_EF, RU_GHE,\ - KC_TRANSPARENT, RU_ZE, RU_YA, RU_TSE, RU_VE, RU_BE, RU_E,\ - KC_TRANSPARENT, MO(LAYER_DESKTOP_IDX), KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,\ + M_RU_CTRL, RU_ZE, RU_YA, RU_TSE, RU_VE, RU_BE, RU_E,\ + KC_TRANSPARENT, KC_TRANSPARENT, KC_LALT, KC_TRANSPARENT, KC_TRANSPARENT,\ \ - KC_TRANSPARENT, KC_TRANSPARENT,\ - KC_TRANSPARENT,\ + KC_TRANSPARENT, KC_TRANSPARENT,\ + KC_TRANSPARENT,\ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,\ \ \ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, RU_NUM, RU_RUBL, KC_TRANSPARENT,\ RU_SOFT, RU_U, RU_YU, RU_I, RU_O, RU_SHCH, KC_TRANSPARENT,\ - RU_HA, RU_ZHE, RU_KA, RU_SYMBOL, RU_EL, KC_TRANSPARENT,\ + RU_HA, RU_ZHE, RU_KA, KC_TRANSPARENT, RU_EL, KC_TRANSPARENT,\ RU_HARD, RU_EN, RU_EM, RU_PE, RU_YERU, RU_SHTI, KC_TRANSPARENT,\ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,\ \ - KC_TRANSPARENT, EN_LAYER,\ - KC_TRANSPARENT,\ + KC_NO, EN_LAYER,\ + KC_NO,\ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT\ )