背景
最近把公司电脑从 Windows 换到了 MacOS, 在重新配置 OS 阶段,发现在 MacOS 上进行窗口管理比较痛苦,自己之前的个人 MaCOS 一直使用的是Moom 来进行管理,但是使用功能很有限,加上现在 MacOS 自身的窗口提示会与 Moom 冲突,所以决定更换一个。我个人对于窗口管理的需求就是方便的在不同显示器切换,焦点窗口全屏、半屏、1/3 屏转换快速。对于平铺式窗口管理觉得学习成本和适应成本可能有些高,不打算折腾,之前看到 disksing 使用 Hammerspoon 进行窗口管理的文章: 适合程序员的桌面窗口管理方案 ,打算尝试一下。
Hammerspoon
Hammerspoon 是一个开源的自动化工具,可以实现很多功能,包含不限于:窗口管理、桌面管理、Wifi 触发器、时钟管理等等,所有功能都是通过 Lua 语言来实现的。用户可以自己编写 Lua,或者使用 Spoons 中提供的一些 Lua 模块来简化配置。
官网包含了一个简单的 Window resize 示例,还是比较好理解的,先找到当前focuse 窗口,然后找到当前窗口大小,调整大小为目标值,重新设置窗口:
1 | hs.hotkey.bind({"cmd", "alt", "ctrl"}, "Left", function() |
窗口管理
在 Github 上可以看到很多 Hammerspoon 的示例,目前写的比较完善的有以下几个:
- https://github.com/ashfinal/awesome-hammerspoon
- https://github.com/wangshub/hammerspoon-config
- https://github.com/S1ngS1ng/HammerSpoon
虽然 Hammerspoon 提供了很多功能,但是我不想用它来实现很多功能,毕竟 AllinOne 我(没)不(什)是(么)很(好)喜(下)欢(场)。目前还没有使用 MacOS 存在一个常用的布局,所以先实现一些快捷键来满足需求就好。这里使用的 Spoon 包含两个:WinWin 和 ModalMgr。也不打算进行配置拆分,所有配置都在 init.lua 中写明,具体配置如下:
1 | hs.hotkey.alertDuration = 0 |
目前尝试增加应用切换窗口自动处理,但是 M1 上的 Hammerspoon 模块会 hang,还没搞清楚怎么回事,后续有时间再看看。