Câu trả lời:
Smart Scroll thực hiện những gì bạn đang tìm kiếm, với tính năng 'Grab Scroll'. Gán nó vào 'Nút 3 (Giữa)' và kéo trên cả hai trục sẽ hoạt động trong các ứng dụng như trình duyệt (Chrome), Terminal, Adobe Photoshop và Finder - không có ứng dụng nào tôi từng thử làm việc với nó (sử dụng 4.0 betas lên và lên). Nó có một thử nghiệm miễn phí.
Nó phụ thuộc vào phần mềm - ví dụ: Firefox hỗ trợ phần mềm, trong khi Google Chrome thì không.
Hiện tại, không có phần mềm để kích hoạt tính năng toàn hệ thống như vậy trong OS X, thật đáng buồn.
Smooze làm điều đó, trong số những thứ khác. (Tôi là nhà phát triển)
Điều khác biệt với các đề xuất khác là khả năng sử dụng nó trong mọi ứng dụng mac trong khi vẫn xác định các liên kết chẳng hạn. (trong trường hợp bạn sử dụng kéo nút giữa để lấy và ném nhưng vẫn muốn rằng nhấp vào nút giữa sẽ hoạt động như nút giữa)
Với Smooze giống như lấy-kéo-ném hơn là kéo-kéo. Bản phát hành ảnh hưởng đến động lượng và hình ảnh động của cuộn, tương tự như cuộn iPhone.
Có một ứng dụng mã nguồn mở rất hay tên là Karabiner sẽ thực hiện điều này và còn hơn thế nữa (Bàn phím và chuột ánh xạ, v.v.). Xem câu hỏi này cho một số ví dụ. Ngoài ra, đối với một số nhà sản xuất nhất định, họ cung cấp phần mềm điều khiển tùy chỉnh có thể cho phép cải thiện / sửa đổi chức năng (ví dụ: Trung tâm điều khiển Logitech).
Như đã đề cập trong các bình luận bên dưới, trong khi phiên bản mới của 'Karabiner Elements' đã được phát hành cho MacOS Sierra (10.12) trở đi, nó chỉ cung cấp cho việc ánh xạ lại dựa trên bàn phím cho đến nay - vì vậy hiện tại việc ánh xạ chuột không thể thực hiện được.
Tuy nhiên, Hammerspoon là một công cụ mã nguồn mở miễn phí khác có thể được sử dụng, trong số nhiều thứ khác, để ánh xạ lại các phím trên chuột (và / hoặc bàn phím) cho các chức năng khác nhau. Bạn sẽ cần cài đặt công cụ và cung cấp cho nó một số cấu hình phù hợp - xem các ví dụ ở đây để ánh xạ lại chuột.
Để kiểm tra loại sự kiện và mouseEventButtonNumbers nào đang được thiết bị của bạn tạo ra, bạn có thể chạy nó (chỉ cần sao chép / dán 4 dòng vào bảng điều khiển) trong bảng điều khiển Hammerspoon (Sử dụng reload config
để dừng nó):
hs.eventtap.new({"all"},function(e)
print(e,"mouseEventButtonNumber:",
e:getProperty(hs.eventtap.event.properties['mouseEventButtonNumber']))
end):start()
Lưu ý: Nếu bạn đã cài đặt các công cụ Trung tâm điều khiển Logitech (LCC) - nó sẽ lấy các sự kiện trực tiếp từ các thiết bị Logitech bằng mô-đun hạt nhân đã cài đặt của chúng để Hammerspoon không thể nhìn thấy chúng. Bạn sẽ cần gỡ cài đặt LCC nếu bạn muốn ánh xạ lại các nút chuột bằng Hammerspoon.
Tôi đã làm điều đó với Hammerspoon với kịch bản cấu hình sau được lấy cảm hứng từ chủ đề này: https://github.com/tekezo/Karabiner/issues/814#issuecomment-337643019
Các bước:
Open Config
Dán đoạn lua
script sau vào cấu hình:
-- 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()
Tôi đã sử dụng Công cụ cảm ứng tốt hơn để gán Ctrl + nhấp chuột giữa vào PGUp và Tùy chọn + Nhấp chuột giữa vào PGDown. Đó là phần mềm miễn phí, tuyệt vời và hoạt động tốt.