新しいキーボードを作るたびに、新しくキーボード定義とキーマップを起こす必要があります。
いい加減めんどくさくなってきたところでwrapperという文化を知った*1のでその話と、ついでにJPキーボードとして定義する際のチートシート的なものをまとめます。
wrapper
可変長引数マクロを利用した、多重マクロ?を使った省略形です。
キーボードで、特にOrtholinearな分割キーボードを定義する場合は、各行5文字単位でひとまとまりの定型となっています。
繰り返し出てくるパターンなので、例えばKC_Q,KC_W,KC_E,KC_R,KC_Tの5文字をまとめて___QWERTY_L1___と定義したとしましょう。
これを単純にLAYOUTマクロでくるむと「引数の数が違うぞ」と怒られます。なので間に可変長引数を受け取れるようにしたLAYOUT_wrapperを確保します。
可変長引数マクロはGCCの機能だそうで、__VA_ARGS__を与えることで実現できます。
#define LAYOUT_wrapper LAYOUT(__VA_ARGS__)
定型化している部分を都度コピーしてもよいですが、qmk_firmwareには./usersフォルダーがあります。この中にユーザ名/wrappers.hを定義することでincludeするだけでどのキーボードでもマクロをすぐに使いまわすことができるようになります。
例えば、QMKメンテナのdrashnaさんがCorneなどでやっています。
JPキーボード
さて、上記の範囲はどのキーボードでもほぼ固定となりますが、JPは追加の記号が必要です。
ANSI104にあるキーは同じ位置、ないキーはKC_INTXになります。
| 行 | 項目 | キーコード |
|---|---|---|
| R1 | 半角/全角 | KC_GRV |
| R1 | ハイフン/イコール | KC_MINUS |
| R1 | サーカムフレックス/チルダ | KC_EQL |
| R1 | YEN/パイプ | KC_JYEN/KC_INT3 |
| R2 | アットマーク/バッククオート | KC_LBRC |
| R2 | 左かっこ | KC_RBRC |
| R3 | セミコロン/プラス | KC_SCLN |
| R3 | コロン/アスタリスク | KC_QUOT |
| R3 | 右かっこ | KC_NUHS |
| R4 | バックスラッシュ/アンダースコア | KC_INT1/KC_RO |
| R5 | 無変換 | KC_MHEN/KC_INT5 |
| R5 | 変換 | KC_HENK/KC_INT4 |
| R5 | ひらがなカタカナ | KC_KANA/KC_INT2 |
〆
ここら辺使ってそろそろXD75をAtomicLikeLayoutから移行しつつ、XXX4x7*2向けのキーマップ用意していきたいなーと思います。
天キー後に届いてとてもだれているので写真をあげて承認欲求経由で動機を維持しよう作戦。4x7のx-switchです。 pic.twitter.com/4bfBVMvRPS
— 天高 (@skyhigh_works) 2019年5月5日