一个面向个人学习与日常阅读的 macOS 小工具:按一次快捷键,拖出与墨水屏一致的固定比例截图,松开鼠标后自动把截图全屏显示到已连接的 2:1 墨水屏。
- 版本:
0.1.0 - 已验证环境:macOS、Hammerspoon 1.1.1、macshot 4.2.1
- 已验证显示器:P6Y2,竖屏
900×1800 - 截图比例:根据目标屏方向自动设为
1:2或2:1 - 无 2:1 显示器时:不启动截图,也不投送
- 连接比例为 2:1 的墨水屏。
- 按
⌃⌥⌘2。 - 拖动固定比例选框。
- 松开鼠标,截图自动全屏显示到墨水屏。
清除投送画面:⌃⌥⌘Esc。
- Hammerspoon:快捷键、显示器识别、剪贴板轮询和全屏画布。
- macshot:固定比例区域截图,并把结果复制到剪贴板。
使用 Homebrew 安装:
brew install --cask hammerspoon
brew install --cask macshot首次启动 macshot 后,在“系统设置 → 隐私与安全性 → 屏幕与系统音频录制”中允许 macshot。
如果 ~/.hammerspoon/init.lua 没有其他自定义内容,可直接运行:
chmod +x install.sh
./install.sh安装脚本会先备份已有配置,再安装本项目的配置。若已有复杂的 Hammerspoon 配置,建议手动合并 hammerspoon/init.lua。
- Hammerspoon 查找长边/短边约为
2.0的现有显示器,并优先选择非主屏。 - 找到目标后,根据屏幕方向写入 macshot 的固定截图比例。
- macshot 完成截图并复制到剪贴板。
- 截图期间临时轮询剪贴板;读到图片后立即停止轮询。
- Hammerspoon 在目标屏创建最高层级画布并显示截图。
- 只有画布显示期间才创建屏幕变化监听器;显示器拓扑发生任何变化时立即删除画布并释放监听器。
空闲状态下没有常驻屏幕或剪贴板监听器。
早期版本在拔掉墨水屏后,macOS 会把最高层级画布迁移到 MacBook 主屏,而屏幕监听器可能已经被回收,导致画面遮住主屏。
当前版本改为按需生命周期:
- 投送前不创建屏幕监听器;
- 画布显示时临时保留监听器;
- 任何显示器变化都会无条件清除画布;
- 清除画布时同步停止并释放监听器。
紧急清除命令:
/opt/homebrew/bin/hs -c 'EInkCapture.hide()'查看目标显示器和运行状态:
/opt/homebrew/bin/hs -c 'local s=EInkCapture.status(); local t=EInkCapture.target(); return hs.inspect({target=t,status=s})'关键状态:
target=nil:当前没有 2:1 显示器。showing=true:投送画布正在显示。monitoringOutputScreen=true:临时拔屏保护正在工作。armed=true:正在等待本次截图进入剪贴板。
hammerspoon/init.lua:核心配置。install.sh:带备份的本地安装脚本。LICENSE:本项目脚本采用 MIT License;Hammerspoon 和 macshot 仍遵循各自许可证。