macOS 需要恢复网格布局

Hacker News Top 工具

摘要

作者回顾了 macOS Leopard 中基于网格的 Spaces 功能,批评了 Lion 版本中将其移除的决定,并介绍了自己构建的一个名为 GridLion 的工具,用于恢复虚拟桌面的网格布局。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/06/02 04:47

# macOS 需要找回它的网格布局 来源:https://blog.hopefullyuseful.com/blog/macos-needs-its-grid-back/ 二十年前,我的 Mac 桌面体验比现在更好。虽然当时我只有一块低分辨率(按今天标准看)的屏幕,但我感觉自己就像《剑鱼行动》里的 Hugh Jackman——不假思索地灵巧操作着九个以上的显示空间,肌肉记忆和空间记忆无缝配合。 > **太长不看版**:我开发了一款应用,让 macOS 的 Spaces 恢复到 Lion 之前支持网格布局的荣光。请继续阅读——这篇文章包含一个真实人类逐渐稀有的怀旧体验、*为什么要做这个*背后的思考,以及途中遇到的一些问题。或者直接在这里下载。 ## 2006 差不多在我捣鼓日本马桶的时候,我也在尝试桌面操作系统。在那之前,我的开发者生涯大部分时间都在用 Windows,但后来开始尝试桌面 Linux,再后来因为一场精彩的演讲而心动,足够让我买一台 Mac,就为了能开始用 TextMate。 TextMate(以及它革命性的文本片段)是我迁移的催化剂,但有趣的是,我并没有用它太久。其他编辑器很快迎头赶上,但我留在了 macOS 上。我的职业生涯也转向了 iOS 开发,所以之后其实也没得选了。不管怎样,那个时代有一件事一直伴随着我。 OS X 10.5 Leopard(图像来自互联网档案馆)Spaces(图像来自 OSXDaily 档案) ## macOS Leopard Spaces 2006 年的大版本是 macOS 10.5 Leopard。它有一堆新功能,最出名的可能是 Time Machine。但二十年过去了,我依然既没用过也不怀念 Time Machine。我怀念的是 John Siracusa 那篇史诗级评测里称为“杂项”的东西。我怀念 Spaces。 **Spaces 为 macOS 引入了虚拟桌面,并允许你将它们排列成可自定义的网格。** 任何以这种方式使用过虚拟桌面的人都知道它的好处。它让你可以把它们当作**空间位置上的实际显示器**来对待。我总是喜欢 3x3 的网格,就像我有 9 个屏幕一样。中心屏幕是我的网页浏览器,它上面的屏幕是我的编辑器,这样我就可以按一下键来回切换。左上角是 Xcode,它下面的屏幕是 iOS 模拟器。其他屏幕分配了其他应用/用途(邮件/iTunes/聊天等),具体我不太记得了,但好处是显而易见的:**我可以不假思索地从一块屏幕移动到另一块,就像我在看真正的独立物理显示器一样,这变成了肌肉记忆**。 我觉得这个网格布局非常有用,以至于我把它用到了我构建的其他应用中,我开发的鼓机 EasyBeats 里那 16 个可导航的排序屏幕的网格,直接受到了 Apple 屏幕的启发。 ## 2011 macOS Lion 随着 macOS Lion 的发布,Apple 引入了 Mission Control,这是它对虚拟桌面的新诠释,但令人费解的是,它**只允许它们排成水平一行**。我记得当时我一开始想,我肯定没在哪看到过设置,Apple 不会*完全改变我使用电脑的方式*吧?对吧? ## 错。大错特错。 **单行布局是/简直是一个巨大的倒退。** 如果我想通过键盘到达某个特定屏幕,现在我必须忍受水平滑动一整条路。如果我能记住直接的键盘快捷键,我可以直接跳转,但我的浏览器是在屏幕 7 还是屏幕 8 上?这种新布局彻底摧毁了我保持空间记忆的所有希望。 不是我一个人这么沮丧。也出现了一些替代解决方案,但其中最好的 *Total Spaces* 给我带来了奇怪的卡顿,而且依赖于修改系统 Dock,一旦后来需要绕过系统完整性保护,这就行不通了。 随着时间的推移,我放弃了,学会了凑合着用。作为一名 iOS 开发者,我没什么选择余地,后来当我转到当前雇主的新篇章时,我已经买了额外的物理屏幕,于是……就凑合着用了 :sadface:。 ## 但是但是,窗口管理器…… 我知道现在有些读者正对着屏幕喊:“去学 Yabai/Aerospace 之类的啊!” 我全都试过,然后意识到它们不适合我。我想是因为我并不特别喜欢“桌面上的窗口”这个概念。感觉就像在桌面上翻来翻去地找文件,文件当然可以整理得井井有条,但我真的只想要不同的工作区,每个工作区里的一切都保持原样。我喜欢 macOS 的“全屏”应用,有时我会把它们放在分屏模式下,但我真的很喜欢一个区域只做一件事的概念。 ## 解决方案出现了 总之,就像我说的,我已经学会了忍受,只是偶尔跟同事抱怨说下次工作机换 Linux 算了。直到几个月前,我看到有人成功取消了 macOS 从一个空间切换到另一个空间时的动画,而且不需要修改系统文件。这个动画显然让一些人很烦,但以前从没真正困扰过我。然而**当我看到一个空间动画切换时没有动画的那一瞬间,我立刻意识到我可以解决我的抱怨了**。 ## 热情还有一席之地吗? 我和那些科技行业的朋友们经常讨论的话题是,在这个大语言模型代码生成的新时代,优秀的软件还有价值吗?如果任何人都可以通过简单描述来创建软件,那现在(或者说将来)尝试做付费软件还有意义吗?我觉得有。**我认为,当有人真正把某样东西打磨到最好,做出关于它应该如何运行的设计决策时,这仍然有真正的价值。** 我不再以独立开发者谋生,但我曾经做了很久,我不确定当初让一款好应用脱颖而出的那些因素有多大改变。 看看那些充斥在应用商店里的山寨游戏吧。大多数时候,它们的问题不在于不够原创或过于简单,**问题在于创建它们的人或团队并不在乎**。在乎,才会让创作者“浪费”时间去追查那些感觉不太对劲的地方,或者担心大多数用户永远不会注意到的性能问题。 不管怎样,我*真的*很在乎基于网格的虚拟桌面导航。 ## 控制不容易 我喜欢在原生 Spaces 之上做一个轻量封装的想法,支持桌面或全屏应用,只要有一个网格来导航。但是,几乎所有控制原生 Spaces 的解决方案都消亡了,这是有原因的。macOS 的大部分 Mission Control 接口都被锁住了。并不是简单地调用一个文档化的 API 就能添加一个新桌面或重新排列它们。但是,能够瞬间移动到一个空间,意味着我可以创建一个模型,把原本单行排列的原生 Spaces 当作网格来展示。 于是,在大语言模型的帮助下,我在一天之内就有了一个丑陋但能用的原型。它起作用了,我欣喜若狂,就在几天前我还愿意为这个功能付钱呢。但用了几天后,**我意识到我想要一个精致得多的工具**。 ## 构建一个真正的东西 我决定用我极其有限的空闲时间来开发它。大约一个月后,我把它做到了我自己相当满意的程度。我决定给它取名 GridLion,没什么特别的理由,就是因为它是网格,而且我之前提到了我在 macOS Lion 上遇到的问题。有些人反馈说这个名字很糟糕,可能确实如此,但我也觉得*人们太看重名字了*😂 不管怎样,我不会花太多时间讨论实现了哪些功能等等,因为这些在你可以在应用页面上找到。相反,我认为讲讲遇到的障碍和一些意外情况会更有趣。 ## 权限障碍 有趣的是,只有在你试图让别人更容易的时候,你才会注意到有些东西是多么落后。 为了让这个应用能够捕获全局键盘快捷键并导航空间,它需要 macOS 的“辅助功能”权限。这完全合理,我不想让软件在我不知情的情况下捕获按键。但批准这个权限的流程本可以做得更好,就像 iOS 那样。在 iOS 上,如果你请求一个权限,会弹出一个提示框要求授权,如果你同意,权限就启用了。搞定,很简单。但在 macOS 上,这是一整套复杂的流程。请求权限 → 用户看到一个提示框,要么打开辅助功能设置,要么拒绝。如果同意,设置会打开,然后用户必须找到那个特定的开关并启用它。然后再弹出一个安全提示才能完成。为什么不能最多两步搞定呢? 但如果你想要空间的小预览图(我想要,而且我猜大多数人都会想要),事情会更糟。这需要启用“屏幕和系统音频录制”权限。和之前一样,会弹出一个对话框请求权限,批准后又进入另一个设置界面,你又要找到正确的开关,打开它,然后再批准另一个对话框,这次还会退出并重新打开应用。*叹气*最糟糕的是,如果用户成功闯过了所有这些关卡,因为 GridLion 需要创建*不可见窗口/屏幕*的预览,你会看到最吓人的对话框: 1234 截屏时的吓人对话框 最后一个对话框相当吓人。就连我自己写这个应用都犹豫要不要点它 😬。对于小小的空间预览快照来说,这有点过了,但这就是当你试图做本应集成在操作系统里的功能时得到的待遇。**除了确保应用通过从不主动访问网络(除非用户请求——比如检查更新和验证许可证密钥)来建立信任之外,也没太多办法。** 没有预览和有预览对比 没有预览带预览 ## 别想上 App Store 了! 我只在 iOS App Store 上卖过软件。我刚开始做的时候太久远了,都不记得设置时遇到的障碍了。但由于 GridLion 调用了私有 API 来获取空间信息,它不允许上架 App Store。所以我快速看了一下潜在的解决方案。 我的第一反应就是建一个用 Stripe API 的网站,并为澳大利亚用户包含 GST。我是澳大利亚人,以前为几个 SAAS 项目这样做过,但被各种 App Store 完全不管事的模式惯坏了之后,我对那种服务更感兴趣。 ## 轻松搞定? 显然,我需要的是一种“记录商户”的服务,由他们处理购买、税收和退款。似乎有三家主要公司提供这种服务:Paddle、GumRoad 和 Lemon Squeezy。我被 Lemon Squeezy 吸引是因为他们的许可证代码 API。购买后,他们会给客户一个许可证密钥,并提供激活/停用/验证的方法。 我天真地以为我只需要创建一个账户,关联我的 Stripe(我认为 Stripe 收购/购买了/他们什么关系),就能在几分钟内开始销售了。**然而这个过程比那要拖沓得多。** 你需要向 Lemon Squeezy 证明你是有信誉的,*卖的是有实际价值/用途的东西*。需要发送一些录屏和一些社交媒体账号验证。对我来说这不是问题,但我能预见到刚开始做的人可能会在这里遇到一些障碍。 事后回想,我完全理解这类要求。心怀好意的人很容易忘记世界上还有心怀恶意的人,而且既然实际上是 Lemon Squeezy 在与客户打交道(至少在支付方面),他们采取保护自己声誉的措施是正确的。 话虽如此,即使在批准之前,你也能完全访问一个测试账户,这使得在应用中集成设置和测试非常容易。对我来说,这是一次风险很低的实验,但我必须承认,我很期待看看这是否是除了 App Store 之外销售软件的可行方式(是的是的,我知道几十年来一直是这样 😅)。 ## 大语言模型不在乎用户体验 我在日常工作中经常使用大语言模型。我把它们当作编码助手,并围绕它们的服务构建产品,但这是我第一次在个人原生应用项目中使用它们,我发现这次经历……很有趣。**大语言模型就像超快的船,你设定一个方向出发,但如果没有良好的反馈回路,它们就会偏离航线。你为威尼斯设定了 GPS,最后却到了威尼斯人酒店**——看起来像,但不是你想要的地方。 反馈回路取决于项目。在我日常工作中,我通常处理具体的目标、正确的 API 结果或大型数据集查询。如果计划定义得好,大语言模型往往能立即看出结果是否不符合期望,然后迭代。我的大部分时间都花在了审查上。 这个项目则完全不同。**用户界面很大程度上关乎“感觉”,所以任何面向用户的东西,都必须有人参与循环。** 这让我质疑实际收益。一方面,因为我近 10 年没有真正做过原生 Mac/iOS 开发,大语言模型确实帮了我,但另一方面,我觉得 10 年前的我能在同样的时间内做出同样的应用,同时获得更多见解。 ## 它***几乎***做到了我想要的一切 我是头号用户,所以我尝试添加了所有我想要的。 - 轻松导航和重新排列空间的网格 - 快速/稳定,没有卡顿 - 特定显示器的设置(网格大小、热键等) 但有些东西仍然做不到。如果你想把一个空间从一个显示器移到另一个显示器,或者把一个窗口从一个空间移到另一个空间,没有可靠的 API。幸运的是,由于 GridLion 与 Mission Control 配合使用,你可以直接用 Mission Control 来完成这类任务,但这还是让我有点不爽,因为我不能自己直接做。 最后,能够让某些应用在加载时总是出现在网格的特定位置。这是原始 macOS Spaces 的一个功能,但对我现在来说可能甚至都没用了。设置/重新排列很快,我很少重启。而且,如果你看上面的截图,你会看到我经常打开很多个 VSCode 窗口,我不确定这要怎么处理。无论如何,我将来可能会继续研究解决方案。 ## macOS 原生 说了这么多,如果下一次 macOS 更新宣布网格空间回归,我会非常高兴。**这应该再次成为一个操作系统功能。** 在那之前,尽管试试 GridLion。

相似文章

解放图标

Hacker News Top

本文批评苹果在 macOS 26 Tahoe 中强制统一使用圆角方形图标,认为这损害了可用性和创意,并对 macOS 27 Golden Gate 的改进表示欢迎,同时敦促苹果恢复具有辨识度的图标形状。

Tiles

Product Hunt

Tiles 是一款 macOS 工作区管理器,允许用户保存和恢复桌面布局,以优化工作流程并减少窗口杂乱。

Capacity Desktop

Product Hunt

Capacity Desktop 是一款免费的 Mac 应用,定位为 Lovable 的本地替代品,让用户直接在桌面上构建应用。