QMK firmwareでCtrl+hでbackspaceが入力される様にしたpart2

#はじめに
ctrl+h, shift+ctrl+h, ctrl+iをbackspace, delete, tabに変換するように設定しました。
以前も同様の[設定](https://qiita.com/toxaO/items/a80c342ca991ad506658)をしましたが、こちらの方がしっかり動いてコードも少ないです。
qmkのdocを眺めていた時に似た様なことをしているコードを見つけたため、それを改修して実装しています。

# 方法
以前の記事も参考にしてください。
process_record_userの中とその前に書き込んでいきます。

```keymap.c

// mod override用変数
uint8_t mod_state;
static bool bspckey_registered = false;
static bool delkey_registered = false;
static bool tabkey_registered = false;
static bool ctrl_pressed = false;
static bool sft_pressed = false;

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    current_keycode = keycode;
    mod_state = get_mods();

    switch (keycode) {

        case KC_H:
            if (record->event.pressed) {
                if (mod_state & MOD_MASK_CTRL) {
                    if (mod_state & MOD_MASK_SHIFT) {
                        unregister_code(KC_LCTL);
                        unregister_code(KC_LSFT);
                        register_code(KC_DEL);
                        delkey_registered = true;
                    return false;
                    } else {
                        unregister_code(KC_LCTL);
                        register_code(KC_BSPC);
                        bspckey_registered = true;
                        return false;
                    }
                }
            } else {
                if (bspckey_registered) {
                    unregister_code(KC_BSPC);
                    unregister_code(KC_LCTL);
                    bspckey_registered = false;
                }
                if (delkey_registered) {
                    unregister_code(KC_DEL);
                    unregister_code(KC_LCTL);
                    unregister_code(KC_LSFT);
                    delkey_registered = false;
                }
                if (ctrl_pressed) {
                    register_code(KC_LCTL);
                }
                if (sft_pressed) {
                    register_code(KC_LSFT);
                }
            }
            return true;

        case KC_I:
            if (record->event.pressed) {
                if (mod_state & MOD_MASK_CTRL) {
                    unregister_code(KC_LCTL);
                    register_code(KC_TAB);
                    tabkey_registered = true;
                    return false;
                }
            } else { // on release of KC_BSPC
                if (tabkey_registered) {
                    unregister_code(KC_TAB);
                    unregister_code(KC_LCTL);
                    tabkey_registered = false;
                    if (ctrl_pressed) {
                        register_code(KC_LCTL);
                    }
                }
            }
            return true;

        case KC_LCTL:
        case KANA_C:
            if (record->event.pressed) {
              ctrl_pressed = true;
            } else {
              ctrl_pressed = false;
            }
            return true;

        case KC_LSFT:
        case EISU_S:
            if (record->event.pressed) {
              sft_pressed = true;
            } else {
              sft_pressed = false;
            }
            return true;

```

# 補足
ctrlとshiftの押下に、KC_LSFTやKC_LCRL以外のものを使用している場合にもctrl_pressedとsft_pressedの判定を入れる様にしてください。
上記の例であればKANA_CやEISU_Sの通り。

# 最後に
アプリのショートカットに左右されず快適。