Keyboard 在QMK中使用两个单键(OSM)进行踢踏舞
我正在寻求在QMK中实现特定踢踏舞的帮助。我希望有一个单键组合像OSM一样的控件和像OSM一样的Alt(也许以后会添加一个基本键作为三次点击动作) 具体来说,它的行为应该如下所示:Keyboard 在QMK中使用两个单键(OSM)进行踢踏舞,keyboard,qmk,qmk-firmware,Keyboard,Qmk,Qmk Firmware,我正在寻求在QMK中实现特定踢踏舞的帮助。我希望有一个单键组合像OSM一样的控件和像OSM一样的Alt(也许以后会添加一个基本键作为三次点击动作) 具体来说,它的行为应该如下所示: 单键点击:一次点击修改器:等待下一次按键,然后发送Ctrl+该键 单次按住:与正常的Ctrl键类似 双击:一次性修改器:等待下一次按键,然后发送Alt+该键 双重按住:像正常的Alt 因此,实际上,单点按住/单点点击将模拟单点点击修改器,而双点按住/单点点击将模拟另一个修改器 例如,我想使用Ctrl+left或Ctr
- 点击TD,然后按左键:按Ctrl+left(向后一个单词)
- 按住TD键,向左按一次:按Ctrl+left键(向后一个单词)
- 按住TD键,向左按两次:发送Ctrl+left和Ctrl+left(两次) 字数倒转)
/***此踢踏舞的代码*/
静态分接c_a_状态={
.是否按动作=正确,
.state=0
};
无效c_a_完成(qk_踢踏舞_状态_t*状态,无效*用户数据){
c_a_state.state=cur_dance(state);
开关(c_a_state.state){
case SINGLE_TAP:set_oneshot_mods(MOD_BIT(KC_LCTL));break;//模拟OSM进行Ctrl
大小写单保持:寄存器代码(KC\U LCTL);中断;//按下时的正常修饰符(Ctrl)
case DOUBLE_TAP:set_oneshot_mods(MOD_BIT(KC_LALT));break;//模拟OSM for Alt
case DOUBLE\u HOLD:寄存器代码(KC\u LALT);break;//按住时的法线修饰符(Ctrl)
case DOUBLE\u SINGLE\u TAP:break;//没有原因,但它在我的模板中
}
}
无效c_a_重置(qk_踢踏舞_状态_t*状态,无效*用户数据){
开关(c_a_state.state){
案例单点点击:清除单点点击;断开;
案例单一保存:取消注册代码(KC\U LCTL);中断;
外壳双重轻敲:清除一次性轻敲模块();断开;
案例双重持有:取消注册代码(KC);中断;
外壳双_单_分接头:断开;
}
c_a_state.state=0;
}
/***踢踏舞动作列表*/
qk_踢踏舞(动作)t踢踏舞(动作){
[CVXA]=动作\u轻拍\u舞蹈\u FN\u高级(空,CVXA\u完成,CVXA\u重置),
[e_ctrl]=动作\u轻拍\u舞蹈\u FN\u高级(空,e_完成,e_重置),
[f_search]=动作\u踢踏舞\u FN_高级(空,f_完成,f_重置),
[CTL\U ALT]=动作\u轻拍\u舞蹈\u FN\u高级(空,c\u a\u完成,c\u a\u重置),
};
现在我得到的是:
- 轻触TD,然后按向左:无
- 按住TD键,向左按一次:按Ctrl+left键(向后一个单词)
- 按住TD键,向左按两次:发送Ctrl+left和Ctrl+left(两次) 字数倒转)
void c_a_重置(qk_踢踏舞_状态_t*状态,void*用户数据){
开关(c_a_state.state){
case SINGLE_TAP:break;//我刚刚遗漏了清除部分,但这似乎中断了暂停操作
案例单一保存:取消注册代码(KC\U LCTL);中断;
外壳双_水龙头:断开;
案例双重持有:取消注册代码(KC);中断;
外壳双_单_分接头:断开;
}
c_a_state.state=0;
}
现在,当我点击TD键一次,然后点击箭头键时,我会出现一次性行为。它可以毫无问题地添加修改器。我可以重复这一点,只要我喜欢,工程与双点击,也
但它破坏了正常的保持行为。因此,我的结论是:
- 点击TD,然后按左键:按Ctrl+left(向后一个单词)
- 按住TD键,向左按一次:按Ctrl+left键(向后一个单词)
- 按住TD键,向左按两次:按Ctrl+left,然后只按left而不按Ctrl(因此向后一个单词加上向后一个字符)