展示 HN: Zen 模式 - macOS 的全球专注模式
Ryan 的 Zen 模式 一个小工具,用于重新夺回我的注意力 - 提供跨 macOS 应用程序的全球专注模式。我的屏幕上总是充满了乞求关注的东西:其他窗口、通知徽章、菜单栏时钟、停靠栏、风景壁纸。 Zen 模式是一个可以静音所有这些东西的热键。我正在工作的窗口滑动到屏幕中央并伸展到全高,而其他所有东西 - 包括菜单栏和停靠栏 - 都渐渐变黑。再次按下热键(或 Esc),一切将准确返回到原来的位置。它就像全屏模式,只是窗口保持自然宽度 - 更像是聚光灯而不是接管。它是一个 Hammerspoon 脚本,而不是一个应用程序,并且可以在每个 Mac 应用程序中工作:与内置于各个编辑器的 Zen 模式不同,使用相同的按键可以在终端、浏览器、PDF 阅读器或任何其他窗口中使用。有关这一切是如何结合在一起的,请在我的博客上阅读更多。 演示 一个繁忙的桌面 - 其他应用窗口、壁纸、菜单栏和停靠栏都在争夺关注 - 直到一个热键将聚焦窗口居中,其他一切都变黑。在终端、浏览器或任何其他应用程序中的工作方式相同: 特点 任何应用程序,无需逐个应用程序设置 - 这是全球模式,而不是应用程序功能:它作用于任何聚焦的窗口,因此相同的热键可以使终端、浏览器、笔记应用程序或其他任何应用程序进入 Zen 模式。一键切换 - Option + Cmd + Z 可立即进入或退出 Zen 模式。 居中、全高布局 - 窗口保持其宽度,生长到全屏高度并在水平方向上居中。 激进的用户界面隐藏 - 深色画布在 macOS 光标窗口级别渲染,完全隐藏菜单栏和停靠栏。 封闭的视觉印章 - 喷吻式的圆形切口紧紧贴合 macOS 窗口框架的内部,因此没有背景像素透过角落泄漏。 平滑的过渡 - 进入时播放两阶段的缓和动画:窗口滑动到中心,背景渐渐变黑,然后在黑暗中生长到全高;退出则反转。两个阶段可以通过 moveDuration 和 resizeDuration 来调整(或完全关闭)。 实时窗口跟踪 - 在 Zen 模式激活时拖动或调整窗口大小,切口将随之移动;如果窗口关闭,则覆盖层会自行拆除。 安全退出钩子 - Esc 会立即退出 Zen 模式,但该键仅在 Zen 模式激活时被拦截;一旦退出,它将交还给 macOS,因此 Vim、终端及正常的操作系统行为将正常使用。 状态恢复 - 您窗口的确切位置和大小会被记住,并在您退出时恢复。 系统要求 macOS Hammerspoon - brew install --cask hammerspoon 安装 安装 Hammerspoon 并启动: brew install --cask hammerspoon 授予 Hammerspoon 无障碍权限(系统设置 > 隐私与安全 > 无障碍权限):将此存储库中的 init.lua 的内容追加到您的 ~/.hammerspoon/init.lua: mkdir -p ~/.hammerspoon curl -fsSL https://raw.githubusercontent.com/cabeen/zen-mode/main/init.lua >> ~/.hammerspoon/init.lua 点击菜单栏中的 Hammerspoon 图标,选择 重新加载配置: 使用 方法 键位 在聚焦窗口上切换 Zen 模式 Option + Cmd + Z 退出 Zen 模式 Option + Cmd + Z 或 Esc 工作原理 该脚本不是调整或隐藏其他应用,而是在所有内容上绘制一个单一的全屏 CoreGraphics 画布 - 提升到光标窗口级别,因此它覆盖菜单栏和停靠栏 - 然后在您聚焦的窗口正下方打一个透明的、圆角的孔。您的窗口保持完全正常的互动窗口;周围的一切都被黑屏处理。 先前的艺术 现有的一些工具覆盖了这个想法的部分: 注意力分散消音器 - HazeOver(付费)和 FocusDim 等免费替代品在每次焦点改变时自动使后台窗口变暗。它们是被动的、始终开启的效果:它们不会触及桌面壁纸、菜单栏或停靠栏,也不会移动或调整窗口大小。 Hammerspoon 的内置 hs.window.highlight - 其“隔离”模式用不透明的叠加层覆盖其他窗口和桌面,是该技术的最接近亲戚。它不会重新定位窗口或隐藏菜单栏和停靠栏。 应用专属的 Zen 模式 - VS Code、Obsidian、iA Writer 等在该应用程序内部提供集中、无边框的写作模式,但仅在该一个应用程序中。 原生 macOS 全屏 - 隐藏菜单栏和停靠栏,但将窗口边缘扩展到边缘,而不是框架它。 这个脚本所做的不同之处在于将这些部分组合成一个明确的、可逆的手势,适用于任何窗口:单个热键将窗口居中到全高,黑屏处理屏幕上的一切 - 包括壁纸、菜单栏和停靠栏 - 在一个同步的动画过渡中,并在您离开时将窗口准确放回原处。它也不是一个应用程序:它是大约 250 行的无依赖 Lua,您可以在几分钟内阅读并进行调整。 设计说明 这个脚本的大部分工作集中在小的用户体验设计上。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡