これはキーボード #1 Advent Calendar 2024 1日目の記事です。
こちらからお読みください。
※ この記事では、押下順序が定まっている同時押し(例:Shiftキーやレイヤー切り替えキー)を「ホールド同時押し」、複数のキーを同時に押下して離す同時押しを「同時押し」と呼びます。
ArtseyはArtseyioが開発しているChorded keyboardに分類されるキーマップです。
2行4列の8キーを使用し、配列の”ARTSEYIO”がドメインになっていておしゃれです。
公式の打鍵動画も公開されています。
Artseyキーマップの主な特徴は次のとおりです。
詳細なキーマップはArtseyioの一覧表を参照してください。
この楽しいArtseyキーマップを、実際のマクロパッドにファームウェアを書き込む前に試せるシミュレータを用意しました。
手元のキーボードとブラウザで動作するArtseyシミュレータを作りました。
https://hsgw.github.io/artsey-simulator/
左手用キーマップ+アルファベットのみのお試し版ですが、キーマップガイドが表示される練習モードも用意していますので、ぜひお試しください。
Chorded keyboard特有の打鍵体験が味わえます。
すでに公式のシミュレータがありますが、次に入力するキーマップが逐次で出るものを用意したかったので作りました
試して気に入ったら実際のマクロパッドにファームウェアを書き込んでみましょう。
Artseyキーマップは同時押しを多用しています。そして、QMK Firmwareでは同時押しを実装するために、Combo
機能が用意されています。
https://docs.qmk.fm/features/combo
しかし、ドキュメントにある通り、細かい設定を繰り返し書く必要があリます。そこで、CSVファイルで定義したとおりにコンボの設定を出力するスクリプトとそれで出力したすぐに使用可能なCファイルを用意しました。
artsey.ioでは公式のQMK用キーマップも提供されていますが、R言語環境の準備が必要であったり、独自の定義ファイルを使用しているため、本実装ではより分かりやすいCSVファイルとPythonを用いてQMKの基本機能をできる限り活用した形で書き直しています。
Artseyだけのキーマップを作ってビルドします。
https://github.com/hsgw/qmk_userspace/tree/artsey/keyboards/dm9records/nigo/keymaps/artsey_sample
artsey
に名前を変えるcombos.h, combo_util.c, combo_util.h
をkeymaps/artsey
にコピーするkeymaps/artsey
に、rules.mk
を追加して以下の内容を追記するSRC += combo_util.c
COMBO_ENABLE = yes
keymap.c
を編集するhttps://github.com/hsgw/qmk_userspace/blob/artsey/keyboards/dm9records/nigo/keymaps/artsey_sample/keymap.c
2. keymaps.c
の冒頭に追記する
#include QMK_KEYBOARD_H
// 以下を追記
#include "combos.h"
// combos.hで定義されたコンボを読み込む
combo_t key_combos[] = {**KEY_COMBOS_DEF**};
keymap.c
のkeymaps
をキーボードにあわせて編集するcombos.h
内で定義されているレイヤー名とキーコードを設定するKC_NO
を設定して無効にしておくのをおすすめします// 2x5のキーボードでの例
// CMB_BASからCMB_NAVまでのすべてのレイヤーを設定すること
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[CMB_BAS] = LAYOUT(
BAS_1_1,BAS_1_2,BAS_1_3,BAS_1_4,KC_NO,
BAS_2_1,BAS_2_2,BAS_2_3,BAS_2_4,KC_NO
),
[CMB_NUM] = LAYOUT(
NUM_1_1,NUM_1_2,NUM_1_3,NUM_1_4,KC_NO,
NUM_2_1,NUM_2_2,NUM_2_3,NUM_2_4,KC_NO
),
// .....
keymap.c
のprocess_record_user()
に追記する// keymaps.cになければ追加
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// 必ず最初にcombo.hで使用するキーコードを処理する
if (process_record_combo_keycode(keycode, record) == false) {
return false;
}
// 他のキーコードの処理を追加するなら以下で
// switch(keycode) {
// ...
// }
return true;
}
make <keyboardname>:artsey
2. 完成
QMKのCombo機能は同時押し入力時間の調整など様々なオプションが用意されています。
もし、少しでも打ちにくいと感じたら、ドキュメントを参考に調整してみてください。
https://docs.qmk.fm/features/combo
あまりにも複雑すぎる(ようにみえる)ので時間が足りなくてあまり説明できません。ごめんなさい。
例を用意しておきましたのでこちらを参考にしてください。
質問があればdiscordのどこかのサーバーでメンションを頂ければお答えできると思います。
基本方針は以下のとおりです。
TO(layer)
でレイヤー自体を有効化/無効化する未確認ですが、via/Remapとも共存できそうです。この場合、Artseyレイヤーを編集してしまうとコンボが反応しなくなるので気をつける必要があります。
csvファイルを変更してスクリプトに読み込ませるとcombo.hを再生成してくれます。
keymaps/artsey
にcsvファイルを置いて、ファイルのパスを指定して実行してください。
詳しい使い方は以下のURLとスクリプトのヘルプを確認してください。
https://github.com/hsgw/qmk_userspace/tree/artsey/users/hsgw/combo
<< マクロパッドについてに戻る
<< マクロパッドをマクロパッドとして使わない方法に戻る