AeroSpace 测试版 
AeroSpace 是一款类 i3 的 macOS 平铺式窗口管理器
视频:
文档:
主要特性
- 基于树范式的平铺式窗口管理器
- 受 i3 启发
- 快速的工作区切换,无动画,且无需禁用 SIP
- AeroSpace 采用其自有的虚拟工作区模拟,而非依赖原生 macOS Spaces,因为后者存在显著的局限性
- 纯文本配置(对 dotfiles 友好)。参见:default-config.toml
- 以 CLI 为先(包含 manpages 和 shell 补全)
- 无需禁用 SIP(System Integrity Protection)
- 正确的多显示器支持(类 i3 范式)
安装
通过 Homebrew 安装以获取自动更新(推荐)
brew install --cask nikitabobko/tap/aerospace
在多显示器设置中,请确保显示器已正确排列。
其他安装选项:https://nikitabobko.github.io/AeroSpace/guide#installation
[!NOTE] 使用 AeroSpace,即表示您确认它未经过公证。
公证是 Apple 的一项“安全”功能。 您将二进制文件发送给 Apple,由他们决定是否批准。 实际上,公证关乎按照 Apple 喜欢的方式构建二进制文件。
我本人并不反对公证这一概念。 我特别不喜欢 Apple 执行公证的方式。 我没有时间去应付 Apple。
Homebrew 安装脚本 已配置为 自动删除
com.apple.quarantine属性,因此该应用应开箱即用,无需任何 “Apple 无法检查 AeroSpace 是否包含恶意软件”的警告
社区、讨论、问题
AeroSpace 项目不直接接受 Issues - 我们要求您先创建一个Discussion。 请阅读 CONTRIBUTING.md 以获取更多详细信息。
社区讨论在 GitHub Discussions 上进行。 在那里,您可以讨论 bug、提出新功能、提问、展示您的设置,或者只是闲聊。
共有 7 个频道:
- #all. RSS. 包含所有讨论的 Feed。
- #announcements. RSS. 仅维护者可以在此发布。 高度审核的流量。
- #announcements-releases. RSS. 关于非补丁版本发布的公告。 仅维护者可以在此发布。
- #feature-ideas. RSS.
- #general. RSS.
- #potential-bugs. RSS. 如果您认为遇到了 bug,可以在此讨论您的 bug。
- #questions-and-answers. RSS. 欢迎所有人提问。 鼓励所有人回答他人的问题。
项目状态
公开测试版。AeroSpace 可以作为日常驱动使用,但在达到 1.0 之前,请预期会有破坏性变更。
阻碍我们发布 1.0 版本的因素:
- https://github.com/nikitabobko/AeroSpace/issues/131 性能。实现每应用一线程,以规避 macOS 阻塞 AX API。
- https://github.com/nikitabobko/AeroSpace/issues/1215 大规模重构。将可变的双向链表核心树数据结构重写为不可变的单向持久树。
重要性:稳定性和潜在性能
- https://github.com/nikitabobko/AeroSpace/issues/1216 大规模重构将帮助我们修复窗口可能随机跳转到聚焦工作区的稳定性问题
- https://github.com/nikitabobko/AeroSpace/issues/68 大规模重构将帮助我们支持 macOS 原生标签页
- https://github.com/nikitabobko/AeroSpace/issues/278 实现类 shell 组合器。
忽略该 issue 中大量的疯狂争论,
我们很可能采用最小化方案,仅引入常见的 shell 组合器:
||、&&、;和eval命令,以一次性发送多个命令。 - https://github.com/nikitabobko/AeroSpace/issues/1012 调查使用
CGEvent.tapCreateAPI 实现全局热键的可能性- https://github.com/nikitabobko/AeroSpace/issues/28 也许这将允许区分左右修饰键。也许不行
将在 1.0 版本发布后处理的重要且重大的问题:
- https://github.com/nikitabobko/AeroSpace/issues/2 粘性窗口
- https://github.com/nikitabobko/AeroSpace/issues/260 动态 TWM
开发
有关如何设置项目、构建项目、如何运行测试等的说明,可在此处找到:dev-docs/development.md
项目价值观
价值观
- AeroSpace 面向高级用户和开发者
- 以键盘为中心
- 尽可能避免破坏性变更(配置文件、CLI、行为),但绝不能让软件停滞不前。 因此,破坏性变更可能会发生,但会经过慎重考虑并提供有用的提示信息。 Semver 在发生破坏性变更时,主版本号会递增(一旦 AeroSpace 达到 1.0 版本,这一点将得到保证,在此之前破坏性变更可能会随时发生)
- 除非必要,AeroSpace 不使用 GUI
- AeroSpace 永远不会提供用于配置的 GUI。 对于高级用户来说,在文本编辑器中编辑配置文件比在 GUI 中导航复选框更容易。
- 状态栏菜单图标是可以接受的,因为需要视觉反馈
- 提供_实用_的功能。花哨的外观功能并不_实用_(例如窗口边框、透明度、动画等)
- 尽可能避免“黑魔法”(即“私有 API”、“代码注入”等)
- 目前,AeroSpace 仅使用一个私有 API 来获取辅助功能对象的窗口 ID
_AXUIElementGetWindow。 其他所有内容均使用 macOS 公开辅助功能 API。 - AeroSpace 永远不会要求你禁用 SIP(系统完整性保护)。
- 目标是让 AeroSpace 易于维护,并能抵御 macOS 更新。
- 目前,AeroSpace 仅使用一个私有 API 来获取辅助功能对象的窗口 ID
非目标
- 与现有的 macOS 功能良好兼容。 如果施加了限制,AeroSpace 将无法与现有的 macOS 功能良好兼容 (例如,AeroSpace 不承认 macOS Spaces 的存在,并且它使用 自己的工作区模拟)
- 美化(Ricing)。 AeroSpace 仅提供非常有限的美化支持 - 间隙以及用于与状态栏集成的几个回调。 当前的维护者不关心美化。 美化问题不是优先事项,并且大多被忽略。 美化立场只有在出现更多维护者时才会改变。
macOS 兼容性表
- AeroSpace 二进制文件运行于:macOS 13+
- 从源码构建的 AeroSpace 调试版本支持:macOS 14+
- 从源码构建的 AeroSpace 发布版本支持:macOS 15+(需要 Xcode 26+)
赞助
AeroSpace 是在我的空闲时间开发和维护的。 如果你觉得它有用,考虑赞助。
拥有写入权限的人员
按字母顺序排列:
今日提示
defaults write -g NSWindowShouldDragOnGesture -bool true
现在,你可以通过按住 ctrl+cmd 并拖动窗口的任意部分(不一定是窗口标题)来移动窗口
来源:reddit
相关项目
- Amethyst - 类似 xmonad 的平铺式窗口管理器
- InstantSpaceSwitcher - 通过合成具有极高速度的人为触控板手势来即时切换空间
- yabai - 基于二叉空间分割的 macOS 平铺式窗口管理器