Skip to content

Instantly share code, notes, and snippets.

@huytd
Created July 23, 2021 04:48
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save huytd/955110cbf58895e7ce0c7842924d2b6d to your computer and use it in GitHub Desktop.
Save huytd/955110cbf58895e7ce0c7842924d2b6d to your computer and use it in GitHub Desktop.
Hammerspoon script for handling middle mouse scroll with MX Ergo
-- HANDLE SCROLLING WITH MIDDLE MOUSE BUTTON PRESSED
local deferred = false
overrideOtherMouseDown =
hs.eventtap.new(
{hs.eventtap.event.types.otherMouseDown},
function(e)
deferred = true
return true
end
)
overrideOtherMouseUp =
hs.eventtap.new(
{hs.eventtap.event.types.otherMouseUp},
function(e)
if (deferred) then
overrideOtherMouseDown:stop()
overrideOtherMouseUp:stop()
hs.eventtap.middleClick(e:location(), pressedMouseButton)
overrideOtherMouseDown:start()
overrideOtherMouseUp:start()
return true
end
return false
end
)
local oldmousepos = {}
local scrollmult = 2 -- negative multiplier makes mouse work like traditional scrollwheel, for macOS, use positive number.
dragOtherToScroll =
hs.eventtap.new(
{hs.eventtap.event.types.otherMouseDragged},
function(e)
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}
end
)
overrideOtherMouseDown:start()
overrideOtherMouseUp:start()
dragOtherToScroll:start()
@huytd
Copy link
Author

huytd commented Jul 23, 2021

image

Next up, map Forward mouse as Middle button.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment