← 返回信息流
AI 资讯Hacker News·2 小时前

Zen Mode:macOS全局专注模式发布

原标题:Show HN: Zen Mode – a global focus mode for macOS

速览

Zen Mode是一款新的macOS应用,提供全局专注模式,可屏蔽通知、应用等干扰,提升工作专注度。该工具通过系统级控制实现统一体验,而非仅针对单个应用。它旨在帮助用户减少分心,提高效率。

AI 深度解读

背景

在 macOS 日常使用中,屏幕总是充满各种争夺注意力的元素:多个应用窗口、通知徽标、菜单栏时钟、Dock 栏,甚至一张风景壁纸。许多编辑器(如 VS Code、Obsidian、iA Writer)内置了「禅模式」——但仅限于该应用内部。Hacker News 上的一位开发者分享了名为 Zen Mode 的工具,试图通过一个全局热键,在任意 macOS 应用中实现统一的专注界面,让屏幕仅保留当前工作窗口,其余一切淡出黑色。

核心内容

Zen Mode 是一个约 250 行的 Hammerspoon 脚本(而非独立应用),可通过一个全局热键切换状态。激活后,当前聚焦的窗口会平滑移动到屏幕中央并拉伸至全高,同时菜单栏、Dock 栏以及所有其他窗口和壁纸都被覆盖为黑色;再次按下热键(或按 Esc)则恢复所有元素的原始位置和状态。它并非像 macOS 原生全屏那样将窗口拉伸至边缘,而是保持窗口的原始宽度,更像一个「聚光灯」而非「接管」。

技术实现:该脚本不通过隐藏或调整其他应用窗口来实现,而是绘制一个全屏的 CoreGraphics 画布,并将其提升到「光标窗口层级」(cursor window level),使其覆盖菜单栏和 Dock。然后在画布上对应聚焦窗口的位置挖出一个带圆角的透明孔洞,窗口本身保持完全正常、可交互的状态。所有围绕窗口的部分被彻底黑掉。

动画细节:过渡分为两个阶段——先让窗口滑向中央同时背景渐黑,然后窗口在完全黑暗下拉伸至全高;退出时反向执行。动画基于时间(60 Hz 时钟),而非步骤驱动,确保即使应用响应慢也能按时完成。移动窗口成本低,调整大小成本高(如终端需要重排字符网格),因此先移动后调整大小。

边缘处理:脚本会读取窗口的实际位置(而非请求位置)来适配孔洞,因为应用可能延迟或舍入帧变化,避免孔洞超前导致漏光。孔洞向内收缩 2 像素(padding = -2),使黑暗覆盖窗口边缘而非留下亮边。圆角半径默认设为 24 像素,以应对 macOS 26 Tahoe 版本中更圆润的窗口角(无公开 API 查询半径),避免过小导致背景泄露。

系统级隐藏:画布置于光标窗口层级,高于菜单栏和 Dock 层级,因此真正覆盖所有屏幕元素。背景为纯黑色而非模糊效果,因为 macOS 没有公开的脚本级模糊背景 API,截图再模糊需要屏幕录制权限且会变成静态图像。

状态恢复:退出时精确记住窗口的原始位置和大小并恢复。实时追踪:激活专注模式后拖动或调整窗口,孔洞跟随;若窗口关闭,覆盖层自动拆除。安全钩子:Esc 仅在专注模式激活时拦截,退出后立即将按键交还给 macOS,不影响 Vim、终端等正常功能。

安装方式:需要先安装 Hammerspoon(brew install --cask hammerspoon),授予 Accessibility 权限,然后将 init.lua 内容追加到 ~/.hammerspoon/init.lua,最后在菜单栏点击 Hammerspoon 图标选择「Reload Config」。

关键要点

  • 全局性:适用于任何 macOS 应用,无需逐个设置。同样热键在终端、浏览器、PDF 阅读器、笔记应用等中均可使用。
  • 一键切换:默认热键为 Option + Cmd + Z,再次按下或按 Esc 退出,恢复原始状态。
  • 布局:窗口保持原始宽度,居中并拉伸至全高;菜单栏和 Dock 被完全隐藏。
  • 技术方案:利用 CoreGraphics 绘制全屏画布+挖孔,窗口保持正常交互,不修改其他应用窗口。
  • 动画管理:60 Hz 时间驱动动画,分为移动和调整大小两个阶段,避免卡顿;每个阶段持续时间和是否启用均可调(moveDurationresizeDuration)。
  • 边缘与圆角:孔洞实时跟随窗口实际帧,避免漏光;圆角半径预设 24 像素,以防背景泄露。
  • 状态保存:退出时精确恢复窗口原始位置和大小;窗口关闭时自动拆除覆盖层。
  • 与现有工具对比:区别于 HazeOver 等被动调暗(不隐藏菜单栏/Dock/壁纸)、Hammerspoon 内置 hs.window.highlight isolate 模式(不移动窗口或隐藏菜单栏/Dock)、应用内禅模式(仅限单一应用)、macOS 原生全屏(拉伸窗口至边缘)。Zen Mode 将上述功能组合为一个可逆的全局手势。
  • 轻量:约 250 行无依赖的 Lua 代码,可阅读和按需修改。

意义与影响

Zen Mode 提供了一种极简且高效的注意力管理方案,填补了 macOS 系统级全局专注模式的空白。它不依赖第三方应用或复杂配置,仅通过一个脚本实现,具有高度的可定制性和透明性(代码公开可读)。其技术实现——在 CoreGraphics 画布上挖孔——巧妙地绕过了系统层级限制,同时保持窗口的交互性。与同类工具相比,它更彻底地隐藏了除当前窗口外的所有视觉干扰,包括菜单栏和 Dock,且动画流畅、状态恢复精确。对于频繁在多个应用间切换、需要临时深度专注的用户(如程序员、写作者、研究者),这个工具可能成为工作流中的实用组件。此外,它展示了 Hammerspoon 脚本的潜力:通过系统底层 API 实现看似需要完整应用才能完成的功能,降低了开发门槛,鼓励更多用户探索 macOS 自动化与界面定制。

查看原文 →github.com