一个节点脚本,该节点脚本检查在操作系统中运行的当前活动应用程序,解析一些可自定义的规则,并将目标层索引通过RAW HID发送到QMK键盘,以便您可以编程更改层。
我的Z12 Micropad使用4层:VIM,浏览器,无花果和默认值。编码器在每一层上做不同的事情。通常,在Figma工作时,我想使用右编码器进行缩放,但是如果我有默认层活动,则编码器会滚动。该脚本解决了此类问题,我会根据OSX中运行的主要应用程序自动更改图层,而忘记了必须自己手动切换图层。
第一个要求是运行QMK的键盘,并将其配置为使用RAW HID。请参阅下面的示例。
该节点脚本需要节点,具有三个依赖项:基于JSON的条件和符号logic-logic-evaluator和active-win-cli。由于可能已经安装了节点,只需安装package.json的依赖项:
$ npm install
该脚本将每半秒钟检查active-win-cli的应用程序和标题选项,并使用node-hid的write方法将我要定位的图层的索引发送到MicroPAD。
要确定要发送的索引,我们需要解析一组条件和规则,这些条件和规则可使用简单的JSON文件完全配置。这也使我们可以使用多个脚本同时定位多个QMK设备。
JSON文件是一个包含产品名称,初始化的计时器值的对象,在断开连接和跑步者的情况下重新链接(我们想检查当前应用数据的频率)。它还容纳两个条件和规则的对象。
conditons是一个对象,每个条件都包含一个对象,该对象将被规则解析。
遵循Conditons对象结构的文档,和/或查看使用的示例,甚至在此存储库中使用的config.json。
规则是一个数组,每组条件包含一个对象。
请按照规则对象结构的文档进行文档,和/或查看使用的示例,甚至在此存储库中使用的config.json。
在QMK侧,您需要在规则文件中添加RAW_ENABLE = yes 。来自节点脚本的write调用将触发QMK上的raw_hid_receive方法,您可以在其中执行layer_clear();要清理以前的呼叫,然后layer_on(data[0])更改为通过流发送的图层。
注意:当我们要恢复默认层(0)时,我们将发送99 ,显然是layer_on(data[0])在我们发送0时在raw_hid_receive中不起作用。
keymap.c中的示例代码:
#include "raw_hid.h"
#ifdef RAW_ENABLE
void raw_hid_receive ( uint8_t * data , uint8_t length ) {
layer_clear ();
if ( data [ 0 ] == 99 ) {
layer_on ( _TERM );
}
else {
layer_on ( data [ 0 ]);
}
}
#endif 脚本检查使用node-hid是否与我们要控制的设备有连接(我们仅通过产品名称,在这种情况下为z12 ,以及默认的USAGEPAGE和用法值)。它等待建立连接(每2秒都会重试)。它在断开后也重新连接:
$ node index.js
默认JSON文件是config.json ,但您可以使用其他文件并将其名称作为参数添加到主呼叫:
$ node index.js otherfile.json
它也可以从Cron工作中称为。
您需要在MacOS中给出终端ScreenRecorDingpermission,否则Active-Win将永远是标题的空字符串。
非常感谢Sindresorhus提供了出色的active-win-cli ,FAUXPARK,PROMICENITION和RIBLIE,以帮助我了解Node-Hid连接, uint8_t* data指针和方法以编程方式更改图层。 AleMuñoz帮助我删除了所有全球端口并将其移至包装。