一個節點腳本,該節點腳本檢查在操作系統中運行的當前活動應用程序,解析一些可自定義的規則,並將目標層索引通過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幫助我刪除了所有全球端口並將其移至包裝。