AeroSpace 全面解析:macOS 上的 i3 风格平铺窗口管理器

发布时间:2026/9/12 3:18:02
AeroSpace 全面解析:macOS 上的 i3 风格平铺窗口管理器 AeroSpace 全面解析macOS 上的 i3 风格平铺窗口管理器【免费下载链接】AeroSpaceAeroSpace is an i3-like tiling window manager for macOS项目地址: https://gitcode.com/GitHub_Trending/ae/AeroSpaceAeroSpace 是一款面向 macOS 的 i3 风格平铺窗口管理器Tiling Window Manager采用基于树的平铺范式tree paradigm以纯文本 TOML 配置、CLI 优先设计、无需禁用 SIP 为核心理念并通过自研的虚拟工作区workspaces模拟机制替代原生 macOS Spaces。本文以仓库 README.md 为主线结合 default-config.toml 与各模块源码系统讲解 AeroSpace 的核心特性、安装方式、配置体系、命令系统、架构设计与项目状态读者读完后可独立完成安装、配置与日常使用并理解其底层实现原理。项目定位为什么选择 AeroSpaceAeroSpace 在 README 中给出的定义简洁明确i3-like tiling window manager for macOS。它面向高级用户与开发者设计上刻意与 macOS 原生窗口管理生态保持距离其核心定位可概括为基于树形范式的平铺管理窗口被组织进一棵树状结构中这与 i3 的容器container思想一脉相承i3 启发无论是默认按键绑定alth/j/k/l方向键、altenter开终端等还是工作区workspace概念都能看到 i3 的影子键盘中心一切操作尽量通过键盘完成鼠标仅作为补充CLI 优先提供完整的命令行工具man page 与 shell completion 均已包含便于脚本化与自动化。关键特性清单README 的 Key features 一节给出了 AeroSpace 的核心卖点基于树范式的平铺窗口管理器i3 启发的设计风格快速的工作区切换无动画、无需禁用 SIPSystem Integrity Protection自研虚拟工作区模拟不使用原生 macOS Spaces因为其存在相当多的限制纯文本配置对 dotfiles 友好默认配置见 default-config.tomlCLI 优先manpage 与 shell completion 均已包含无需禁用 SIP完善的多显示器支持i3 范式详见 guide.adoc 多显示器章节。项目价值观Project ValuesAeroSpace 明确声明了自己的设计哲学理解这些价值观有助于判断它是否适合你的工作流秉持的价值观面向高级用户和开发者键盘中心keyboard centric尽可能避免破坏性变更配置文件、CLI、行为但也不允许软件因此停滞——在到达 1.0 版本后破坏性变更会通过 Semver 主版本号递增来保证除非必要不使用 GUI。永远不提供 GUI 配置界面——对高级用户来说用文本编辑器修改配置文件比在 GUI 里点复选框更高效状态栏图标除外因为需要视觉反馈提供实用的功能。花哨的外观特性窗口边框、透明度、动画等被视为不实用尽可能避免黑魔法私有 API、代码注入等。目前 AeroSpace 仅使用一个私有 API_AXUIElementGetWindow来获取辅助功能对象的窗口 ID其余全部基于 macOS 公共辅助功能 API永远不会要求你禁用 SIP目标是让 AeroSpace 易于维护且能抵御 macOS 更新带来的破坏。明确的非价值观Non Values不与现有 macOS 功能友好共存如果存在限制AeroSpace 不会迁就 macOS 原生特性。典型例子是它不承认 macOS Spaces 的存在而是使用自己的工作区模拟机制Ricing外观定制只提供非常有限的 ricing 支持——gaps间隙和少量用于对接状态栏bar的回调。维护者明确表示不关心 ricing相关的 issue 大多被忽略除非出现更多维护者否则立场不会改变。安装与运行环境推荐安装方式HomebrewREADME 推荐的安装方式是 Homebrew可获得自动更新brew install --cask nikitabobko/tap/aerospace多显示器环境下安装前请确保显示器在系统设置中正确排列。其他安装方式如源码构建、直接下载 release 等参见 guide.adoc 安装章节。关于 Notarization公证的重要说明README 特别提醒AeroSpace 未经过 Apple 的 Notarization公证。作者对 Apple 的公证机制持保留态度——他认为公证本质是按 Apple 喜欢的方式构建二进制而他没时间处理 Apple 的流程。但这里有一个关键细节Homebrew 安装脚本被配置为自动删除com.apple.quarantine隔离属性因此通过 Homebrew 安装后应用开箱即用不会出现Apple 无法检查 AeroSpace 是否存在恶意软件的警告。手动下载安装的用户则需要自行处理 Gatekeeper 的拦截。兼容性矩阵README 的 macOS compatibility table 给出了明确的版本支持范围场景支持的最低 macOS 版本AeroSpace 二进制release 分发macOS 13从源码构建的 debug 版本macOS 14从源码构建的 release 版本macOS 15需要 Xcode 26注意以上为 README 声明的官方支持矩阵在仓库中体现为 Package.swift 中的平台声明与构建配置实际以各 release 的发布说明为准。一个实用技巧Tip of the dayREADME 末尾提供了一个开箱即用的 macOS 技巧只需在终端执行defaults write -g NSWindowShouldDragOnGesture -bool true执行后可以按住ctrlcmd并拖动窗口任意部分不限于标题栏来移动窗口。这是 AeroSpace 强烈键盘中心理念的补充在平铺窗口管理器中拖动窗口的常见场景依然可以通过手势优雅解决。配置文件体系纯文本 TOML 配置AeroSpace 的配置是纯文本 TOML 文件默认位置为~/.aerospace.toml也支持${XDG_CONFIG_HOME}/aerospace/aerospace.toml。仓库在 docs/config-examples/default-config.toml 提供了完整可用的默认配置以下按模块展开讲解。config-version兼容性与弃用机制config-version 2config-version用于配置格式的兼容性与弃用处理默认值省略该键时为1。当 AeroSpace 引入新的配置选项并需要旧版兼容逻辑时通过该字段控制行为。例如persistent-workspaces这个配置项仅在config-version 2及以上才可用。如果你从旧配置迁移需要了解对应版本的升级说明见 guide.adoc 的 config-version 章节。启动与生命周期配置# 在 AeroSpace 启动后运行的命令列表 # 可用命令见docs/commands.adoc after-startup-command [] # 登录时自动启动 AeroSpace start-at-login false # 配置文件保存后自动重新加载 # 设为 true 后需要先手动 reload 一次以启动自动重载 auto-reload-config false这三个选项对应 initAppBundle.swift 的启动流程应用启动后会先加载配置bootstrapConfig_nonCancellable随后startUnixSocketServer()开启 UNIX socket 服务端、初始化全局观察者GlobalObserver最后执行config.afterStartupCommand.run(.defaultEnv, .emptyStdin)——即after-startup-command里的命令在启动完成的 light session 中执行。树结构规范化Normalizations# 规范化见 docs/guide.adoc#normalization enable-normalization-flatten-containers true enable-normalization-opposite-orientation-for-nested-containers true这两个开关控制树结构的自动修正逻辑flatten-containers将冗余的嵌套容器展平避免出现容器套容器但没有实际分隔意义的退化结构对应 normalizeContainers.swift 中的实现opposite-orientation-for-nested-containers保证嵌套容器的方向与父容器相反避免出现连续同向嵌套。从 TilingContainer.swift 的实现可以看到changeOrientation在开启该选项时会沿parentsWithSelf链将每一层方向交替翻转。布局tiles 与 accordion# accordion-padding 指定手风琴布局的内边距大小设为 0 可禁用 accordion-padding 30 # 根容器默认布局tiles|accordion default-root-container-layout tiles # 根容器默认方向horizontal|vertical|auto # auto 表示宽屏宽大于高→ horizontal高屏高大于宽→ vertical default-root-container-orientation autoAeroSpace 只有两种布局对应源码 TilingContainer.swift 中的enum Layout: String { case tiles; case accordion }tiles平铺窗口以瓦片方式并排填充无重叠accordion手风琴所有窗口堆叠在同一区域聚焦的窗口占据主要空间其余窗口以accordion-padding大小的边缘露出。启动时还会执行smartLayoutAtStartup()见 initAppBundle.swift根容器子节点数 ≤ 3 时用 tiles否则用 accordion——这是为窗口数量较多的工作区准备的默认行为。鼠标跟随聚焦与隐藏应用处理# 聚焦的显示器变化时鼠标跟随 # 默认值省略时on-focused-monitor-changed [] on-focused-monitor-changed [move-mouse monitor-lazy-center] # 切换此开关可有效关闭 macOS 的 Hide application (cmd-h) # 防止误触 cmd-h / cmd-alt-h automatically-unhide-macos-hidden-apps falseon-focused-monitor-changed是回调型配置指向move-mouse命令见 commands.adoc 的 move-mouse 章节。move-mouse monitor-lazy-center表示聚焦的显示器切换后鼠标移动到该显示器中心lazy 模式。回调机制的实现在 CmdEnv.swift 与相关命令执行路径中这类配置即命令的模式贯穿整个 AeroSpace 配置体系。persistent-workspaces常驻工作区# 即使没有窗口、不可见也保持存活的工作区列表 # 仅 config-version 2 起可用 # 默认值省略时persistent-workspaces [] persistent-workspaces [1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, G, I, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z]工作区在 AeroSpace 中由 Workspace.swift 管理非 persistent 的空工作区会被garbageCollectUnusedWorkspaces()回收。通过persistent-workspaces可以强制某些工作区常驻内存比如为状态栏脚本保留固定编号源码中Workspace.garbageCollectUnusedWorkspaces()会先get(byName:)缓存所有 persistent 工作区再过滤掉非 persistent 且空且不可见且非当前聚焦的工作区。模式切换回调# 每次 binding 模式切换时运行的回调 # 见 docs/guide.adoc#binding-modes 与 docs/commands.adoc#mode on-mode-changed []binding 模式binding modes是 i3 风格的多层按键映射机制main模式必须始终存在其他模式如默认配置里的service通过mode命令进入/退出。on-mode-changed允许在模式切换时触发任意命令例如同步状态栏的显示。键盘映射与鼠标跟随focus-follows-mouse.enabled false # 键盘布局预设qwerty|dvorak|colemak key-mapping.preset qwertykey-mapping.preset用于将按键名映射到实际物理键位见 parseKeyMapping.swift 与 keysMap.swiftdvorak/colemak 用户无需修改配置中的按键名即可适配。focus-follows-mouse的实现在 focusFollowsMouse.swift。Gaps窗口间隙# 窗口之间的间隙inner-*与显示器边缘的间隙outer-* # 可选值 # - 常量 gaps.outer.top 8 # - 按显示器gaps.outer.top [{ monitor.main 16 }, { monitor.some-pattern 32 }, 24] # 示例中 24 是未匹配时的默认值显示器模式语法与 workspace-to-monitor-force-assignment 相同 gaps.inner.horizontal 0 gaps.inner.vertical 0 gaps.outer.left 0 gaps.outer.bottom 0 gaps.outer.top 0 gaps.outer.right 0gaps 是 AeroSpace 对 ricing 提供的非常有限的支持之一。支持常量和按显示器匹配两种形式后者通过monitor.main/ 显示器名称模式pattern指定不同显示器的间隙解析逻辑见 parseGaps.swift。inner 间隙作用于窗口之间outer 间隙作用于工作区边缘与显示器边缘之间。按键绑定与模式Binding Modes按键绑定定义在[mode.main.binding]下语法为修饰键-按键 命令支持将多条命令写成数组形式如esc [reload-config, mode main]。完整的默认绑定如下这也是 AeroSpace 开箱即用的操作手册[mode.main.binding] # 所有可用按键 # - 字母 a, b, c, ..., z # - 数字 0, 1, 2, ..., 9 # - 小键盘 keypad0, keypad1, ..., keypad9 # - 功能键 f1, f2, ..., f20 # - 特殊键 minus, equal, period, comma, slash, backslash, quote, semicolon, # backtick, leftSquareBracket, rightSquareBracket, space, enter, esc, # backspace, tab, pageUp, pageDown, home, end, forwardDelete, # sectionSign仅 ISO/欧式键盘 # - 小键盘特殊键keypadClear, keypadDecimalMark, keypadDivide, keypadEnter, keypadEqual, # keypadMinus, keypadMultiply, keypadPlus # - 方向键 left, down, up, right # 所有可用修饰键cmd, alt, ctrl, shift # 打开终端i3 风格默认注释掉 # alt-enter exec-and-forget osascript -e \ # tell application Terminal to tell (do script) to activate # 布局切换 alt-slash layout tiles horizontal vertical alt-comma layout accordion horizontal vertical # 方向聚焦 alt-h focus left alt-j focus down alt-k focus up alt-l focus right # 方向移动 alt-shift-h move left alt-shift-j move down alt-shift-k move up alt-shift-l move right # 调整尺寸 alt-minus resize smart -50 alt-equal resize smart 50 # 切换到工作区 alt-1 workspace 1 alt-2 workspace 2 alt-3 workspace 3 alt-4 workspace 4 alt-5 workspace 5 alt-6 workspace 6 alt-7 workspace 7 alt-8 workspace 8 alt-9 workspace 9 alt-a workspace A # 不需要的绑定可自行删除 alt-b workspace B alt-c workspace C alt-d workspace D alt-e workspace E alt-f workspace F alt-g workspace G alt-i workspace I alt-m workspace M alt-n workspace N alt-o workspace O alt-p workspace P alt-q workspace Q alt-r workspace R alt-s workspace S alt-t workspace T alt-u workspace U alt-v workspace V alt-w workspace W alt-x workspace X alt-y workspace Y alt-z workspace Z # 把当前窗口移动到工作区 alt-shift-1 move-node-to-workspace 1 alt-shift-2 move-node-to-workspace 2 alt-shift-3 move-node-to-workspace 3 alt-shift-4 move-node-to-workspace 4 alt-shift-5 move-node-to-workspace 5 alt-shift-6 move-node-to-workspace 6 alt-shift-7 move-node-to-workspace 7 alt-shift-8 move-node-to-workspace 8 alt-shift-9 move-node-to-workspace 9 alt-shift-a move-node-to-workspace A alt-shift-b move-node-to-workspace B alt-shift-c move-node-to-workspace C alt-shift-d move-node-to-workspace D alt-shift-e move-node-to-workspace E alt-shift-f move-node-to-workspace F alt-shift-g move-node-to-workspace G alt-shift-i move-node-to-workspace I alt-shift-m move-node-to-workspace M alt-shift-n move-node-to-workspace N alt-shift-o move-node-to-workspace O alt-shift-p move-node-to-workspace P alt-shift-q move-node-to-workspace Q alt-shift-r move-node-to-workspace R alt-shift-s move-node-to-workspace S alt-shift-t move-node-to-workspace T alt-shift-u move-node-to-workspace U alt-shift-v move-node-to-workspace V alt-shift-w move-node-to-workspace W alt-shift-x move-node-to-workspace X alt-shift-y move-node-to-workspace Y alt-shift-z move-node-to-workspace Z # 在最近两个工作区之间来回切换 alt-tab workspace-back-and-forth # 把工作区移动到下一个显示器 alt-shift-tab move-workspace-to-monitor --wrap-around next # 进入 service 模式 alt-shift-semicolon mode service值得注意的几个设计点命令即配置值每个绑定的值都是完整的 AeroSpace 命令字符串配置系统内部通过 parseCommand.swift 将字符串解析为可执行命令对象数组形式执行多条命令service模式的绑定使用数组命令按顺序执行这比 shell 组合符更直白[mode.service.binding] esc [reload-config, mode main] r [flatten-workspace-tree, mode main] # 重置布局 f [layout floating tiling, mode main] # 浮动/平铺切换 backspace [close-all-windows-but-current, mode main] # sticky 尚未支持https://github.com/nikitabobko/AeroSpace/issues/2 #s [layout sticky tiling, mode main] alt-shift-h [join-with left, mode main] alt-shift-j [join-with down, mode main] alt-shift-k [join-with up, mode main] alt-shift-l [join-with right, mode main]引号包裹的脚本命令exec-and-forget支持多行字符串...直接嵌入 shell 脚本示例中的 osascript 单行脚本即通过Process以/bin/bash -c执行见 ExecAndForgetCommand.swift。命令系统与 CLI 架构AeroSpace 是典型的client/server 架构详见 architecture.md 与 clientServer.swiftAeroSpace.app是服务端server负责窗口管理、树结构维护、配置解析与命令执行aerospaceCLI 二进制是客户端client两者通过预定义的UNIX socket通信并使用SOCKET_PROTOCOL_VERSION做协议版本协商。每次执行 CLI 命令的完整流程见 architecture.md客户端解析命令行参数若有-h/--help则显示帮助解析失败则直接报错解析成功后参数ClientRequest包含args、stdin、windowId、workspace通过 socket 发送给服务端服务端再次解析参数并执行命令服务端返回ServerAnswer含exitCode、stdout、stderr、serverVersionAndHash客户端输出 stdout/stderr并以服务端返回的退出码结束进程。ClientRequest中的windowId与workspace是双重可选Double Optional用于区分未提供与显式提供 null分别对应环境变量AEROSPACE_WINDOW_ID与AEROSPACE_WORKSPACE的转发见 AeroSpaceEnvVars.swift。这意味着 CLI 命令天然支持通过环境变量指定上下文如脚本中针对特定窗口执行命令。命令的解析与分发命令字符串的解析链路为parseCommand→lexAndParseShell()shell 词法/语法解析见 shellLexer.swift 与 shellParser.swift→parseCmdArgs→toCommand()。其中 cmdManifest.swift 集中定义了命令类型到实现类的映射例如focus→FocusCommandFocusCommand.swiftmove→MoveCommandMoveCommand.swiftresize→ResizeCommandResizeCommand.swiftexec-and-forget→ExecAndForgetCommandExecAndForgetCommand.swifteval→EvalCommand且嵌套 eval 被禁止parseCommand中显式检查case .cmd(_ as EvalCommand) where !allowEval。命令实现统一遵循 Command.swift 中的Command协议每个命令携带自己的CmdArgs、实现run(_ env: CmdIo:)并通过shouldResetClosedWindowsCache声明该命令是否会改变树结构改变树时需重置关闭窗口缓存涉及 closedWindowsCache.swift 的聚焦回退逻辑。核心机制树范式与虚拟工作区为什么不用 macOS SpacesREADME 明确解释AeroSpace 使用自己的虚拟工作区模拟emulation of virtual workspaces而不是依赖原生 macOS Spaces因为原生 Spaces 存在相当大的限制详细说明见 guide.adoc 的 emulation-of-virtual-workspaces 章节。这正是不与现有 macOS 功能友好共存价值观的直接体现——AeroSpace 不承认 Spaces 的存在从而绕开其限制获得快速、无动画、无需禁用 SIP的工作区切换体验。树形数据结构的源码实现窗口树的核心节点类型在 tree/ 目录下WorkspaceWorkspace.swift树的根节点按名称StringLogicalSegments逻辑分段排序Workspace.get(byName:)负责按需创建并缓存TilingContainerTilingContainer.swift非叶子节点持有orientation水平/垂直与layouttiles/accordionisRootContainer判断是否为根容器父节点是 WorkspaceWindow / MacWindowMacWindow.swift叶子节点代表一个真实的 macOS 窗口另有 FloatingWindowsContainer、MacosUnconventionalWindowsContainer 等特殊容器以及抽象基类 TreeNode.swift。窗口的实际布局计算由 layoutRecursive.swift 递归完成每次树变化后由 refresh.swift 触发刷新如runHeavyCompleteRefreshSession。工作区名称的合法规则工作区名称并非任意字符串WorkspaceName.swift 中的parse定义了硬性约束保留名称不可用focused、non-focused、visible、invisible、back-and-forth、next、prev、monitor、workspace、all、none、mouse、target等空名称被禁止不能包含逗号,不能以下划线_开头保留给未来使用不能以连字符-开头与 CLI 选项语法冲突不能包含任何空白字符。例如alt-1 workspace 1中的1与alt-a workspace A中的A都是合法名称而workspace -foo会因连字符规则被拒绝。多显示器支持README 将正确的多显示器支持i3 范式列为核心特性之一并在安装说明中特别提醒多显示器环境下请确保显示器正确排列。从源码看显示器与工作区的关联由 Monitor.swift、Workspace.swift 中的映射表screenPointToVisibleWorkspace等与workspace-to-monitor-force-assignment解析实现见 parseWorkspaceToMonitorAssignment.swift共同完成。相关命令包括move-node-to-monitor把窗口/节点移到指定显示器MoveNodeToMonitorCommand.swiftmove-workspace-to-monitor --wrap-around next把工作区整体移到下一个显示器默认绑定为alt-shift-tabMoveWorkspaceToMonitorCommand.swiftfocus-monitor聚焦到指定显示器FocusMonitorCommand.swift。命令速查常用操作一览AeroSpace 提供了 50 条命令完整列表见 docs/commands.adoc每条的详细文档为docs/aerospace-*.adoc按用途分类如下类别命令说明工作区workspace切换到指定工作区文档workspace-back-and-forth在最近两个工作区间切换文档move-node-to-workspace移动当前窗口到指定工作区文档move-workspace-to-monitor移动工作区到指定显示器文档聚焦focus按方向/条件聚焦left/down/up/right 等文档focus-back-and-forth在最近两个窗口间往返聚焦文档focus-monitor聚焦指定显示器文档移动与布局move按方向移动窗口文档resize调整窗口尺寸smart模式见 文档layout切换布局tiles/accordion/floating文档join-with把窗口并入相邻窗口的容器文档split切分容器文档balance-sizes平衡容器内窗口尺寸文档flatten-workspace-tree展平工作区树重置布局文档窗口操作close关闭窗口文档close-all-windows-but-current关闭除当前窗口外的所有窗口文档fullscreen全屏文档macos-native-fullscreenmacOS 原生全屏文档macos-native-minimizemacOS 原生最小化文档查询list-windows列出窗口文档list-workspaces列出工作区文档list-monitors列出显示器文档list-apps列出应用文档list-modes列出绑定模式文档list-exec-env-vars列出 exec 环境变量文档debug-windows调试窗口信息文档配置与系统reload-config重新加载配置文档mode切换绑定模式文档enable启用/禁用窗口管理文档exec-and-forget以非阻塞方式执行 shell 命令文档eval一次执行多条命令文档trigger-binding触发指定按键绑定文档echo输出文本文档move-mouse移动鼠标文档注意exec-and-forget是一个特殊命令它不是真正的命令——在解析阶段见 cmdManifest.swiftexec-and-forget分支会直接返回错误exec-and-forget is not a real command and its NOT allowed in the shell它只能在配置绑定的顶层出现parseCommand.swift 中allowExecAndForget参数控制不能嵌套在 eval 或管道中。环境变量AeroSpace 定义了一系列环境变量供脚本与回调使用详见 AeroSpaceEnvVars.swift核心包括AEROSPACE_WINDOW_ID当前聚焦窗口 IDCLI 请求时会作为windowId转发给服务端AEROSPACE_WORKSPACE当前聚焦工作区名称作为workspace转发。这些环境变量让exec-and-forget、回调如on-focused-monitor-changed等场景可以感知上下文实现在指定窗口/工作区上执行操作的脚本化逻辑。开发与测试项目结构AeroSpace 采用 SPMSwift Package Manager为主、Xcode 为辅的混合工程结构详见 architecture.mdSources/AppBundle/AeroSpace.app服务端本质上是一个暴露给 Xcode 启动器的 SPM librarySources/Cli/CLI 客户端纯 SPM 构建不涉及 XcodeSources/Common/服务端与客户端共享的代码主要是命令行参数解析与工具函数Sources/AppBundleTests/测试代码docs/站点与 man page 的 Asciidoc 文档源xcode/project.ymlXcode 工程模型骨架用于生成 xcode/AeroSpace.xcodeprojSPM 无法构建 macOS App Bundle故需要 Xcode 工程但尽可能将代码留在 SPM library 中。构建、测试与贡献开发说明见 dev-docs/development.md顶层提供一系列脚本format.sh格式化、lint.sh静态检查、swift-test.sh/test.sh测试、run-cli.sh运行 CLI、run-debug.sh调试运行、generate.sh生成工程等Issue 政策AeroSpace 不接受直接提交 Issue要求先在 GitHub Discussions 中发起 Discussionbug 请发到 #potential-bugs 频道详见 CONTRIBUTING.md。测试覆盖示例测试代码位于 Sources/AppBundleTests/覆盖命令、配置解析、shell 词法/语法、树结构与窗口检测等命令测试FocusCommandTest.swift、MoveCommandTest.swift、ResizeCommandTest.swift、WorkspaceCommandTest.swift等目录配置测试ConfigTest.swift、ParseEnvVariablesTest.swift目录Shell 解析ShellLexerTest.swift、ShellParserTest.swift、ShellRunTest.swift目录树结构测试TreeNodeTest.swift、OnWindowDetectedTest.swift目录。项目状态与路线图AeroSpace 当前处于Public Beta阶段可以当作日常主力使用但在 1.0 之前会有破坏性变更。阻止 1.0 发布的事项README 列出✅ 已完成性能优化——实现 thread-per-application 以绕开 macOS 阻塞 AX API 的问题issue #131✅ 已完成shell 风格组合符——引入||、、;以及eval命令支持一次发送多条命令issue #278⏳ 进行中大重构——将可变的双链表核心树数据结构重写为不可变单链表持久树issue #1215对稳定性与性能都至关重要有助于修复窗口可能随机跳到聚焦工作区的稳定性问题issue #1216有助于支持 macOS 原生标签页issue #68⏳ 调研中使用CGEvent.tapCreateAPI 实现全局热键issue #1012或许还能区分左右修饰键issue #28。1.0 之后的重要事项sticky windows粘性窗口issue #2Dynamic TWM动态平铺issue #260。相关项目与社区README 列出了同类与互补项目仅供横向了解AeroSpace 与它们的设计取向不同Amethystà la xmonad 风格的平铺窗口管理器InstantSpaceSwitcher通过合成高速度触控板手势实现即时 Space 切换yabai基于二进制空间划分BSP的 macOS 平铺窗口管理器。社区交流在 GitHub Discussions 进行共 7 个频道#all全部动态、#announcements维护者公告、#announcements-releases非补丁版本发布公告、#feature-ideas功能想法、#general综合讨论、#potential-bugs疑似 bug 讨论、#questions-and-answers问答。每个频道均提供 RSS 订阅源适合跟踪项目动态。结语AeroSpace 以 i3 的设计哲学为蓝本在 macOS 上走出了自己的道路不依赖原生 Spaces、不要求禁用 SIP、不提供 GUI 配置坚持树范式、纯文本配置、CLI 优先与键盘中心。从仓库源码可以看出其 tree 数据结构、client/server 架构、TOML 配置解析与命令分发体系都围绕这些原则精心设计。虽然目前处于 Public Beta1.0 前会有破坏性变更但作为日常主力平铺窗口管理器已经可用。若想深入了解可从 README.md 出发依次阅读 docs/guide.adoc使用指南、docs/commands.adoc命令参考与 dev-docs/architecture.md架构说明再结合 docs/config-examples/default-config.toml 动手定制属于自己的工作流。【免费下载链接】AeroSpaceAeroSpace is an i3-like tiling window manager for macOS项目地址: https://gitcode.com/GitHub_Trending/ae/AeroSpace创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考