キーボードアルティメイタム 第2話 Corne V4 Chocolate
こんにちは、びしょ〜じょです。
最近『教皇選挙』を観ました。 お前は観たか? 観たほうがいいぞ。
内容○、画○、音響○なんで、キリスト教世界観分かるパーソンだったら更に面白く観られる気がします。
1. はじめに 材料調達部門
頭がおかしくなってキーボードを買った。

- ファームウェアはqmk
- いわゆる40%分割型
- 数字キーが無い
- ビカビカ光る
- ホットスワップ
- ソケットはすでに着いてるのでキースイッチ(別売)を刺すだけ
というのが特徴。 数字キーいらねえんじゃねえのとなって、こうなった。 ErgoDox EZからの乗り換えになる。

キースイッチはKailhのChoc v2 Deep Sea Silent Isletという結構新しいやつを買った。

HHKBみたいな、少しザラっとしてるけど滑らかな静音リニアで気持ちがいい。 流通が少なそうなのがネック。
親指で押すキーは軽くしたいのでChoc v1のピンク軸にした。 v1とv2はソケット互換があるのでどちらも使える。一方キャップに互換はない。

めちゃ軽く手への負担は少ないが、Isletが静音すぎて相対的にカチャカチャ音が気になるのが玉に瑕。
2. qmk_firmware 小テク集
xmodmapでキーマップを変更していた10年以上前から入力の歴史は続いており(中略)(攻略)。 ErgoDox EZのキーマップをベースにした。
キーボードがだいぶ小さくなったんで、マウス操作レイヤーと数字操作レイヤーを追加する。 shift+数字も変更したいので、それ用のレイヤーも追加する。
2-1. tri layer
LOWER
レイヤーでの入力にshift modifierを適用したい場合、ナイーブにシフトキーだけ押すとうまくいかない。
うまくいかないんで、 layer_state_set_user
関数内でupdate_tri_layer_state
を使って複数レイヤーをまたぐ場合のルールを登録する。
layer_state_t layer_state_set_user(layer_state_t state) {
state = update_tri_layer_state(state, _LOWER, _SHIFT, _LSHIFT);
state = update_tri_layer_state(state, _NUM, _LOWER, _NMODS);
return state;
}
Shiftキーを押したときに_SHIFT
レイヤーに移行すればよい。
このとき_SHIFT
は何も登録してないレイヤーでよい。
これで、
-
_LOWER
かつ_SHIFT
のとき、_LSHIFT
レイヤーに移行 -
_NUM
かつ_LOWER
のとき、_NMODS
レイヤーに移行
する。 ちなむとcomboもうまくいかない。switching layer系の組み合わせもうまくいかない。 皆さんも諦めるか、smarterな解法があったら教えて下さい。
2-2. key override
QMKを触っていると人々はレイヤーがサァ! とか色気づくんだけど、modifier key+key→別のキーに変換というナイーブな機能がある。
const key_override_t *key_overrides[] = {
&ko_make_basic(MOD_MASK_SHIFT, KC_0, JP_QUES),
};
Shift+0で?
が出てくるようになる。
ちなみに俺は普通のキーボードでShift+0すると何が入力されるのかもう覚えてない。
2-3. マウス中クリック/ホイール
マウスホイールの中クリックを皆さん使っているか? ブラウザのリンクを中クリックすると新しいタブで開いたり、タブを中クリックするとcloseしたりする優れモノです。
qmk_firmwareはマウスエミュレーションができる。
QMKと中クリックは人生のテーマだったんですが、
case MIDDLE:
if (record->event.pressed) {
register_code(KC_BTN3);
WAIT_PRESSING(record);
unregister_code(KC_BTN3);
layer_on(_WHEEL);
} else {
layer_off(_WHEEL);
}
return false;
プログラム2.3だと先中クリックが入力されるため、ホイール操作だけしたいのに変にリンクを開いたりしてしまい、Webサイトのスクロールできるtable of contentsでスクロールするつもりがうっかり別タブを開いてしまう事故が多々おきた。
鬼の努力は実はたった1行で解決できる。
#define MIDDLE LT(_WHEEL, KC_BTN3)
これをkeymapで呼ぶだけ。
ドキュメントはちゃんと隅々まで嫁ってことですな…w
2-4. レイヤー数増やす
#undef DYNAMIC_KEYMAP_LAYER_COUNT
#define DYNAMIC_KEYMAP_LAYER_COUNT 9
はいこれです。
これを書かずに7以上のレイヤーを定義するとコンパイラが「DYNAMIC_KEYMAP_LAYER_COUNT
は6や!!」と怒ってくるので、察せられます。
3. マウスtips
多分世の中には多くのqmkマウスエミュレーション愛好家がいると思うんですが、私もその一人でしてェ…。
一旦こうなっている。
#define MK_KINETIC_SPEED
#undef MOUSEKEY_DELAY
#define MOUSEKEY_DELAY 0
#undef MOUSEKEY_INITIAL_SPEED
#define MOUSEKEY_INITIAL_SPEED 80
#undef MOUSEKEY_MOVE_DELTA
#define MOUSEKEY_MOVE_DELTA 8
#undef MOUSEKEY_BASE_SPEED
#define MOUSEKEY_BASE_SPEED 2200
#undef MOUSEKEY_WHEEL_DELAY
#define MOUSEKEY_WHEEL_DELAY 3
#define MOUSEKEY_WHEEL_INTERVAL 40
#define MOUSEKEY_WHEEL_MAX_SPEED 12
#define MOUSEKEY_WHEEL_TIME_TO_MAX 16
Kineticモードはカーソルの速度がquadratic curveで加速するため、最大速度から逆算すると初動からしばらく小さく動けるので、繊細に動かせるし遠くに動かしたいときも困らない。
MOVE_DELTA
で加速度合いを変更し、BASE_SPEED
まで (BASE_SPEED - INITIAL_SPEED) / MOVE_DELTA
millisecかけて加速していく。
結局この辺は好みなんで快適な数値を探してください(爆)
4. おわりに
いかがでしたか?
ちなみに第1話はない。
5. おまけ
ありすぎだろ
壊れたキーボード直してたら家にキーボードありすぎることに気付いた pic.twitter.com/C5PgB5V2sm
— びしょ〜じょ (@Nymphium) May 1, 2025
TEXシリーズはYodaからぼちぼち買ってるので愛着がある。 奥にあるLogiのG515もG HBUという専用のソフトウェアでレイヤー機能や様々なカスタマイズができるんで使い勝手がよい。
なんとなくほしいな〜とかゲームしたいな〜となると、増えてしまうわけですね。