こんにちは、ナナオです。

前回、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

まずは必要なライブラリを追加します。

マウスジェスチャの実装は以下のライブラリを使用します。

GitHub - kot149/zmk-mouse-gesture: A ZMK module that converts combinations of 4-direction mouse strokes into key presses or any other behaviors. · GitHub

また、特定のレイヤに入った時と離れた時に特定の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接続先ごとに使用するジェスチャを切り替える方法について書きたいと思います。

では今回はこれで👍