У меня есть мышь с тремя кнопками, но без колеса.
В OS X, есть ли способ (возможно, с дополнительным программным обеспечением), который позволил бы мне использовать третью кнопку для прокрутки, удерживая ее и перемещая мышь?
Smart Scroll делает то, что вы ищете, с помощью функции «Grab Scroll». Присвойте его «Кнопке 3 (по центру)», и перетаскивание по обеим осям будет работать в таких приложениях, как браузеры (Chrome), Terminal, Adobe Photoshop и Finder - ни одно приложение, которое я пробовал, не работало с ним (с использованием 4.0 беты вверх и вверх). Это бесплатная пробная версия.
Smooze делает это, между прочим. (Я разработчик)
То, что отличает его от других предложений, это возможность использовать его в каждом приложении Mac, в то же время идентифицируя ссылки, например. (в случае, если вы используете перетаскивание средней кнопкой, чтобы захватить и бросить, но все же хотите, чтобы нажатие средней кнопки действовало как средняя кнопка)
С Smooze больше похоже на захват-перетаскивание, чем захват-перетаскивание. Релиз влияет на импульс и анимацию прокрутки, аналогично прокрутке iPhone.
Это зависит от программного обеспечения - например, Firefox поддерживает его, а Google Chrome - нет.
В настоящее время, к сожалению, в OS X нет программного обеспечения, позволяющего использовать такую функцию в масштабе всей системы.
Есть очень хорошее приложение с открытым исходным кодом под названием Karabiner, которое сделает это и многое другое (переназначение клавиатуры и мыши и т.д.). Посмотрите этот вопрос для некоторых примеров. Также для определенных производителей они поставляют программное обеспечение по индивидуальному заказу, которое может обеспечить улучшенную / модифицированную функциональность (например, Logitech Control Center).
Как упомянуто в комментариях ниже, хотя новая версия «Karabiner Elements» была выпущена для MacOS Sierra (10.12) и выше, на данный момент она предусматривает только переназначение на основе клавиатуры - поэтому в настоящее время переназначение мыши невозможно с ним.
Однако Hammerspoon - это еще один бесплатный инструмент с открытым исходным кодом, который может использоваться, помимо прочего, для переназначения клавиш мыши (и / или клавиатуры) для различных функций. Вам нужно будет установить инструмент и снабдить его соответствующей конфигурацией - см. Примеры здесь для переназначения мыши.
Чтобы проверить, какие типы событий и mouseEventButtonNumbers генерируются вашим устройством, вы можете запустить это (просто скопируйте / вставьте 4 строки в консоль) в консоли Hammerspoon (используйте reload config
чтобы остановить его):
hs.eventtap.new({"all"},function(e)
print(e,"mouseEventButtonNumber:",
e:getProperty(hs.eventtap.event.properties['mouseEventButtonNumber']))
end):start()
Примечание. Если вы установили инструменты Logitech Control Center (LCC) - он получает события непосредственно с устройств Logitech, используя установленный модуль ядра, поэтому Hammerspoon их не видит. Вам нужно будет удалить LCC, если вы хотите переназначить кнопки мыши с помощью Hammerspoon.
Я использовал Better Touch Tool, чтобы назначить Ctrl+ средний щелчок для PgUp, а Option+ Middle-click для PgDown. Это бесплатное, отличное программное обеспечение и работает хорошо.
Я сделал это с помощью 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()