トラックボールでスクロールがしたくて設定をしていたが、HammerspoonとKarabinerの仕様の差に嵌められたよって話です。
インストール
調べてね
トラックボールによるスクロール自体はHammerspoonのみでできます。
こんな記事読んでる人はもうインストール済かと思うけども、 Karabiner-Elementsも便利だからインストールしましょう。
そのせいで嵌められたと言っても過言ではないけど
設定方法
GitHubに偉大な先達がいるので、基本的にはコードをそのまま実行するだけです。
-- HANDLE SCROLLING WITH MOUSE BUTTON PRESSED
local scrollMouseButton = 2
local deferred = false
overrideOtherMouseDown = hs.eventtap.new({ hs.eventtap.event.types.otherMouseDown }, function(e)
-- print("down")
local pressedMouseButton = e:getProperty(hs.eventtap.event.properties['mouseEventButtonNumber'])
if scrollMouseButton == pressedMouseButton
then
deferred = true
return true
end
end)
overrideOtherMouseUp = hs.eventtap.new({ hs.eventtap.event.types.otherMouseUp }, function(e)
-- print("up")
local pressedMouseButton = e:getProperty(hs.eventtap.event.properties['mouseEventButtonNumber'])
if scrollMouseButton == pressedMouseButton
then
if (deferred) then
overrideOtherMouseDown:stop()
overrideOtherMouseUp:stop()
hs.eventtap.otherClick(e:location(), 0, pressedMouseButton)
overrideOtherMouseDown:start()
overrideOtherMouseUp:start()
return true
end
return false
end
return false
end)
local oldmousepos = {}
local scrollmult = -2 -- negative multiplier makes mouse work like traditional scrollwheel
dragOtherToScroll = hs.eventtap.new({ hs.eventtap.event.types.otherMouseDragged }, function(e)
local pressedMouseButton = e:getProperty(hs.eventtap.event.properties['mouseEventButtonNumber'])
-- print ("pressed mouse " .. pressedMouseButton)
if scrollMouseButton == pressedMouseButton
then
-- print("scroll");
deferred = false
oldmousepos = hs.mouse.getAbsolutePosition()
local dx = e:getProperty(hs.eventtap.event.properties['mouseEventDeltaX'])
local dy = e:getProperty(hs.eventtap.event.properties['mouseEventDeltaY'])
local scroll = hs.eventtap.event.newScrollEvent({dx * scrollmult, -dy * scrollmult},{},'pixel')
-- put the mouse back
hs.mouse.setAbsolutePosition(oldmousepos)
return true, {scroll}
else
return false, {}
end
end)
overrideOtherMouseDown:start()
overrideOtherMouseUp:start()
dragOtherToScroll:start()
こちらのコードはGitHubにいた先達から拝借しました。ありがとうございます。
2行目のscrollMouseButtonの値を変更することで、トリガーとなるボタンを変更できるのですが、ここに罠がありました。
私はもともとKarabinerを使用していたので、Karabiner-Eventviewerでボタンの名前を確認していました。
戻るボタンを押して確認したら"Button4"だったので、先のコードに"4"を入力しても動かず、なんでやねんと思っておりましたが、どうもHannmerSpoonとKarabinerでボタンの番号が違うことが原因のようです。
ボタン番号をHannmerSpoonで確認する
以下のコードをinit.luaに書き込む
hs.eventtap.new({hs.eventtap.event.types.otherMouseDown}, function(e)
print("Button pressed: ", e:getProperty(hs.eventtap.event.properties.mouseEventButtonNumber))
end):start()
保存してメニューバーのHannmerSpoonアイコンから"Console"を選択
こんな画面が開くので、右上の"Reload config"を押してから、トリガーにしたいマウスボタンを押す。
画像のように押されたボタンの番号が表示されるのでこれを覚えておいて、長い方のコードをinit.luaに貼り付け、2行目を先程確認したボタンの番号に書き換えればOK
保存したらReload configを忘れずに!!!(n敗)