applescript 可原生实现 macos 窗口精准分屏控制:通过 system events 获取窗口与屏幕信息,计算并设置 bounds 或 position 实现单屏/多屏定位;虽不能直接调用 split view,但可模拟快捷键或菜单操作间接激活;封装为命令行工具后支持终端快速调用与参数化控制。
applescript 是 macos 原生支持的自动化语言,能直接调用系统窗口管理接口,实现精准、免鼠标、可脚本化的分屏控制——尤其适合终端、开发工具等不常响应快捷键的场景。
基础分屏操作(无需第三方)
macOS 自带的 AppleScript 可直接操控窗口位置与尺寸。例如,将当前前台窗口设为左半屏:
- 使用 System Events 获取前台应用窗口句柄和屏幕分辨率
- 计算目标区域:左半屏宽度 = 屏幕宽度 ÷ 2,高度 = 屏幕高度
- 执行
set bounds of front window to {0, 0, width/2, height} - 同理,右半屏设为
{width/2, 0, width, height}
这类脚本可保存为 .scpt 文件,双击运行,或通过 osascript 命令行调用,嵌入到终端别名或快捷键工具中。
适配多显示器的窗口定位
单靠 bounds 无法跨屏移动窗口,需先识别显示器布局:
- 用
system_profiler SPDisplaysDataType提取各显示器的 Resolution 和 Origin(如右屏原点可能是 {1920, 0}) - AppleScript 中通过
tell application "System Events" to get properties of every display获取实时坐标系 - 将窗口
set position of front window to {x_origin + 100, y_origin + 50}即可精准落位到指定屏幕
这是 Termtile 的 sn(switch screen)命令底层逻辑,也是实现“插拔外显后自动恢复窗口位置”的关键一步。
与原生分屏视图(Split View)联动
AppleScript 本身不能直接触发 macOS 的 Split View 全屏分屏(因该机制由 WindowServer 深层控制),但可通过模拟用户操作间接激活:
- 用
keystroke发送command+option+←或→实现非全屏吸附 - 结合
click menu item操作绿色按钮弹出菜单,选择“拼贴到左侧”等项(需启用辅助功能权限) - 注意:此方式依赖 UI 元素可见性,建议搭配
delay和if exists判断提升稳定性
实际项目如 Termtile 和 displayplacer 都会优先采用纯坐标调整,仅在必要时回退到 UI 自动化。
封装为可复用命令行工具
把 AppleScript 打包成命令,让分屏像终端命令一样随手调用:
- 新建
/usr/local/bin/tile-left,内容为#!/usr/bin/osascript ...,赋予执行权限 - 配合
alias ll='tile-left',就能在终端输入ll立即左分屏 - 支持参数传入:如
tile-half --right --app "Safari",用do shell script解析参数并切换目标应用
这种模式避开了图形界面依赖,响应快、可集成进 tmux、iTerm2 或 Alfred 工作流,是开发者高频分屏的真实落地方式。











