Un script de nœud qui vérifie l'application active actuelle en cours d'exécution dans votre système d'exploitation, analyse certaines règles personnalisables et envoie l'index de couche cible à un clavier QMK sur RAW HID, afin que vous puissiez modifier les calques par programme.
Ma micropad Z12 utilise 4 couches: vim, navigateur, figma et par défaut. Les encodeurs font des choses différentes sur chaque couche. Plus souvent qu'autrement, lorsque je travaille sur Figma, je voulais zoomer en utilisant le bon codeur, mais si j'avais la couche par défaut active, le codeur faisait défiler à la place. Ce script résorme ce type de problèmes, me permet de modifier automatiquement la couche en fonction de l'application principale en cours d'exécution dans OSX, oubliant de devoir changer manuellement la couche moi-même.
La première exigence est un clavier exécutant QMK et la configurez pour utiliser RAW HID. Voir l'exemple dans la section ci-dessous.
Ce script de nœud nécessite un nœud, avec trois dépendances: nœud-kid, json basés sur les conditions et rules-évaluatrice et active-win-cli. Étant donné que le nœud est probablement déjà installé, il suffit d'installer des dépendances à partir du package.json:
$ npm install
Le script vérifiera l'application et les options de titre de active-win-cli toutes les deux secondes, et enverra à la micropade l'index de la couche que je souhaite cibler en fonction de l'application, en utilisant la méthode write de node-hid .
Pour déterminer quel index envoyer, nous devons analyser un ensemble de conditions et de règles, qui sont complètement configurables à l'aide d'un fichier JSON simple. Cela nous permet également d'utiliser plusieurs scripts pour cibler plusieurs périphériques QMK en même temps.
Le fichier JSON est un objet qui complète le nom du produit, les valeurs du temporisateur pour l'initialisation, le liend en cas de déconnexion et de coureur (à quelle fréquence nous voulons vérifier les données actuelles de l'application). Il contient également deux objets pour les conditions et les règles.
Conditons est un objet qui comprend un objet par condition à analyser par les règles.
Suivez la documentation de la structure des objets Conditons et / ou voyez des exemples d'utilisation, même la config.json utilisée dans ce référentiel.
Les règles sont un tableau qui comprend un objet par ensemble de conditions.
Suivez la documentation de la structure des objets Règles et / ou voyez des exemples d'utilisation, même la config.json utilisée dans ce repo.
Du côté QMK, vous devrez ajouter RAW_ENABLE = yes dans le fichier règles.mk. L'appel write du script de nœud déclenchera la méthode raw_hid_receive sur le QMK, où vous pouvez effectuer layer_clear(); Pour nettoyer les appels précédents, puis layer_on(data[0]) pour passer à la couche envoyée via le flux.
Remarque: nous envoyons 99 lorsque nous voulons restaurer la couche par défaut (0), apparemment layer_on(data[0]) ne fonctionne pas dans raw_hid_receive lorsque nous envoyons 0 .
Exemple de code dans 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 Le script vérifie s'il y a une connexion avec le périphérique que nous voulons contrôler, en utilisant node-hid (nous passons uniquement le nom du produit, dans ce cas z12 , et les valeurs d'utilisation et d'utilisation par défaut). Il attend qu'une connexion soit établie (il retrouve tous les 2s). Il se reconnecte également après la déconnexion:
$ node index.js
Le fichier JSON par défaut est config.json mais vous pouvez en utiliser un autre et ajouter son nom comme argument à l'appel principal:
$ node index.js otherfile.json
Il peut également être appelé à partir d'un travail cron.
Vous devez donner un terminal ScreenRecordingPermission dans MacOS, sinon le vide actif sera toujours une chaîne vide pour le titre.
Un grand merci à Sindresorhus pour l'excellent active-win-cli , fauxpark, précondition et riblee pour m'avoir aidé à comprendre la connexion de véhicules de nœuds, le pointeur uint8_t* data et les méthodes pour changer de couche par programmation. Ale Muñoz pour m'avoir aidé à retirer tous les DEP mondiaux et à les déplacer vers le package.json.