macOS 鼠标侧键映射与平滑滚动:Mac Mouse Fix 使用与原理
【免费下载链接】mac-mouse-fixMac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad!项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix
把鼠标侧键按下去,想切回上一个窗口——光标纹丝不动。滚轮一格一格往前跳,快不了,也停不干净。macOS 的输入优化几乎全部围绕触控板设计,第三方鼠标的多余按键和滚轮行为拿到的系统支持非常有限。Mac Mouse Fix 做的事情,就是用侧键映射、平滑滚动和可定制的指针加速,把一只普通鼠标在 macOS 上的体验拉回顺手的状态。
Mac Mouse Fix 是什么
一个开源的本地鼠标驱动层:应用本体负责设置界面,后台的 Helper 进程负责拦截并改写鼠标事件,全部配置保存在本地。
- 侧键映射:Button 4/5、中键可绑定单击、双击、按住拖动、多键组合(如 Button 5 + 中键),动作覆盖系统快捷键与任意按键组合。
- 平滑滚动:平滑等级(off / low / regular / high)、速度(system / low / medium / high)、方向反转、触控板模拟,外加修饰键模式(水平滚动 / 缩放 / 精确 / 快速)。
- 指针速度:不依赖系统加速曲线的灵敏度与加速控制,并自动对不同轮询率、DPI 的鼠标做补偿。
- 应用感知:按应用套用不同的配置覆盖,另可临时整体关闭某项功能。
- 菜单栏开关:在 General 中开启 Show in Menu Bar 后,不用打开主界面就能临时切换功能。
一键安装:brew 或源码构建
brew install mac-mouse-fix也可以从源码构建:
git clone https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix用 Xcode 打开Mouse Fix.xcodeproj编译即可。
打开应用 → 打开 Enable Mac Mouse Fix → 系统提示授予辅助功能权限(事件拦截依赖它,没勾上就什么都不会发生)。我在这一步卡过一阵,因为勾完没有立刻生效,重启了应用才正常。
进入Buttons标签页:把鼠标指针移进界面上方的 “+” 区域,然后单击鼠标上的 Button 5。弹窗提示Button 5 is now captured即表示该按键已被接管。给它分配一个动作(比如 Launchpad)保存。再把 Scrolling 的 smooth 保持high——这是最短的可用路径:一个侧键能用,滚轮顺了。
捕获侧键并分配功能 🖱️
“捕获”是理解这个项目的关键:一个按钮一旦被 Mac Mouse Fix 捕获,其他应用就再也检测不到它——这既保证了映射稳定,也意味着想恢复原样就得把该按钮的所有动作删掉。
- 触发动作:Click、Double Click、Click and Drag,以及 Button 5 + 中键这类组合;
- 默认预设:配置文件按三键 / 五键鼠标内置了 Remaps(例如三键鼠标默认中键单击 = Mission Control,五键鼠标 Button 4 单击 = Launchpad);
- 苹果特殊键:在按键选择界面按住 Option (⌥),可以选到亮度、音量、媒体播放这类只有苹果键盘才有的按键。
调整平滑滚动与修饰键行为
Scrolling 标签页对应配置里的这几个键:
| 键 | 默认值 | 含义 |
|---|---|---|
smooth | high | 平滑等级:off / low / regular / high |
speed | medium | 滚动速度:system / low / medium / high |
reverseDirection | true | 反转方向 |
trackpadSimulation | true | 启用类触控板行为 |
修饰键模式由modifiers下的四个位掩码定义(CGEventFlags 位标志,例如 131072 = Command,524288 = Option):
<key>modifiers</key> <dict> <key>horizontal</key><integer>131072</integer> <!-- Command:水平滚动 --> <key>swift</key><integer>262144</integer> <!-- Control:快速滚动 --> <key>precise</key><integer>524288</integer> <!-- Option:精确滚动 --> <key>zoom</key><integer>1048576</integer> <!-- Command + Option:缩放 --> </dict>也就是说默认情况下:按住 Command 滚动是水平滚动,Command + Option 是缩放,Option 是逐像素的精确滚动,Control 是快速滚动。
用菜单栏与按应用覆盖处理“应用感知”
General 里开启 Show in Menu Bar 后,菜单栏可以随时临时关掉平滑滚动等功能——这是官方给“某些应用不兼容”准备的开关。配置本身支持按应用的覆盖规则,Helper 根据鼠标指针所在的应用套用对应参数(ConfigFileInterface_Helper里的configWithAppOverridesApplied就是干这个的)。注意按应用/按鼠标的完整设置界面在 3.x 里还没有,菜单栏开关是目前的主要手段。
实现要点:双进程、双指数平滑与驱动层加速 📝
两个进程分工。主应用是设置界面,真正拦截鼠标事件的是 Mac Mouse Fix Helper 这个后台进程——所以关掉主窗口、重启电脑,功能都还在。两者用 MessagePort 通信(Shared/MessagePort/),Helper 的启停由 launchd 管理(Shared/HelperServices/)。对你来说的实际意义:这个应用不需要常驻窗口,也不容易因为误关主界面而失效。
滚动引擎。滚轮输入先经 Helper/Core/Smoothing/DoubleExponentialSmoother.swift 里的双指数平滑:状态是平滑值 L 和趋势 T,a控制多信当前输入、y控制多信既有趋势,之后再由 Bezier 曲线和一段拖拽物理产生减速段,最后输出模拟的滚动事件。开 trackpadSimulation 时会以 gesture scroll + momentum scroll 事件发送,让应用把它当成触控板输入。
指针加速直接写给驱动。项目不满足于在事件层重新加速,而是把自定义加速度曲线直接写入 Apple HID 驱动(Helper/Core/PointerSpeed/),再按轮询率与 CPI 做补偿——高轮询率鼠标的原始位移天然偏小,不补偿的话加速曲线根本不会正常触发。
配置文件热重载。Shared/Config/default_config.plist 是模板;运行时配置在~/Library/Application Support/<bundle id>/config.plist,Helper 用 FSEvents 监听它,改完即生效,不用重启。Remaps为空时,按按钮数量自动套用defaultRemaps里的 threeButtons / fiveButtons 预设。每次修饰键组合 + 输入轴 + 显示器的变化都会生成独立的配置副本(带缓存),所以按住 Option 滚一轮再松开,行为是即时切换的。
常见卡点与参与方式
常见卡点
- 事件完全不生效:确认辅助功能权限已勾选,并重开 Helper(
HelperServices里有restartHelperWithDelay这类机制,应用内重启最稳妥)。 - 点击有延迟:配置了 Double Click 动作的按钮,系统要等你确认是否双击。删掉该按钮的双击动作即可消除。
- 部分按键识别不到:Logitech Options 这类私有驱动生态的鼠标走厂商私有协议而非标准 HID,部分按钮暂无法识别;Magic Mouse 目前不受影响(本项目对它无效)。
- 备份配置:拷贝
~/Library/Application Support/<bundle id>/config.plist即可。
参与方式
- 贡献代码(Objective-C 与 Swift 混写;核心逻辑在 Helper/Core/,界面在 App/UI/)
- 翻译(已支持 20+ 语言,见 Markdown/LocalizedDocuments/)
- 提交 issue 与反馈
- 购买支持(MMF 2 及以前永久免费,MMF 3 为 30 天免费后付费)
配置都留在本地,行为透明可改——这大概是最值得留它的一个理由。
【免费下载链接】mac-mouse-fixMac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad!项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考