qmk/qmk_firmware

Shifted Macro [Bug]

Open

#16.940 aperta il 25 apr 2022

Vedi su GitHub
 (2 commenti) (0 reazioni) (0 assegnatari)C (43.867 fork)batch import
bughelp wanted

Metriche repository

Star
 (20.368 star)
Metriche merge PR
 (Merge medio 20g 9h) (27 PR mergiate in 30 g)

Descrizione

Describe the Bug

everything is compiles and flashes just fine, but after pressing the button - some OS things happen (muting sound and volume up (f13 f14)) but with shift (regular kc in upper layer) it's ok

System Information

Keyboard: dz60

Operating system: Arch Linux Linux 5.17.4-arch1-1 KDE 5.93.0 / Plasma 5.24.4

qmk doctor output:

➜  ~ qmk doctor
Ψ QMK Doctor is checking your environment.
Ψ CLI version: 1.0.0
Ψ QMK home: /home/chibo/qmk_firmware
Ψ Detected Linux.
Ψ Git branch: master
Ψ Repo version: 0.16.9
⚠ Git has unstashed/uncommitted changes.
Ψ All dependencies are installed.
Ψ Found arm-none-eabi-gcc version 11.3.0
Ψ Found avr-gcc version 11.3.0
⚠ We do not recommend avr-gcc newer than 8. Downgrading to 8.x is recommended.
Ψ Found avrdude version 6.4
Ψ Found dfu-util version 0.11
Ψ Found dfu-programmer version 0.7.2
Ψ Submodules are up to date.
Ψ QMK is ready to go, but minor problems were found
➜  ~

Any keyboard related software installed? no

Additional Context

yeah code is tough, that was hard work, mostly of ridingqwerty (https://github.com/qmk/qmk_firmware/issues/7839)

i see some progress, so i revisit it later, but if you help me organize it more simple way (like [declaration, [lower, upper]] w/o that low-level parametric stuff tap_code16(alt_keymap[1][keycode - AKM_1_8]); - i would be much appreciated

enum custom_keycodes {
    RUS_LAT = SAFE_RANGE, M_ARROW_RETURN, M_ARROW_FUNC, M_ASSIGN,
    AKM_1_8, AKM_1_9, MY_F13, MY_F14, AKM_2_22, AKM_2_23, AKM_3_11, AKM_4_11, M_CYR_ER,
};
// enum shifted_keycodes {AKM_1_8, AKM_1_9, MY_F13, MY_F14, AKM_2_22, AKM_2_23, AKM_3_11, AKM_4_11, M_CYR_ER};


uint16_t alt_keymap[2][10] = {
// AKM_1_8   , AKM_1_9       , MY_F13      , MY_F14        , AKM_2_22   , AKM_2_23            , AKM_3_11 , AKM_4_11    , M_CYR_ER
{KC_ASTERISK , KC_LEFT_PAREN , M_ARROW_FUNC, M_ARROW_RETURN, KC_LBRACKET, KC_LEFT_CURLY_BRACE , KC_COLON , KC_SEMICOLON, KC_M       },
{KC_AMPERSAND, KC_RIGHT_PAREN, KC_BSLASH   , KC_PIPE       , KC_RBRACKET, KC_RIGHT_CURLY_BRACE, KC_SCOLON, KC_BACKSLASH, KC_RBRACKET}
};

uint16_t key_timer;
bool process_record_user(uint16_t keycode, keyrecord_t *record)
{
  switch (keycode)
  {
    case RUS_LAT:
        if (record->event.pressed)
            {
                key_timer = timer_read();
                register_mods(MOD_RALT);
            }
        else
            {
                unregister_mods(MOD_RALT);
                if (timer_elapsed(key_timer) < 500)
                    {
                    layer_invert(RUS);
                    tap_code16(C(G(KC_NO)));
                    }
            }
        return false;
        break;

    uint8_t mod_state = get_mods();
    case AKM_1_8 ... M_CYR_ER:
      if (record->event.pressed)
      {
        mod_state = get_mods() & MOD_MASK_SHIFT;
        clear_mods();
        if(mod_state)
        {
          tap_code16(alt_keymap[1][keycode - AKM_1_8]);
        }
        else
        {
          tap_code16(alt_keymap[0][keycode - AKM_1_8]);
        }
        set_mods(mod_state);
      }
      return false;

    case M_ARROW_FUNC:
        if (record->event.pressed) {
        SEND_STRING("=>");
        }
        break;

    case M_ARROW_RETURN:
        if (record->event.pressed) {
        SEND_STRING("->");
        }
        break;

    case M_ASSIGN:
        if (record->event.pressed) {
        SEND_STRING(":=");
        }
        break;

  }
  return true;
};

Guida contributor