【免费下载链接】SwiftShift
Sweet window management for macOS
SwiftShift 是一款 macOS 窗口管理工具,按住快捷键拖动鼠标即可移动(Move)或调整窗口大小(Resize)。它的快捷键自定义支持三种触发方式:纯修饰键组合(如 ⌃⇧)、fn 键组合(如 fn F1)、鼠标左右键组合(Left/Right/双键和弦)。本文带你从零配出顺手的一套方案。
三种触发方式一览
SwiftShift 有两个核心动作:**Move(移动窗口)**和Resize(调整窗口大小)。每个动作都同时提供两条独立触发器,可同时启用,但至少要保留一种:
| 触发器 | 可选项 | 典型用法 |
|---|---|---|
| ⌨️ Keyboard | 纯修饰键、修饰键+字母键、fn 组合、F1–F20 | 按住组合键拖动鼠标 |
| 🖱️ Mouse | Left / Right / 双键和弦(Both) | 按住快捷键后点击按钮拖窗 |
所有配置都位于应用主窗口的 Settings 页,修改即时保存生效,无需重启。
纯修饰键快捷键:只按 ⌃⇧ 就能拖窗
纯修饰键(modifier-only)指不搭配任何字母键的组合,例如⌃⇧、⌥⌘、⌃⌥⇧。SwiftShift 支持 ⌘⌥⇧⌃fn 五种修饰键的任意组合,定义见 ShortcutsManager.swift:
- 打开 Settings,在 Move 或 Resize 卡片中点击Keyboard行的记录框(显示 "Record Shortcut")。
- 直接按下修饰键组合(不按字母键)——松手瞬间即自动保存,按钮上显示对应符号,如
⌃⇧。 - 使用方式:按住该组合并移动鼠标即可拖窗,松开修饰键结束;期间按到任何其他普通按键会立即取消拖拽。
这种配置尤其适合重度触控板手势用户——全程不碰普通字母键。在源码里,纯修饰键对应keyCode为空的KeyboardShortcut(ShortcutsManager.swift),由专门的修饰键状态监听触发(addGlobalMonitors),与"修饰键+字母键"的普通热键走不同路径。
💡 注意:
⌘⌥、⌃⇧等纯修饰键组合可能与浏览器等应用手势冲突,建议优先使用含⌃或fn的组合。
fn 键快捷键:系统预留键的特殊配置方法
macOS 把 fn 键保留给功能键切换和表情面板,它无法参与传统全局热键注册。因此 SwiftShift 对含 fn 的组合改走事件监听来识别(ShortcutsManager.swift)。
配置步骤:
- 点击记录框后,按下 fn 再按其他键,例如
fn F1、fn ⇧←,录制成功。 - 系统检测到 fn 快捷键后,会在设置页顶部显示一条黄色警告:建议在「系统设置 → 键盘」中关闭 fn 键的"显示表情符号与字符"默认行为,否则 fn 组合可能被系统截走。警告框内直接提供Open Keyboard Settings跳转按钮,实现见 ShortcutFnWarningView。
- 关闭警告后,只要快捷键中仍含 fn 就会再次提示;删掉 fn 组合则自动复位。
F 功能键的例外规则:F1–F20 可以单独作为快捷键(不加任何修饰键);而普通字母数字键必须搭配至少一个修饰键,否则录制时只听到"哔"声提示无效(见 ShortcutView.swift)。
⚠️ 录制小技巧:在记录框中按
Esc取消本次录制,按Delete清空已保存的快捷键(ShortcutView.swift)。
鼠标按钮组合:Left、Right 与双键和弦
每个动作的Mouse行有两个独立开关按钮Left / Right:
- 与键盘触发器配合:按住快捷键后,用指定按钮按下即开始拖窗,松开鼠标按钮结束;按住期间若快捷键被松开,也会自动停止追踪。
- 同时勾选 Left + Right:左键或右键任一按下都触发,容错性更好。
- 仅 Mouse 触发(关闭 Keyboard 开关):必须同时按住左右两个按钮(双键和弦)才开始操作,系统会强制保存为
Both,避免与日常点击、拖选冲突。
鼠标事件拦截由内置的 CGEventSupervisor 包完成。配置数据模型(mouseButton/keyboardEnabled/mouseEnabled)见 UserShortcut,按钮选项枚举见 MouseButton。
触发器共存规则(重点)
- Keyboard 与 Mouse 可同时启用,但每个动作至少保留一种触发器。
- 系统不允许Move 和 Resize 同时使用 Mouse-only 触发器,会提示 "You cannot use the same trigger for both actions"(ShortcutView.swift)。
- 所有改动即时写入系统偏好(UserDefaults),以
Move/Resize为前缀分别存储(ShortcutsManager.swift)。
常见问题排查
| 现象 | 原因与解决 |
|---|---|
| 快捷键完全不生效 | 缺少辅助功能(Accessibility)权限,按设置页引导授权 |
| 休眠唤醒后失灵 | 系统会静默禁用事件监听;SwiftShift 会在唤醒、屏幕参数变化时自动重建(rebuildAllInputHooks),也可退出重进 |
| 按住修饰键后误按了字母键 | 设计行为:立即取消本次拖拽,重新按住组合键即可 |
| fn 组合偶尔被系统截走 | 按黄色警告提示,到「系统设置 → 键盘」关闭 fn 默认行为 |
| 切换虚拟桌面后拖拽中断 | 切换桌面会主动中止进行中的移动/调整,属预期行为(handleSpaceChange) |
推荐配置方案
- 日常(触控板党):Move =
⌃⇧按住拖移 + Left 鼠标触发;Resize =⌃⌥按住调大小 + Left。 - 键盘党:Move =
⌘⇧←/→类方向键组合,全程不碰鼠标。 - fn 党:先在系统设置关闭 fn 默认行为,再用
fn F1(Move)、fn F2(Resize)。
以上组合均可在 Settings 的 Move / Resize 卡片中即时配置生效。更多行为开关(开机启动、聚焦窗口、四象限缩放等)见 Preferences.swift 中的偏好项定义,窗口移动的具体逻辑见 WindowManager.swift。
🎉 配好后,SwiftShift 的快捷键就能完全贴合你的手势习惯了——记住核心心法:纯修饰键要"按住不松",fn 键要先关系统默认行为,鼠标双键和弦只给 Mouse-only 模式用。
【免费下载链接】SwiftShift
Sweet window management for macOS
相关推荐
TADS-Boilerplate Ansible角色详解:如何编写可复用的Docker Swarm服务模板
TADS Boilerplate Ansible角色详解:如何编写可复用的Docker Swarm服务模板 TADS Boilerplate是一个集成Terra
WezTerm 配置:用 wezterm.permute_any_mods 批量生成所有修饰键组合的键位与鼠标绑定
WezTerm 配置:用 wezterm.permute_any_mods 批量生成所有修饰键组合的键位与鼠标绑定 wezterm.permute_any_mo
桌面应用跨平台Mac Mouse Fix高级配置:自定义按钮映射与快捷键设置
Mac Mouse Fix高级配置:自定义按钮映射与快捷键设置 引言:释放鼠标潜能 你是否曾因鼠标按钮功能单一而困扰?在macOS系统中,原生鼠标设置往往无法满
桌面应用系统编程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考