首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我怎么能在QMK (月球着陆器)中引起一个合成的自动切换键?

我怎么能在QMK (月球着陆器)中引起一个合成的自动切换键?
EN

Stack Overflow用户
提问于 2022-10-02 15:30:53
回答 1查看 68关注 0票数 0

我编写了一些代码,表明numlock通过改变LED颜色而处于活动状态,如下所示:

代码语言:javascript
复制
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case TOG_NUMS:
      if (record->event.pressed) {
        tap_code(KC_NUM_LOCK); // Synthetic Numlock keypress
        isToggle[IND_NUMS] = !isToggle[IND_NUMS]; // Toggle the indicator
        set_toggle_indicator(IND_NUMS); // Change LED colour based on isToggle value
      }
      return true;
    default:
      return true;
  }
  return true;
}

此操作如出一辙:自定义密钥代码TOG_NUMS通过调用tap_code来切换numpad,并调用我的set_toggle_indicator函数来更新分类账。但是,当我用自定义的自动转移键尝试相同的操作时,我会遇到问题。这就是我所做的,试图遵循同样的模式:

代码语言:javascript
复制
  case TOG_ASHF:
    if (record->event.pressed) {
      tap_code(KC_ASTG);
      isToggle[IND_ASHF] = !isToggle[IND_ASHF];
      set_toggle_indicator(IND_ASHF);
    }
    return true;

但是,上面没有编译,因为KC_ASTG密钥代码的类型是整数,而tap_code参数是一个无符号字符。编译器提供了以下错误消息:

错误:从'int‘到'uint8_t’{aka‘无符号字符’}的无符号转换将值从'23578‘更改为'26’

如果我用tap_code替换tap_code16,我的代码会编译,但是键的行为很奇怪。它似乎只是简单地给我一个小写w时按下。如何使KC_ASTG按键在不使用tapcode的情况下触发

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-03 17:46:20

我想出来了!合成按键是错误的方法。KC_ASTG密钥代码不像numpad键那样具有匹配的扫描代码。而不是通过USB将扫描代码发送到操作系统,而是在process_auto_shift中间件中处理逻辑。我将process_auto_shift.h包含到我的keymap文件中,并将中间件的实现复制到TOG_ASHF case语句中,如下所示:

代码语言:javascript
复制
case TOG_ASHF:
      if (record->event.pressed) {
        autoshift_toggle();
        isToggle[IND_ASHF] = !isToggle[IND_ASHF];
        set_toggle_indicator(IND_ASHF);
      }
      return true;

它的行为和预期的一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73927083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档