この記事は公開から2年以上経過しています。
Mac(M1, Monterey) + ロジクール製トラックボール(Tracman Marble T-BC21) + Hummerspoon を使い、スクロールホイールをエミュレーションする方法を紹介します。
私はマウスやトラックボールは左手で利用する場合が多いため左利きの方向けの設定内容で紹介しています。
右利き用として(左小ボタンで)利用したい場合は、ソース中のlocal buttonNum = 4
をlocal buttonNum = 3
に変更してください。
手順
-
Hammerspoonの公式サイトからHummerspoonをダウンロードしてインストール。
※システム環境設定
のセキュリティとプライバシー
でHummerspoonへのアクセシビリティ権限の付与が必要。 -
Hummerspoonを起動。
-
Hammerspoonのメニューバーアイコンクリックでメニューを表示し、
Open Config
をクリックして設定ファイルinit.lua
を表示。 -
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()
-
Hammerspoonのメニューバーアイコンクリックでメニューを表示し、
Reload Config
をクリックして設定内容を反映。
補足
こののLuaスクリプトの処理内容を簡単に説明すると、
- ボタン4(右小ボタン)でマウスドラッグされた場合は、スクロールイベントを発行。
- ボタン4が離されたときにスクロール実行中の場合はボタン4のイベントをキャンセル。
(スクロール操作以外でボタン4を押下した場合は、既定のボタン動作。)
となります。
参考ウェブサイトなど
- GitHub
tekezo/Karabiner Help Enabling virtual scroll wheel on Sierra.
以上です。