LINUX.ORG.RU

История изменений

Исправление Sorcus, (текущая версия) :

В общем набросал тут чутка кода для автоматического переключения раскладки.

bool ru_layout = false;

void switch_language(void) {
  register_code(KC_LGUI);
  register_code(KC_SPACE);
  unregister_code(KC_SPACE);
  unregister_code(KC_LGUI);
}

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case RGB_SLD:
      if (record->event.pressed) {
        rgblight_mode(1);
      }
      return false;
    default:
      if (record->event.pressed) {
        if (get_highest_layer(layer_state) == 1) {
          if (!ru_layout) {
            switch_language(); ru_layout = true;
          }
        } else {
          if (ru_layout) {
            switch_language(); ru_layout = false;
          }
        }
      }
      return true;
  }
  return true;
}

В моём случае у слоя с русскими буквами цифра 1.
Если происходит переключение на этот слой и ru_layout == false, вызывается функция switch_language.
Для всех остальных слоёв дефолтным является английский.
Переключение на него происходит только в том случае, если ru_layout == true.
Как-то так в общем. Может кому-нибудь ещё пригодится данное решение.

P.S. Если из слоя с русским переключиться на слой с символами (в режиме OSL), то при быстом нажатии двух символов оба будут в русской раскладке.
Т.е. к примеру вместо будет ъе. Не знаю почему так. Может у кого есть мысли по этому поводу?

Исходная версия Sorcus, :

В общем набросал тут чутка кода для автоматического переключения раскладки.

bool ru_layout = false;

void switch_language(void) {
  register_code(KC_LGUI);
  register_code(KC_SPACE);
  unregister_code(KC_SPACE);
  unregister_code(KC_LGUI);
}

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case RGB_SLD:
      if (record->event.pressed) {
        rgblight_mode(1);
      }
      return false;
    default:
      if (record->event.pressed) {
        if (get_highest_layer(layer_state) == 1) {
          if (!ru_layout) {
            switch_language(); ru_layout = true;
          }
        } else {
          if (ru_layout) {
            switch_language(); ru_layout = false;
          }
        }
      }
      return true;
  }
  return true;
}

В моём случае у слоя с русскими буквами цифра 1.
Если происходит переключение на этот слой и ru_layout == false, вызывается функция switch_language.
Для всех остальных слоёв дефолтным является английский.
Переключение на него происходит только в том случае, если ru_layout == true.
Как-то так в общем. Может кому-нибудь ещё пригодится данное решение.
P.S. Если из слоя с русским переключиться на слой с символами (в режиме OSL), то при быстом нажатии двух символов оба будут в русской раскладке.
Т.е. к примеру вместо будет ъе. Не знаю почему так. Может у кого есть мысли по этому поводу?