keyballの自動マウスレイヤーに戻る・進むボタンを追加する方法
記事を一言でまとめると
keyball61の自動マウスレイヤーを有効化し、戻る・進むボタンを押してもマウスレイヤーに居続ける仕様に改造しました。
はじめに
keyballは素晴らしいキーボードですが、マウス操作のためにレイヤー切り替えボタンを押し続ける必要がある点が若干面倒に感じることもあります。
これに対して、自動マウスレイヤーを使う方法があります。自動マウスレイヤーはトラックボールの動きを検知してマウスレイヤーに切り替わる機能です。現在使用方法は以下の2パターンがあると思います。
1.QMK最新版の標準機能を使う
2.かみだいさんのファームウェアを使う
ご要望を頂いたので以下のファームウェアのkeyball44版とkeyball61版を作りました。
— かみだい@keyball研究中🎱🙇♂️ (@d_kamiichi) February 17, 2023
👇からダウンロードして使用できます。
※ただしkeyball39以外の動作確認は不十分です(気に入らなければ元のファームウェアに戻すことは可能)。https://t.co/idyY1xy6PZ https://t.co/mrhXdU62yM
今回は、2の方式を使用しました。
戻る・進むボタンの有効化
今回の主題はこちらです。
私はよく5ボタンマウスを使用しており、keyballにもMouse BTN4/5を登録して使用しております。
さて、自動マウスレイヤー付きファームウェアではマウスボタンが押された場合はマウスレイヤーに居続けて、その他のキーが押された場合にすぐにキーボードレイヤーに戻るといった機能があります。これによりマウスとキー入力の切り替えが即座に行われるので快適ではあるのですが、一般にマウスボタンとしてBTN4/5は含まれません。そこで私はファームウェアを改造しました。
変更点
マウスボタン周りの実装方法は調べてもあまり情報が多くありません。
結論から言うと、keymap.cの編集のみで大丈夫でした。
42行目
enum custom_keycodes
{
KC_MY_BTN1 = KEYBALL_SAFE_RANGE, // Remap上では 0x5DAF
KC_MY_BTN2, // Remap上では 0x5DB0
KC_MY_BTN3, // Remap上では 0x5DB1
KC_MY_BTN4, // Remap上では 0x5DB2
KC_MY_BTN5 // Remap上では 0x5DB3
};
115行目
bool process_record_user(uint16_t keycode, keyrecord_t *record)
{
switch (keycode)
{
case KC_MY_BTN1:
case KC_MY_BTN2:
case KC_MY_BTN3:
case KC_MY_BTN4:
case KC_MY_BTN5:
{
custom_keycodesではKC_MY_BTN1を基準に、キーコードが1ずつ増えるようにマウスボタンが割り当てられます。なので、KC_MY_BTN3の後ろにBTN4,5と並べていけばマウスボタン4,5として認識されます。同様に6,7,8…と並べられると思いますが、OSでデフォルト動作が設定されているのは5までだと思います。
あとは、switch文に条件を追加してあげればOKです。

自動マウスレイヤー(keyball61ではlayer4)にBTN4/5のキーコードを配置すれば完成です。
最後に
マウスレイヤーの情報を調べても確証が得られず、おそらく3の後ろに並べれば動きそうだな、と思えるまで時間がかかったので情報を共有してみました。どこまで需要があるか分かりませんが。。。
この記事はkeyball61で書きました。
追記
自動マウスレイヤーに居続けるキーをauto_click_layer.hのignore_disable_mouse_layer_keysで指定する手段もあります。ただ、現在この部分はコメントアウトされているようです。私は左クリックや右クリックと同列に扱えないのが気持ち悪いと思って方法を探しただけですので、あまり参考になさらなくて大丈夫です。
QMK最新版もおそらくマウスボタン8までは除外範囲のようです。私がかみだいさんのファームウェアをベースにしてるのはマウスジェスチャーを使ってみたかったからです。