Skip to content

Instantly share code, notes, and snippets.

@wolever
Created November 7, 2019 18:17
Show Gist options
  • Select an option

  • Save wolever/ca59d78fdd800d6dfbfb6cb093cfd813 to your computer and use it in GitHub Desktop.

Select an option

Save wolever/ca59d78fdd800d6dfbfb6cb093cfd813 to your computer and use it in GitHub Desktop.

Revisions

  1. wolever created this gist Nov 7, 2019.
    56 changes: 56 additions & 0 deletions fix-mouse.lua
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,56 @@
    -- HANDLE SCROLLING WITH MOUSE BUTTON PRESSED
    local scrollMouseButton = 3
    local deferred = false

    overrideOtherMouseDown = hs.eventtap.new({ hs.eventtap.event.types.otherMouseDown }, function(e)
    -- print(hs.eventtap.event.properties['mouseEventButtonNumber'])
    local mouseButton = e:getProperty(hs.eventtap.event.properties['mouseEventButtonNumber'])
    if mouseButton == scrollMouseButton then
    deferred = true
    return true
    end

    -- Re-map "button 4" to button middle mouse button (for center-click-to-open-in-new-tabs)
    if mouseButton == 4 then
    local point = hs.mouse.getAbsolutePosition()
    hs.eventtap.event.newMouseEvent(hs.eventtap.event.types['middleMouseDown'], point):post()
    return true
    end
    end)

    overrideOtherMouseUp = hs.eventtap.new({ hs.eventtap.event.types.otherMouseUp }, function(e)
    -- print(hs.eventtap.event.properties['mouseEventButtonNumber'])
    local mouseButton = e:getProperty(hs.eventtap.event.properties['mouseEventButtonNumber'])

    -- Re-map "button 4" to button middle mouse button (for center-click-to-open-in-new-tabs)
    if mouseButton == 4 then
    local point = hs.mouse.getAbsolutePosition()
    hs.eventtap.event.newMouseEvent(hs.eventtap.event.types['middleMouseUp'], point):post()
    return true
    end
    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 mouseButton = e:getProperty(hs.eventtap.event.properties['mouseEventButtonNumber'])
    -- print ("pressed mouse " .. mouseButton)
    if scrollMouseButton == mouseButton 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()