按住左Alt时KC_TAB映射左Shift,释放后映射未取消的问题求助
问题原因及修复方案
你的问题出在修饰键的判断逻辑上:
- 原代码用
get_mods() == MOD_BIT(KC_LALT)做严格相等判断,这意味着只有当左Alt是唯一按下的修饰键时才会触发映射逻辑。 - 如果释放Tab键时,左Alt已经被松开,或者同时按下了其他修饰键(比如Ctrl、右Alt),这个条件就不成立,
unregister_code(KC_LSFT)不会执行,导致左Shift一直处于注册状态。
修复后的代码如下:
switch (keycode) { case KC_TAB: // 只要左Alt处于按下状态,就将Tab映射为左Shift if (get_mods() & MOD_BIT(KC_LALT)) { if (record->event.pressed) { register_code(KC_LSFT); } else { unregister_code(KC_LSFT); } return false; } return true; }
额外优化建议
如果担心极端场景下的按键残留,可以改用QMK中更规范的修饰键操作方式——register_mods和unregister_mods:
switch (keycode) { case KC_TAB: if (get_mods() & MOD_BIT(KC_LALT)) { if (record->event.pressed) { register_mods(MOD_BIT(KC_LSFT)); } else { unregister_mods(MOD_BIT(KC_LSFT)); } return false; } return true; }
内容的提问来源于stack exchange,提问作者Natjo
相关产品推荐
相关产品推荐

