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.windowhs.pathmonitorhs.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 流水线。

高级用户技巧

  1. 高效重载 – 按 Cmd‑Option‑F 重新加载配置,而无需重启应用。
  2. 使用 Spoon 支持hs.loadSpoon("<name>") 加载第三方库,例如 WindowDesktop
  3. 使用 Console 调试hs.debug.disable() 可以隐藏调试输出,或使用 print 语句追踪逻辑。
  4. 登录时自动化 – 将 ~/.hammerspoon/init.lua 加入登录项,使脚本在启动时运行。
  5. 创建可复用模块 – 将 Lua 模块放在 ~/.hammerspoon/modules/,并在 init.lua 中使用 require("module")

下一步

  • 构建自己的自动化工具包:添加自定义媒体控制器、创建窗口平铺管理器,或自动化编程工作流程。
  • 试验使用 Hammerspoon 扩展与 Stream Deck 或触控栏集成。
  • 探索Hammerspoon 扩展 Wiki,获取高级功能。

通过将 Lua 的简洁与 macOS API 的深度结合,Hammerspoon 让你可以编程桌面,打造专属、响应迅速的环境。开始编码,开启高效之旅吧。

原创文章: 查看原文

分享本文