天高工房

キーキャップに印字して遊んだり電子工作して遊んだりしたことを書くかもしれません。

【QMK】JPキーボードチートシート

新しいキーボードを作るたびに、新しくキーボード定義とキーマップを起こす必要があります。 いい加減めんどくさくなってきたところで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するだけでどのキーボードでもマクロをすぐに使いまわすことができるようになります。

github.com

例えば、QMKメンテナのdrashnaさんがCorneなどでやっています。

github.com

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向けのキーマップ用意していきたいなーと思います。

*1:SMKJで紹介されてるのを見た

*2:X-Switch専用の4x7 Ortholinear