สคริปต์โหนดที่ตรวจสอบแอปที่ใช้งานปัจจุบันที่ทำงานอยู่ในระบบปฏิบัติการของคุณแยกวิเคราะห์กฎบางอย่างที่ปรับแต่งได้และส่งดัชนีเลเยอร์เป้าหมายไปยังคีย์บอร์ด QMK ผ่าน HID ดิบเพื่อให้คุณสามารถเปลี่ยนเลเยอร์โดยทางโปรแกรม
Z12 micropad ของฉันใช้ 4 เลเยอร์: VIM, เบราว์เซอร์, FIGMA และค่าเริ่มต้น ตัวเข้ารหัสทำสิ่งต่าง ๆ ในแต่ละชั้น บ่อยกว่านั้นเมื่อทำงานใน Figma ฉันต้องการซูมโดยใช้ตัวเข้ารหัสที่ถูกต้อง แต่ถ้าฉันมีเลเยอร์เริ่มต้นที่ใช้งานอยู่ตัวเข้ารหัสจะเลื่อนแทน สคริปต์นี้แก้ไขปัญหาประเภทนี้ทำให้ฉันเปลี่ยนเลเยอร์โดยอัตโนมัติขึ้นอยู่กับแอพหลักที่ทำงานใน OSX โดยลืมไปว่าต้องสลับเลเยอร์ด้วยตนเองด้วยตนเอง
ข้อกำหนดแรกคือคีย์บอร์ดที่ใช้ QMK และกำหนดค่าให้ใช้ HID RAW ดูตัวอย่างในส่วนด้านล่าง
สคริปต์โหนดนี้ต้องใช้โหนดโดยมีสามการพึ่งพา: โหนด-ฮิด, เงื่อนไขที่ใช้ JSON-conditions-and-rules-Logic-Evaluator และ Active-Win-CLI เนื่องจากโหนดอาจติดตั้งแล้วเพียงติดตั้งการพึ่งพาจาก package.json:
$ npm install
สคริปต์จะตรวจสอบแอพและตัวเลือกชื่อเรื่องของ active-win-cli ทุกครึ่งวินาทีและส่งดัชนีของเลเยอร์ที่ฉันต้องการกำหนดเป้าหมายไปยัง Micropad โดยใช้วิธี write ของ node-hid
ในการพิจารณาว่าจะส่งดัชนีใดเราจำเป็นต้องแยกวิเคราะห์ชุดของเงื่อนไขและกฎซึ่งสามารถกำหนดค่าได้อย่างสมบูรณ์โดยใช้ไฟล์ JSON อย่างง่าย นอกจากนี้ยังช่วยให้เราสามารถใช้สคริปต์หลายรายการเพื่อกำหนดเป้าหมายอุปกรณ์ QMK หลายตัวในเวลาเดียวกัน
ไฟล์ JSON เป็นวัตถุที่มีชื่อผลิตภัณฑ์ค่าตัวจับเวลาสำหรับการเริ่มต้น relink ในกรณีของการขาดการเชื่อมต่อและนักวิ่ง (บ่อยครั้งที่เราต้องการตรวจสอบข้อมูลแอพปัจจุบัน) นอกจากนี้ยังมีวัตถุสองวัตถุสำหรับเงื่อนไขและกฎ
Conditons เป็นวัตถุที่มีวัตถุหนึ่งชิ้นต่อเงื่อนไขที่จะแยกวิเคราะห์ตามกฎ
ทำตามเอกสารสำหรับโครงสร้างวัตถุ Conditons และ/หรือดูตัวอย่างการใช้งานแม้แต่ config.json ที่ใช้ใน repo นี้
กฎคืออาร์เรย์ที่มีวัตถุหนึ่งชิ้นต่อชุดเงื่อนไข
ทำตามเอกสารสำหรับโครงสร้างวัตถุกฎและ/หรือดูตัวอย่างการใช้งานแม้แต่ config.json ที่ใช้ใน repo นี้
ทางด้าน QMK คุณจะต้องเพิ่ม RAW_ENABLE = yes ในไฟล์ rules.mk การ write จากสคริปต์โหนดจะทริกเกอร์วิธี raw_hid_receive บน QMK ซึ่งคุณสามารถดำเนินการ layer_clear(); ในการทำความสะอาดการโทรก่อนหน้านี้จากนั้น layer_on(data[0]) เพื่อเปลี่ยนเป็นเลเยอร์ที่ส่งผ่านสตรีม
หมายเหตุ: เรากำลังส่ง 99 เมื่อเราต้องการกู้คืนเลเยอร์เริ่มต้น (0) เห็นได้ชัดว่า layer_on(data[0]) ไม่ทำงานใน raw_hid_receive เมื่อเราส่ง 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 และค่าเริ่มต้นเริ่มต้น) มันรอการเชื่อมต่อที่จะจัดตั้งขึ้น (มันลองใหม่ทุก 2s) นอกจากนี้ยังเชื่อมต่ออีกครั้งหลังจากขาดการเชื่อมต่อ:
$ node index.js
ไฟล์ JSON เริ่มต้นคือ config.json แต่คุณสามารถใช้ไฟล์อื่นและเพิ่มชื่อเป็นอาร์กิวเมนต์ในการโทรหลัก:
$ node index.js otherfile.json
นอกจากนี้ยังสามารถเรียกได้จากงาน cron
คุณต้องให้ Terminal ScreenRecordingPermission ใน MacOS มิฉะนั้น Active-WIN จะเป็นสตริงที่ว่างเปล่าสำหรับชื่อเรื่องเสมอ
ขอขอบคุณ Sindresorhus สำหรับ active-win-cli , fauxpark, precondition และ riblee ที่ช่วยให้ฉันเข้าใจการเชื่อมต่อแบบ HID, uint8_t* data และวิธีการเปลี่ยนเลเยอร์โดยทางโปรแกรม Ale Muñozที่ช่วยฉันลบ deps ทั่วโลกทั้งหมดและย้ายพวกเขาไปที่ package.json