Hammerspoon 很好用,就是 lua 单线程模式有时会有卡住的问题。而 Hammerspoon 提供的底层扩展能力有限。最近看 https://github.com/xbenduan/vitals 这个菜单栏显示系统信息的应用用了 MyGo ,可以借助 PureGo 与 macOS 原生 ObjC 库打交道,可以方便实现一些底层逻辑,比如拦截键盘鼠标输入,控制剪贴板之类的。
我最早用 Karabiner 的 Launcher 模式,就是按住一个按键再按其他键启动其他应用。这两个键可以是都普通按键,比如按住 a 再按 b 就可以启动或隐藏一个应用。但 Karabiner 一度因为系统升级不能用,就借助 Hammerspoon 里实现了一个类似的。但由于前面说的单线程问题,hs 里功能多了可能会互相影响。现在有 MyGo 就可以直接借助 Go 语言清晰的并发逻辑避免这个问题啦。下图就是我配置的 tab 键效果,单击就是普通 tab ,长按会在屏幕顶部弹出,再按相应按键可以启动应用或者做各种事情( shell 脚本等)。配置文件是个 md ,有示例,方便修改。

键入扩展也是可以根据你敲入的按键,自动替换或执行命令。比如示例里有 =b64 这个扩展,敲入这 4 个字符后,会把剪贴板里的 base64 编码的内容恢复成原始内容(或者反向,自动识别),粘贴到当前文字位置。实际就是调用个配置目录里的脚本,然后删掉敲入的 4 个字符,再粘贴脚本结果。
鼠标手势就更简陋,可以配置按住一个鼠标键后向八个方向拖动实现一些功能。可以区分 app 。

最后说下 MyGo 的优点就是编译快,感觉没比执行脚本慢多少。并且生成的 app 不用拖动安装,直接命令行 open 就用了,还能选择启动时自动运行,非常方便。所以这个项目不提供二进制编译包,只推荐 clone 代码后编译执行。拦截键盘权限高,自己编译更安全。Go 工具链也不大。实用优先,没太美化。整体是用 native 模式运行,内存小于 50MB 。
最后代码仓库在 https://github.com/liukun/burin 欢迎试用和提意见。需要改动和加功能找 agent 处理一下就可以。有帮助的话,麻烦给个免费的 star🌟 还有些小功能没提,比如自动调整窗口大小、自动退出不用的 app 等。