Skrip node yang memeriksa aplikasi aktif saat ini yang berjalan di OS Anda, mem -parsing beberapa aturan yang dapat disesuaikan dan mengirimkan indeks lapisan target ke keyboard QMK di atas RAW HID, sehingga Anda dapat mengubah lapisan secara terprogram.
Z12 Micropad saya menggunakan 4 lapisan: VIM, browser, Figma dan default. Encoders melakukan hal yang berbeda pada setiap lapisan. Lebih sering daripada tidak, ketika bekerja di Figma saya ingin memperbesar menggunakan encoder yang tepat, tetapi jika saya memiliki lapisan default aktif, encoder akan menggulir. Script ini memperbaiki masalah semacam ini, mengalihkan saya untuk mengubah lapisan secara otomatis tergantung pada aplikasi utama yang berjalan di OSX, lupa karena harus secara manual mengganti lapisan sendiri.
Persyaratan pertama adalah keyboard yang menjalankan QMK, dan konfigurasinya untuk menggunakan Raw Hid. Lihat contoh di bagian di bawah ini.
Skrip node ini membutuhkan simpul, dengan tiga ketergantungan: simpul-s-hid, conditions-conditions-and-rules-logic-evaluator dan aktif-menang-cli. Karena node mungkin sudah diinstal, cukup instal dependensi dari package.json:
$ npm install
Skrip akan memeriksa aplikasi dan opsi judul active-win-cli setiap setengah detik, dan mengirim ke Micropad indeks lapisan yang ingin saya targetkan tergantung pada aplikasi, menggunakan metode write node-hid .
Untuk menentukan indeks mana yang akan dikirim, kita perlu menguraikan satu set kondisi dan aturan, yang sepenuhnya dapat dikonfigurasi menggunakan file JSON sederhana. Ini juga memungkinkan kami untuk menggunakan beberapa skrip untuk menargetkan beberapa perangkat QMK secara bersamaan.
File JSON adalah objek yang berisi nama produk, nilai timer untuk inisialisasi, relink jika terjadi pemutusan dan pelari (seberapa sering kami ingin memeriksa data aplikasi saat ini). Ini juga memiliki dua objek untuk kondisi dan aturan.
Conditons adalah objek yang mencakup satu objek per kondisi yang akan diuraikan oleh aturan.
Ikuti dokumentasi untuk struktur objek Conditons, dan/atau lihat contoh penggunaan, bahkan config.json yang digunakan dalam repo ini.
Aturan adalah array yang mencakup satu objek per set kondisi.
Ikuti dokumentasi untuk struktur objek aturan, dan/atau lihat contoh penggunaan, bahkan config.json yang digunakan dalam repo ini.
Di sisi QMK Anda perlu menambahkan RAW_ENABLE = yes di file aturan.mk. Panggilan write dari skrip simpul akan memicu metode raw_hid_receive pada QMK, di mana Anda dapat melakukan layer_clear(); Untuk membersihkan panggilan sebelumnya, kemudian layer_on(data[0]) untuk mengubah ke layer yang dikirim melalui aliran.
Catatan: Kami mengirim 99 ketika kami ingin mengembalikan lapisan default (0), tampaknya layer_on(data[0]) tidak berfungsi di raw_hid_receive saat kami mengirim 0 .
Contoh kode di 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 Script memeriksa apakah ada koneksi ke perangkat yang ingin kami kendalikan, menggunakan menggunakan node-hid (kami hanya memberikan nama produk, dalam hal ini z12 , dan nilai usagepage dan penggunaan default). Ini menunggu koneksi untuk dibuat (itu coba lagi setiap 2s). Itu juga terhubung kembali setelah pemutusan:
$ node index.js
File JSON default adalah config.json tetapi Anda dapat menggunakan yang berbeda dan menambahkan namanya sebagai argumen ke panggilan utama:
$ node index.js otherfile.json
Itu juga bisa dipanggil dari pekerjaan cron.
Anda perlu memberikan terminal screenrecordingpermission di macOS, jika tidak aktif-menang akan selalu menjadi string kosong untuk judul.
Terima kasih banyak kepada Sindresorhus untuk active-win-cli , Fauxpark, Prakondisi, dan Riblee yang sangat baik karena telah membantu saya memahami koneksi node-hid, pointer uint8_t* data dan metode untuk mengubah lapisan secara terprogram. Ale Muñoz karena membantu saya menghapus semua DEP global dan memindahkannya ke paket.json.