掌控你的Mac桌面:Swindler - Swift版窗口管理库
SwindlermacOS window management library for Swift项目地址:https://gitcode.com/gh_mirrors/sw/Swindler
Swindler,一个专为macOS设计的Swift窗口管理库,旨在帮助开发者重获在Linux和Windows系统中的桌面环境控制权。通过提供强大的API和抽象层,Swindler使创建高效、稳定的窗口管理器变得轻而易举。
项目介绍
当你迁移到macOS时,可能已经享受到了其出色的硬件和流畅的操作系统。但你也失去了对桌面环境的精细控制。Swindler的目标就是弥补这一遗憾,让你在享受macOS的同时,也能体验到类似Linux和Windows的自定义窗口管理功能。
项目技术分析
Swindler主要解决了以下几个技术挑战:
- 类型安全:基于Swift的API提供了全面的文档和类型安全性,比C语言的无障碍API更易于理解和使用。
- 内存模型:它维护了一个所有应用程序和窗口状态的模型,这意味着读取操作是即时的,因为所有的状态都缓存在本地应用进程中,并保持实时更新。
- 异步写入与刷新:多个窗口的调整可以并发执行,避免因某个应用响应慢而导致的整体延迟。Promise-based API使得监控操作状态变得简单。
- 事件友好性:Swindler的事件机制保证了事件顺序的一致性,遗漏的事件会得到补充,并能区分由代码触发还是用户操作引发的事件。
应用场景与特点
- 开发自定义窗口管理器:Swindler为你提供了构建复杂窗口布局的工具,如网格布局或自定义窗口大小调整。
- 提高工作效率:快速切换和定位窗口,实现一键整理桌面,让工作更加专注。
- 稳定可靠:Swindler经过深入测试,确保在各种情况下都能保持一致性和稳定性。
示例
以下代码展示了如何利用Swindler将屏幕上的所有窗口分配到网格中:
Swindler.initialize().then { state -> Void in
let screen = state.screens.first!
let allPlacedOnGrid = screen.knownWindows.enumerate().map { index, window in
let rect = gridRect(screen, index)
return window.frame.set(rect)
}
when(allPlacedOnGrid) { _ in
print("all done!")
}
}.catch { error in
// ...
}
此外,你还可以轻松实现“吸附”功能,当窗口移动时自动调整至网格位置。
获取权限
为了使用Swindler,你的应用需请求访问受信任的无障碍API。在AppDelegate中加入以下代码:
func applicationDidFinishLaunching(_ aNotification: Notification) {
guard AXSwift.checkIsProcessTrusted(prompt: true) else {
print("Not trusted as an AX process; please authorize and re-launch")
NSApp.terminate(self)
return
}
// your code here
}
项目状态与未来发展
目前,Swindler处于Alpha阶段,大部分核心功能已实现。项目持续发展,未来将添加更多API,包括对Spaces的支持。
加入我们
想要参与讨论或寻求帮助?请加入我们的Gitter聊天室,也可关注项目作者@tmandry的Twitter。
Swindler的开发基于AXSwift,并受到其他优秀开源项目如Silica,Mjolnir,以及Hammerspoon的启发。
立即开始使用Swindler,打造属于自己的个性化macOS桌面体验吧!
SwindlermacOS window management library for Swift项目地址:https://gitcode.com/gh_mirrors/sw/Swindler