小智 13
Smart Scroll具有“抓取滚动”功能,可满足您的需求。将它分配给“按钮 3(中间)”并在两个轴上拖动将适用于浏览器 (Chrome)、终端、Adobe Photoshop 和 Finder 等应用程序 - 我尝试过的任何应用程序都无法使用它(使用 4.0测试版向上和向上)。它有一个免费试用。
Ale*_*sel 13
我使用Hammerspoon使用以下受此线程启发的配置脚本进行了操作:https : //github.com/tekezo/Karabiner/issues/814#issuecomment-337643019
脚步:
Open Config
将以下lua
脚本粘贴到配置中:
-- 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(), pressedMouseButton)
overrideOtherMouseDown:start()
overrideOtherMouseUp:start()
return true
end
return false
end
return false
end)
local oldmousepos = {}
local scrollmult = -4 -- 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()
Run Code Online (Sandbox Code Playgroud)更新(2022):有一个名为Karabiner Elements的新开源应用程序,它可以执行此操作以及更多操作 - 它可以执行键盘和鼠标重新映射等操作。
这取代了旧的“Karabiner”应用程序(请参阅此问题以获取[旧]一些示例),并且现在提供鼠标和键盘重新映射,如 @Nathan 在评论中提到的。
另一个选择是Hammerspoon,它也是一个开源工具,可用于将鼠标(和/或键盘)上的按键重新映射到不同的功能。您需要安装该工具并为其提供一些适当的配置 - 请参阅此处有关鼠标重新映射的示例。
要检查您的设备正在生成哪些事件类型和 mouseEventButtonNumbers,您可以在 Hammerspoon 控制台中运行此命令(只需将 4 行复制/粘贴到控制台中)(用于reload config
停止它):
hs.eventtap.new({"all"},function(e)
print(e,"mouseEventButtonNumber:",
e:getProperty(hs.eventtap.event.properties['mouseEventButtonNumber']))
end):start()
Run Code Online (Sandbox Code Playgroud)
注意:如果您安装了 Logitech Control Center (LCC) 工具 - 它会使用已安装的内核模块直接从 Logitech 设备获取事件,因此 Hammerspoon 无法看到它们。如果您想使用 Hammerspoon 重新映射鼠标按钮,则需要卸载 LCC。