こんにちは、ナナオです。
前回、torabo-tsuki lp xsを購入したという記事を書きました。
ということで最近結構カスタマイズしているのですが、今回はマウスジェスチャを実装したので一旦記事にしておこうと思います。
リポジトリはこちらです。
GitHub - satodaiki/zmk-keyboard-torabo-tsuki-lp · GitHub
マウスジェスチャの実装
変更するファイルは以下の4ファイルです。
- /config/west.yml
- /config/keymap.keymap
- /boards/shields/torabo_tsuki_lp/torabo_tsuki_lp.dtsi
- /boards/shields/torabo_tsuki_lp/torabo_tsuki_lp_right.overlay
ymlファイル以外のファイル更新の際は末尾にセミコロンを入れるのをお忘れなきよう…(私はこれで何回もビルド失敗しました)
west.yml
まずは必要なライブラリを追加します。
マウスジェスチャの実装は以下のライブラリを使用します。
また、特定のレイヤに入った時と離れた時に特定のBehaviorを呼び出すためのライブラリも使用します。
(これはマウスジェスチャの実装で定義されているBehaviorを呼び出すために使用します)
GitHub - ssbb/zmk-listeners: ZMK module to invoke behaviors on certain events. · GitHub
ライブラリの追加はwest.ymlに以下のように追記すればよいです。
manifest:
remotes:
- name: zmkfirmware
url-base: https://github.com/zmkfirmware
- name: sekigon-gonnoc
url-base: https://github.com/sekigon-gonnoc
# 以下の4行を追加
- name: kot149
url-base: https://github.com/kot149
- name: ssbb
url-base: https://github.com/ssbb
projects:
- name: zmk
remote: zmkfirmware
revision: v0.3
import: app/west.yml
- name: zmk-component-bmp-boost
remote: sekigon-gonnoc
import: west.yml
revision: v0.2
- name: zmk-feature-status-led
remote: sekigon-gonnoc
revision: main
- name: zmk-driver-paw3222
remote: sekigon-gonnoc
revision: torabo-tsuki
- name: zmk-feature-cdc-acm-bootloader-trigger
remote: sekigon-gonnoc
revision: v0.2
- name: zmk-feature-non-lipo-battery-management
remote: sekigon-gonnoc
revision: main
# 以下の6行を追加
- name: zmk-mouse-gesture
remote: kot149
revision: v1
- name: zmk-listeners
remote: ssbb
revision: v1
self:
path: config
keymap.keymap
マウスジェスチャを定義します。
patternにジェスチャの方向、bindingsにBehaviorを定義します。
ここではwindowsの設定で、仮想デスクトップの起動やタブ移動などを定義しています。
// ...中略...
&zip_mouse_gesture {
enable-eager-mode;
prev_tab {
pattern = <GESTURE_RIGHT>;
bindings = <&kp LC(LS(TAB))>;
};
next_tab {
pattern = <GESTURE_LEFT>;
bindings = <&kp LC(TAB)>;
};
vdesk {
pattern = <GESTURE_DOWN>;
bindings = <&kp LG(TAB)>;
};
vdesk_send_next {
pattern = <GESTURE_UP>;
bindings = <&kp LG(LC(LS(RIGHT)))>;
};
};
// ...中略...
torabo_tsuki_lp.dtsi
layer_listenersを定義します。
これでマウスジェスチャのオンオフをMO(モメンタリレイヤー)のように扱うことができます。
/ {
// ...中略...
layer_listeners {
compatible = "zmk,layer-listeners";
gesture {
layers = <4>; // マウスジェスチャをオンにするレイヤを定義
bindings = <&mouse_gesture_on &mouse_gesture_off>; // レイヤに入っている間はジェスチャをオン、離れたらオフにする
};
};
// ...中略...
};
torabo_tsuki_lp_right.overlay
最後にkeymap.keymapで定義したジェスチャを取り込む設定をします。
&pointing_listener {
// ...中略...
gesture {
layers = <4>; // ジェスチャを実装するレイヤ
input-processors = <
&zip_mouse_gesture // keymap.keymapで定義したジェスチャを取り込む
&zip_xy_scaler 0 1 // ジェスチャ中はマウスが動かないようにする
>;
};
// ...中略...
};
これでマウスジェスチャが実装されます。お疲れさまでした。
まとめ
分量的にサクッと実装してるような感じになってますが、実際は2~3日くらいかかっています。
今回はマウスジェスチャを一つ定義する方法について書きましたが、実際の私の環境では複数のOSを跨いで使用している都合上、ジェスチャもOSごとに実装しています。
次回の記事ではマウスジェスチャの複数定義と、BT接続先ごとに使用するジェスチャを切り替える方法について書きたいと思います。
では今回はこれで👍