OSで実行されている現在のアクティブアプリをチェックするノードスクリプトは、いくつかのカスタマイズ可能なルールを解析し、RAW HID上のQMKキーボードにターゲットレイヤーインデックスを送信するため、レイヤーをプログラムで変更できます。
私のZ12 Micropadは、VIM、ブラウザー、Figma、およびデフォルトの4つのレイヤーを使用しています。エンコーダーは、各レイヤーで異なることを行います。多くの場合、Figmaで作業するときは、適切なエンコーダーを使用してズームしたいと考えていましたが、デフォルトのレイヤーがアクティブになった場合、エンコーダは代わりにスクロールします。このスクリプトはこの種の問題を修正し、OSXで実行されているメインアプリに応じてレイヤーを自動的に変更するように、レイヤーを手動で切り替える必要があることを忘れています。
最初の要件は、QMKを実行するキーボードであり、RAW HIDを使用するように構成します。以下のセクションの例を参照してください。
このノードスクリプトには、ノードHID、JSONベースの条件とルール - ロジック評価、アクティブウィンCLIの3つの依存関係を備えたノードが必要です。ノードはおそらく既にインストールされているため、package.jsonから依存関係をインストールするだけです。
$ npm install
スクリプトはactive-win-cliのアプリとタイトルオプションを半秒ごとにチェックし、 node-hidのwrite方法を使用して、アプリに応じてターゲットにしたいレイヤーのインデックスをMicroPADに送信します。
送信するインデックスを決定するには、単純なJSONファイルを使用して完全に構成可能な一連の条件とルールを解析する必要があります。これにより、複数のスクリプトを使用して複数のQMKデバイスを同時にターゲットにすることもできます。
JSONファイルは、製品名、初期化のためのタイマー値、切断およびランナーの場合のリンクを含むオブジェクトです(現在のアプリデータを確認する頻度)。また、条件とルールの2つのオブジェクトも保持しています。
Conditonsは、ルールによって解析される条件ごとに1つのオブジェクトを含むオブジェクトです。
Conditonsオブジェクト構造のドキュメントに従って、および/または使用の例を参照してください。
ルールは、一連の条件ごとに1つのオブジェクトを含む配列です。
ルールオブジェクト構造のドキュメントに従って、および/または使用例を参照してください。
QMK側では、rules.mkファイルにRAW_ENABLE = yesを追加する必要があります。ノードスクリプトからのwrite呼び出しは、QMKでraw_hid_receiveメソッドをトリガーし、 layer_clear();以前の呼び出しをクリーンアップするには、 layer_on(data[0])ストリームから送信されたレイヤーに変更します。
注:デフォルトレイヤー(0 raw_hid_receive layer_on(data[0])復元するときに99 0しています。
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でターミナルスクリーンレコーディングパーミッションを提供する必要があります。そうしないと、アクティブウィンは常にタイトルの空の文字列になります。
ノードHID接続、 uint8_t* dataポインター、およびレイヤーをプログラム的に変更する方法を理解するのに役立つ優れたactive-win-cli 、フェイクパーク、前提条件、およびRibleeに感謝します。すべてのグローバルなDEPを削除し、Package.jsonに移動するのを手伝ってくれたAleMuñoz。