Macとロジクール製トラックボールでスクロールホイールを実現する方法

この記事は公開から2年以上経過しています。

Mac(M1, Monterey) + ロジクール製トラックボール(Tracman Marble T-BC21) + Hummerspoon を使い、スクロールホイールをエミュレーションする方法を紹介します。

file

私はマウスやトラックボールは左手で利用する場合が多いため左利きの方向けの設定内容で紹介しています。
右利き用として(左小ボタンで)利用したい場合は、ソース中のlocal buttonNum = 4local buttonNum = 3に変更してください。


手順

  1. Hammerspoonの公式サイトからHummerspoonをダウンロードしてインストール。
    システム環境設定セキュリティとプライバシーでHummerspoonへのアクセシビリティ権限の付与が必要。

  2. Hummerspoonを起動。

  3. Hammerspoonのメニューバーアイコンクリックでメニューを表示し、Open Configをクリックして設定ファイルinit.luaを表示。

  4. init.luaに、以下の設定を登録。

    local buttonNum = 4 -- 左小ボタンは3, 右小ボタンは4
    local scrolling = false
    local scrollSteps = -2 -- マイナス値の場合は逆スクロール(Windowsなどと同等のスクロール動作)
    
    hooksMouseUp = hs.eventtap.new({hs.eventtap.event.types.otherMouseUp}, function(e)
        if (e:getProperty(hs.eventtap.event.properties.mouseEventButtonNumber) == buttonNum and scrolling) then
            scrolling = false
            return true
        end
        return false
    end)
    
    hooksMouseDragged = hs.eventtap.new({hs.eventtap.event.types.otherMouseDragged}, function(e)
        if (e:getProperty(hs.eventtap.event.properties.mouseEventButtonNumber) ~= buttonNum) then
            return false
        end
        scrolling = true
        local curMousePos = hs.mouse.absolutePosition()
        local posX = e:getProperty(hs.eventtap.event.properties.mouseEventDeltaX)
        local posY = e:getProperty(hs.eventtap.event.properties.mouseEventDeltaY)
        local scrollEvent = hs.eventtap.event.newScrollEvent({posX * scrollSteps, posY * scrollSteps}, {}, "pixel")
        hs.mouse.absolutePosition(curMousePos)
        return true, {scrollEvent}
    end)
    
    hooksMouseUp:start()
    hooksMouseDragged:start()

    GitHub Gist

  5. Hammerspoonのメニューバーアイコンクリックでメニューを表示し、Reload Configをクリックして設定内容を反映。


補足

こののLuaスクリプトの処理内容を簡単に説明すると、

  1. ボタン4(右小ボタン)でマウスドラッグされた場合は、スクロールイベントを発行。
  2. ボタン4が離されたときにスクロール実行中の場合はボタン4のイベントをキャンセル。
    (スクロール操作以外でボタン4を押下した場合は、既定のボタン動作。)

となります。


参考ウェブサイトなど

  • GitHub
    tekezo/Karabiner Help Enabling virtual scroll wheel on Sierra.

以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする