Um script de nós que verifica o aplicativo ativo atual em execução no seu sistema operacional, analisa algumas regras personalizáveis e envia o índice de camada de destino para um teclado QMK sobre o HID bruto, para que você possa alterar as camadas programaticamente.
Minha micropad Z12 usa 4 camadas: VIM, navegador, figma e padrão. Os codificadores fazem coisas diferentes em cada camada. Na maioria das vezes, ao trabalhar no figma, eu queria aumentar o zoom usando o codificador direito, mas se eu tivesse a camada padrão ativa, o codificador rolaria. Esse script corrige esse tipo de problema, alenta -me a alterar a camada automaticamente, dependendo do aplicativo principal em execução no OSX, esquecendo de ter que mudar manualmente a camada.
O primeiro requisito é um teclado executando QMK e configure -o para usar o HID bruto. Veja o exemplo na seção abaixo.
Este script de nó requer o nó, com três dependências: condicionas baseadas em nó, JSON, baseadas em JSON-e-Rules-Logic-Evaluator e ativo-win-cli. Como o nó provavelmente já está instalado, basta instalar dependências do package.json:
$ npm install
O script verificará o aplicativo e as opções de título do active-win-cli a cada meio segundo e enviará para a micropad o índice da camada que quero segmentar, dependendo do aplicativo, usando o método write do node-hid .
Para determinar qual índice enviar, precisamos analisar um conjunto de condições e regras, que são completamente configuráveis usando um arquivo JSON simples. Isso também nos permite usar vários scripts para direcionar vários dispositivos QMK ao mesmo tempo.
O arquivo JSON é um objeto que contém o nome do produto, valores do timer para inicialização, link em caso de desconexão e corredor (com que frequência queremos verificar os dados atuais do aplicativo). Ele também mantém dois objetos para condições e regras.
Conditons é um objeto que inclui um objeto por condição a ser analisado pelas regras.
Siga a documentação para a estrutura do objeto Conditons e/ou consulte exemplos de uso, mesmo o config.json usado neste repo.
Regras é uma matriz que inclui um objeto por conjunto de condições.
Siga a documentação para a estrutura do objeto de regras e/ou consulte exemplos de uso, até o config.json usado neste repositório.
No lado QMK, você precisará adicionar RAW_ENABLE = yes no arquivo regras.mk. A chamada write do script do nó acionará o método raw_hid_receive no QMK, onde você pode executar layer_clear(); Para limpar as chamadas anteriores, depois layer_on(data[0]) para alterar para a camada enviada através do fluxo.
NOTA: Estamos enviando 99 quando queremos restaurar a camada padrão (0), aparentemente layer_on(data[0]) não funciona em raw_hid_receive quando enviamos 0 .
Exemplo Código em 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 O script verifica se há conexão com o dispositivo que queremos controlar, usando node-hid (passamos apenas o nome do produto, neste caso z12 , e os valores de uso de uso padrão e uso). Ele espera que uma conexão seja estabelecida (é uma tentativa a cada 2s). Ele também se reconecta após a desconexão:
$ node index.js
O arquivo JSON padrão é config.json mas você pode usar um diferente e adicionar seu nome como um argumento à chamada principal:
$ node index.js otherfile.json
Também pode ser chamado de um trabalho de Cron.
Você precisa fornecer a RecordingPermission de Terminal Screen em MacOS, caso contrário, o Ativo-Win sempre será uma string vazia para o título.
Muito obrigado a Sindresorhus pelo excelente active-win-cli , fauxpark, pré-condição e rible por me ajudar a entender a conexão com nó, uint8_t* data e métodos para alterar a camada programaticamente. Ale Muñoz por me ajudar a remover todos os depósitos globais e movê -los para o pacote.json.