本文由 简悦 SimpRead转码, 原文地址 alexbeals.com
查看我的简历、过去的一些项目,或与我联系。
空间重命名器 | 2018 年 10 月
Objective-C (SIMBL), Swift
Spaces Renamer 是我大约两年前想到的。我倾向于在 Mac 上使用大量桌面(或称 Spaces,内部称其为 "空间")。每个桌面上都有我正在处理的不同工作,每当我需要什么东西时,我就会在它们之间轻扫一下。这非常有用,因为你可以将不同的 Chrome 浏览器窗口/文本编辑器放在各自的桌面上,以满足不同的目的。不过,它们的名称都类似于 "桌面 1",这可能会让你很难记住要切换到哪个桌面,而不需要全部滚动一遍。
空间重命名器图标
因此,当遇到一个没有明确解决方案的问题时,我想我可以尝试自己解决。虽然有一款名为 TotalSpaces 的付费软件具备这种功能,但它对 macOS 的基本体验进行了大幅修改,而且漏洞百出,因此我想使用 SIMBL 编写自己的解决方案。我已经使用 Theos 开发套件完成了很多项目,它是 iOS 的工具链,允许你挂钩 iOS 功能并修改它们的工作方式。SIMBL 对于 macOS 来说大致相同,你可以 "swizzle "一个方法,让它做不同的事情。我曾用它创建了另一个名为 Message Indicator的调整程序(如果你不是最后一个回复的人,它就会在 iMessage 聊天记录上添加一个指示图标),所以我知道这很可能是可行的。
不幸的是,尽管苹果软件的几乎每一部分都是基于 Obj-C 构建的,但 Dock 和相关的空间切换都是用 Swift 编写的!虽然你可以在 Swift 中进行一些方法切换,甚至有一个 GitHub 上的开源 SIMBL 调整 可以做到这一点,但我找不到可用的头文件,而且我有理由相信,当我第一次在 macOS 10.10 中研究它时,它还不是用 Swift 编写的。因此,我无法挂钩到决定空格名称的底层结构。相反,我不得不挂钩渲染。
浓缩版空间切换器
由于组成视觉条的组件的 CALayer 结构定义明确,因此识别它们、确定排序、将其映射到相应的空间 UUID 信息(可以从计算机上的 .plist 文件中获取)以及通过重命名接口将 UUID 代码映射到用户设置的名称相对来说比较简单。
空间重命名器视图,用于设置每个空间的名称
有相当多的黑客代码可以精确地计算出如何重组它们,并确保在它们之间滑动时一切都居中且看起来正确,但这一切都很好!请随时 查看 GitHub 上的代码。如果你想在自己的电脑上安装,GitHub 上也有安装说明。