1. 介绍
Mac 系统没有Windows 窗口自动贴合, 二等分, 四等分的功能, 一般可以用Rectangle, Moom 等软件, 通过快捷键控制应用窗口的位置和大小. AeroSpace 不同于上述软件靠用户手动触发, 它可以根据用户设定自动管理应用窗口. 主要涉及到三个概念:
- 显示模式: AeroSpace 提供了平铺, 堆叠和悬浮 三种显示模式. 平铺就是所有打开的应用窗口平分当前屏幕, 像瓷砖一样一块接一块显示, 可以横向或者竖向平铺; 而堆叠模式下, 所有应用窗口全屏一层盖一层, 只有一个应用在最前端显示; 悬浮模式则类似Mac 现有的显示模式.
- workspace: workspace 类似Mac 虚拟桌面, 每个workspace 可以有自己独立的显示模式
- 回调函数: AeroSpace 可以通过app id, window name 等匹配窗口, 自动将窗口全屏, 移动到特定的workspace, 悬浮展示等
2. 使用手册
安装
brew install --no-quarantine --cask nikitabobko/tap/aerospace
自定义配置
首先拷贝一份默认配置: cp /Applications/AeroSpace.app/Contents/Resources/default-config.toml ~/.aerospace.toml, 开始自定义修改:
# 修改了以下配置!
# 开机自启
start-at-login = true
# 修改堆叠模式的快捷键为option - ;(option键加上分号键), 跟后续的快捷键保持一致
#alt-comma = 'layout accordion horizontal vertical'
alt-semicolon = 'layout accordion horizontal vertical'
# 堆叠模式下窗口留白, 可以显示堆叠下的窗口, 方便快捷键切换. 设置为0或者50
# The 'accordion-padding' specifies the size of accordion padding
# You can set 0 to disable the padding feature
#accordion-padding = 30
accordion-padding = 50
# 默认布局模式, 推荐堆叠, 需要并行操作多个窗口时再手动平铺
# Possible values: tiles|accordion
default-root-container-layout = 'accordion'
# 调整窗口大小, 平铺布局下有效
alt-shift-minus = 'resize smart -50'
#alt-shift-equal = 'resize smart +50'
alt-shift-equal = 'resize smart +100'
# 设置快捷键ctrl + alt + enter, 将当前应用进入或退出全屏状态
# ctrl-alt-enter = 'fullscreen'
shift-alt-enter = 'fullscreen'
# 增加了以下配置!
# 分配工作空间, 一个工作空间对应一个屏幕, 同时把a-z 的快捷键都注释掉了, 0-9已经够用
[workspace-to-monitor-force-assignment]
1 = 'Built-in'
2 = 'Built-in'
3 = 'LS'
4 = 'LS'
5 = 'HDMI'
6 = 'LCD'
# 新窗口打开后的回调函数
# 使各类「设置」界面自动悬浮:
[[on-window-detected]]
if.window-title-regex-substring = '(setting|设置)'
run = 'layout floating'
# 使 Chrome 和 Firefox 等浏览器的画中画窗口自动悬浮:
[[on-window-detected]]
if.window-title-regex-substring = '(Picture-in-Picture|画中画)'
run = 'layout floating'
# 使微信所有窗口设为自动悬浮:
[[on-window-detected]]
if.app-id = 'com.tencent.xinWeChat'
#if.window-title-regex-substring = '^(?!WeChat \(Chats\)|微信 \(聊天\)).*$'
run = 'layout floating'
# 使jetbrans 相关窗口悬浮
[[on-window-detected]]
#if.app-id = 'com.jetbrains.pycharm'
if.app-name-regex-substring = '^(IntelliJ.*|PyCharm.*|Writerside.*)$'
if.window-title-regex-substring = '^(Commit.*|Welcome to.*|.*Diff.*|.*Clipboard.*|.*\(.*\).*)$'
run = 'layout floating'
回调函数里需要根据app name/app id/window title 等匹配特定窗口, 可以通过以下命令获取应用窗口信息
# 返回打开的所有app
aerospace list-apps
# 返回名称为 App Name 的应用程序的 bundle ID:
osascript -e 'id of app "App Name"'
# 列出名称为 App Name 的应用程序的所有窗口标题(需要给终端软件辅助应用权限):
osascript -e 'tell application "System Events" to tell process "App Name" to get name of every window'
mac 自带的输入法前换弹窗会导致aerospace bug, 通过以下命令然后重启可以禁用弹窗
# 禁用弹窗
sudo mkdir -p /Library/Preferences/FeatureFlags/Domain
sudo /usr/libexec/PlistBuddy -c "Add 'redesigned_text_cursor:Enabled' bool false" /Library/Preferences/FeatureFlags/Domain/UIKit.plist
# 恢复弹窗
rm /Library/Preferences/FeatureFlags/Domain/UIKit.plist
3. 常用快捷键
AeroSpace 同样提供了丰富的快捷键来管理窗口, 甚至可以控制焦点
| 快捷键 | 说明 |
|---|---|
| option - H/J/K/L | 将焦点切换到左/下/上/右侧的窗口; |
| option - shift - H/J/K/L | 将当前窗口向左/下/上/右侧移动 |
| option - 0 | 将焦点切换到编号为0 的工作空间 |
| option - tab | 将焦点切换到上一个窗口 |
| option - shift - 0 | 将当前窗口移动到编号为0的工作空间 |
| option - shift - tab | 将当前窗口移动到最近使用的工作空间 |
| option - / | 将当前布局横向/纵向平铺 |
| option - ; | 将当前布局横向/纵向堆叠 |
| option - shift - =/- | 将当前窗口增大/减小, 仅在平铺布局下有效 |
| option - shift - ; 再按R(option + shift + R) | 重置当前布局为等分平铺 |
| option - shift - ; 再按F | 将当前窗口改为悬浮 |
| option - shift - ; 再按Backspace | 关闭其他窗口 |
| option - shift - / 再按H/J/K/L | 将当前窗口与其左/下/上/右侧的窗口归为一组 |