我开发了一个更好用的Mac窗口管理器和应用栏:Open Contexts

我一直不太满意 macOS 原生的应用切换和 Dock 栏,尤其是某个应用开了多个窗口的情况下。

比如我开了两个浏览器窗口,这时候按下 ⌘ + Tab,列表里只有一个浏览器应用图标。切换后出来的是哪个窗口就无法保证了。

后来,我一直使用 Contexts。它会把所有应用窗口列出来,同时也提供了屏幕边缘的侧边栏,完美满足了我的需求。只是它长期没有新的版本更新,且 macOS 在更新 27 后明确表示后续 macOS 将不再支持运行 Contexts。于是我决定参考它的核心功能,自己重新做一个开源版本:OpenContexts。

想找的是具体窗口

macOS 原生 ⌘ + Tab 的逻辑是在已经打开的应用之间切换,这套逻辑只适用于每个应用只有一个窗口,如果很多应用有多个窗口,使用起来就很别扭。


当然 macOS 也提供了另一个快捷键:用 Command + 反引号 切换当前应用的窗口,或者打开 Mission Control 查看全部窗口。但使用起来总是有一点不顺畅。

Dock 栏也有类似的问题。也是以应用为主,不会显示应用当前的全部窗口。并且 Dock 栏还有个问题,当某些应用关闭了最后一个窗口时,应用图标依然在 Dock 栏,不会消失,必须退出应用,图标才会消失,比如文本编辑器、预览等应用。


所以我希望能有个单独不占屏幕空间的应用栏,能像 Windows 任务栏一样显示所有打开的应用窗口,并且在切换操作时同样能在所有应用窗口中切换。

从 Contexts 到 OpenContexts

我之前用的 Contexts 在功能性上已经满足我的需求了。它的 Command + Tab 切换器会分别列出窗口,侧边栏也能直接点击窗口,此外还支持窗口搜索和触控板切换手势。


但是 Contexts 有个很大的问题,就是不再维护更新了。到目前为止它的公开更新记录仍停留在 2022 年 8 月的 3.9.0。并且我在更新 macOS 27 后运行 Contexts 时,系统已经提示下一个 macOS 版本将不再支持运行 Contexts。

这就是我开始做 OpenContexts 的原因。我想保留自己一直在用的窗口切换和侧边栏体验的同时,自己维护代码和功能,后续有问题可以自己修,也能分享给有同样需求的用户。

OpenContexts 参考了 Contexts 的使用方式,重新实现了窗口切换器和应用栏,并加入可保存的自定义窗口分组。

让 ⌘ + Tab 选择窗口而不是应用

OpenContexts 默认接管 ⌘ + Tab,把单个窗口列在切换器里,显示应用名称、图标和窗口标题。同一个应用的多个窗口会分别出现,并按最近使用顺序排列。


默认触发快捷键和系统的保持一致:按住 ⌘,继续按 Tab 选择,松开 ⌘ 后激活选中的窗口。也可以用方向键选择,用 Shift + Tab 反向切换,按 Esc 取消。

如果只想在当前应用的窗口之间切换,默认快捷键是 Command + 反引号。这两个快捷键都可以在设置里修改,修改后立即生效,重启也会保留。

在屏幕边缘的应用栏

OpenContexts 的应用栏可以放在屏幕左侧、右侧或底部。每个条目对应一个窗口,点击就会唤起窗口。


可以让应用栏始终显示,也可以设成自动隐藏,鼠标移到屏幕边缘时再唤出。显示内容也能选择只保留图标,或者同时显示图标和窗口标题。


当应用栏在底部时,底部栏空间不足时,会平均缩小各个条目,把窗口放在同一行,类似 Windows 的任务栏样式。

按任务整理窗口,并保留分组

有时候某些窗口是有关联性的,所以 OpenContexts 支持自定义窗口分组。比如建一个“代码”组,把相关的编辑器、终端和文档窗口放在一起;再建一个“交流”组,放聊天窗口。分组可以包含不同应用的窗口。这样分好组后,有时候懒得切换窗口,可以在侧边应用栏直接盲点窗口。

点击应用栏中的 + 就能新建分组,拖动窗口调整顺序。右键窗口选择“固定”,可以保留它在分组中的位置。

重启 OpenContexts 后,分组名称和顺序会恢复。能够匹配的窗口,也会恢复到相应的分组和列表位置。

现在能做到什么,以及怎么试用

OpenContexts 目前免费,无需账户或订阅,采用 Apache License 2.0 开源。它使用 Swift、AppKit 和 SwiftUI 构建,提供 Universal 安装包。

它还没有覆盖 Contexts 的全部功能。窗口搜索和触控板切换手势目前尚未支持。

如果你经常同时打开多个窗口,想直接按标题切换,或者希望按任务整理屏幕边缘的窗口列表,可以试试 OpenContexts。

应用运行后常驻菜单栏,可以从菜单栏打开设置、检查更新或退出。系统要求为 macOS 13 及以上。

如果你也有相似的需求,欢迎试用,遇到任何问题,或者任何建议,欢迎在 GitHub 反馈。最后感谢你的阅读。