Un script de nodo que verifica la aplicación activa actual que se ejecuta en su sistema operativo, analiza algunas reglas personalizables y envía el índice de capa de destino a un teclado QMK a través de HID RAW, para que pueda cambiar las capas programáticamente.
Mi Micropad Z12 usa 4 capas: VIM, navegador, figma y predeterminado. Los codificadores hacen cosas diferentes en cada capa. La mayoría de las veces, cuando trabajaba en Figma, quería hacer zoom usando el codificador correcto, pero si tuviera activa la capa predeterminada, el codificador se desplazaría. Este script soluciona este tipo de problemas, me da a cambiar la capa automáticamente dependiendo de la aplicación principal que se ejecuta en OSX, olvidando tener que cambiar manualmente la capa.
El primer requisito es un teclado que ejecuta QMK, y configúrelo para usar HID RAW. Vea el ejemplo en la sección a continuación.
Este script de nodo requiere nodo, con tres dependencias: nodo-hid, condición basada en JSON y reglas-lógica-evaluación y activo-win-cli. Dado que el nodo probablemente ya está instalado, simplemente instale dependencias desde el paquete.json:
$ npm install
El script verificará la aplicación y las opciones de título de active-win-cli cada medio segundo, y enviará al micropad el índice de la capa que quiero apuntar según la aplicación, utilizando el método write de node-hid .
Para determinar qué índice enviar, necesitamos analizar un conjunto de condiciones y reglas, que son completamente configurables utilizando un archivo JSON simple. Esto también nos permite usar múltiples scripts para apuntar a múltiples dispositivos QMK al mismo tiempo.
El archivo JSON es un objeto que contiene el nombre del producto, los valores del temporizador para la inicialización, Relink en caso de desconexión y corredor (con qué frecuencia queremos verificar los datos de la aplicación actuales). También posee dos objetos para condiciones y reglas.
Conditons es un objeto que incluye un objeto por condición a analizar por las reglas.
Siga la documentación para la estructura del objeto de conditons y/o vea ejemplos de uso, incluso el config.json utilizado en este repositorio.
Las reglas es una matriz que incluye un objeto por conjunto de condiciones.
Siga la documentación de la estructura de objeto de reglas y/o vea ejemplos de uso, incluso el config.json utilizado en este repositorio.
En el lado QMK deberá agregar RAW_ENABLE = yes en el archivo rules.mk. La llamada write desde el script de nodo activará el método raw_hid_receive en QMK, donde puede realizar layer_clear(); Para limpiar las llamadas anteriores, luego layer_on(data[0]) para cambiar a la capa enviada a través de la secuencia.
Nota: Estamos enviando 99 cuando queremos restaurar la capa predeterminada (0), aparentemente layer_on(data[0]) no funciona en raw_hid_receive cuando enviamos 0 .
Código de ejemplo en kymap.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 El script verifica si hay conexión con el dispositivo que queremos controlar, utilizando node-hid (pasamos solo el nombre del producto, en este caso z12 y los valores de uso y uso predeterminados de uso). Espera que se establezca una conexión (se replena cada 2). También se vuelve a conectar después de la desconexión:
$ node index.js
El archivo JSON predeterminado es config.json pero puede usar uno diferente y agregar su nombre como argumento a la llamada principal:
$ node index.js otherfile.json
También se puede llamar desde un trabajo de Cron.
Debe dar el terminal ScreenRecordingPermission en MacOS, de lo contrario, Active-Win siempre será una cadena vacía para el título.
Muchas gracias a Sindresorhus por el excelente active-win-cli , Fauxpark, Precondition y Riblee por ayudarme a comprender la conexión de Node-Hid, uint8_t* data y métodos para cambiar la capa programáticamente. Ale Muñoz por ayudarme a eliminar todos los Deps globales y moverlos al paquete.json.