Hammerspoon:通过 Lua 自动化 macOS——开源强力工具
Hammerspoon:基于 Lua 的 macOS 自动化工具
macOS 用户常常每天重复相同的拖拽或菜单点击操作。无论你是开发者、设计师,还是普通高级用户,自动化这些习惯都能省下数小时的重复劳动。此时,Hammerspoon 便登场了:一款轻量级、开源的应用,向 Lua 脚本语言暴露了 macOS API。使用 Hammerspoon,你可以:
- 创建启动程序、窗口平铺或媒体控制的快捷键。
- 自动化剪贴板历史、通知或文件管理。
- 使用 Objective‑C 或 Swift 编写自定义模块,扩展 OS 功能。
- 监听硬件事件(例如蓝牙、键盘 LED、Stream Deck 按钮)。
- 通过 Lua HTTP 库与外部服务(Dropbox、GitHub 等)集成。
开始使用
1. 安装 Hammerspoon
# 使用 Homebrew Cask
brew install --cask hammerspoon
或者从GitHub 发布页面下载最新版本,将 Hammerspoon.app 拖入 Applications。
2. 设置你的第一个脚本
首次启动时,Hammerspoon 会创建 ~/.hammerspoon/ 目录。在其中放置名为 init.lua 的文件——这就是主配置文件。
-- ~/.hammerspoon/init.lua
hs.loadSpoon("Window")
-- 示例:用 Cmd‑Shift‑F 切换 Finder 窗口
hs.hotkey.bind({"cmd", "shift"}, "F", function()
local f = hs.application.get("Finder")
if f then
f:activate()
f:hide()
else
hs.osascript.applescript('tell application "Finder" to activate')
end
end)
保存文件后,按 Cmd‑Alt‑F(默认重载热键)。你的自定义快捷键应当现在可用。
使用 Hook 与模块扩展
Hammerspoon 自带一个“扩展”库,公开了诸如 hs.window、hs.pathmonitor、hs.audiodevice 等 macOS 服务。你可以在它专门的扩展仓库中找到更多扩展,或直接用 C/Objective‑C 编写并编译进你的 Hammerspoon。
-- 示例:设置动态窗口布局
hs.hotkey.bind({"cmd", "shift"}, "W", function()
local win = hs.window.focusedWindow()
if win then win:move({x=0, y=0, w=0.5, h=1}) end
end)
你也可以通过标准包管理器(luarocks)使用第三方 Lua 库。Hammerspoon 的 hs.http 模块非常适合创建简单的 Web Hook。
社区与资源
- 文档 – 官方的入门指南和API 文档不可或缺。
- 示例 – 浏览并复制仓库
samples/目录中的init.lua示例。 - 支持 – 加入 Libera 的 #hammerspoon IRC 频道或Google 组。
- 贡献 – Fork 仓库,在根目录运行
make test,然后提交 PR。项目使用严格的 linting/CI 流水线。
高级用户技巧
- 高效重载 – 按
Cmd‑Option‑F重新加载配置,而无需重启应用。 - 使用 Spoon 支持 –
hs.loadSpoon("<name>")加载第三方库,例如Window或Desktop。 - 使用 Console 调试 –
hs.debug.disable()可以隐藏调试输出,或使用print语句追踪逻辑。 - 登录时自动化 – 将
~/.hammerspoon/init.lua加入登录项,使脚本在启动时运行。 - 创建可复用模块 – 将 Lua 模块放在
~/.hammerspoon/modules/,并在init.lua中使用require("module")。
下一步
- 构建自己的自动化工具包:添加自定义媒体控制器、创建窗口平铺管理器,或自动化编程工作流程。
- 试验使用 Hammerspoon 扩展与 Stream Deck 或触控栏集成。
- 探索Hammerspoon 扩展 Wiki,获取高级功能。
通过将 Lua 的简洁与 macOS API 的深度结合,Hammerspoon 让你可以编程桌面,打造专属、响应迅速的环境。开始编码,开启高效之旅吧。
原创文章:
查看原文