You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将按键重映射为执行AppleScript?实现自定义无按键发送控制

我完全懂你想要更灵活的按键映射需求——Karabiner虽好,但在触发自定义脚本、精准控制窗口这块确实有点不够用。下面给你几个靠谱的方案,既能实现小键盘按键触发AppleScript/自定义代码,还能彻底避免向当前活跃应用发送原按键信号:

方案1:用Hammerspoon(最灵活的自定义方案)

Hammerspoon是Mac上的神级自动化工具,完全基于Lua脚本,能实现几乎所有你能想到的系统级操作,包括按键映射、窗口控制、应用调度等等,而且天生支持阻止默认按键事件。

步骤:

  • 安装Hammerspoon(直接从官网下载或者用Homebrew:brew install --cask hammerspoon)
  • 打开Hammerspoon,点击菜单栏的锤子图标,选择「Open Config」,编辑~/.hammerspoon/init.lua文件
  • 添加以下示例代码(以小键盘1映射到聚焦Safari并定位特定窗口为例):
  • 保存文件后,点击Hammerspoon菜单栏的「Reload Config」,设置就生效了。
-- 绑定小键盘1,无修饰键触发
hs.hotkey.bind({}, "kp1", function(event)
  -- 阻止默认按键事件发送,确保原按键不会传给当前应用
  event:suppress()

  -- 尝试获取Safari应用实例
  local safari = hs.application.get("Safari")
  if safari then
    -- 激活Safari
    safari:activate()
    -- 遍历所有窗口,找到标题包含"Stack Overflow"的窗口并聚焦
    local targetWindow = nil
    for _, win in ipairs(safari:allWindows()) do
      if win:title():find("Stack Overflow") then
        targetWindow = win
        break
      end
    end
    if targetWindow then
      targetWindow:focus()
    end
  else
    -- 如果Safari没打开,直接启动并聚焦
    hs.application.launchOrFocus("Safari")
  end
end)

你可以把这段代码复制修改,替换成你需要的应用名称、窗口标题匹配规则,甚至加入更复杂的AppleScript调用(用hs.osascript.applescript()方法)。

方案2:用BetterTouchTool(可视化操作,易上手)

如果你不想写太多代码,BetterTouchTool是个不错的选择——它有直观的GUI界面,支持把任何按键映射到脚本、窗口操作等动作,还能一键阻止原按键信号。

步骤:

  • 安装BetterTouchTool(官网下载或Homebrew:brew install --cask bettertouchtool)
  • 打开BetterTouchTool,切换到「Global」标签页
  • 点击「Add New Trigger」,选择「Keyboard Trigger」
  • 在弹出的窗口里,按下你要映射的小键盘按键(比如小键盘1),然后勾选「Suppress Original Trigger」(这一步是关键,确保原按键不会发送给当前应用)
  • 在「Predefined Actions」里选择「Run AppleScript」,然后输入以下示例代码:
  • 保存设置即可,现在按下小键盘1就会直接触发这段脚本,不会有任何按键信号传给当前应用。
tell application "System Events"
  -- 激活Safari
  set frontmost of application "Safari" to true
  -- 聚焦标题包含"Stack Overflow"的窗口
  repeat with win in windows of application "Safari"
    if name of win contains "Stack Overflow" then
      set index of win to 1
      exit repeat
    end if
  end repeat
end tell
方案3:Karabiner-Elements配合脚本(无需额外工具)

如果你已经习惯用Karabiner,其实它也支持触发shell脚本/AppleScript,只需要修改配置文件,而且能确保原按键不被发送。

步骤:

  • 打开Karabiner-Elements的「Complex Modifications」页面,点击「Add rule」,或者直接编辑~/.config/karabiner/karabiner.json文件
  • 在rules数组里添加以下规则(以小键盘1映射到聚焦Safari为例):
  • 保存配置后,Karabiner会自动加载规则。这里的to字段直接执行shell命令运行AppleScript,不会发送任何原按键信号,完全符合你的需求。
{
  "rules": [
    {
      "description": "小键盘1触发聚焦Safari并定位特定窗口",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "key_code": "keypad_1",
            "modifiers": {
              "optional": ["any"]
            }
          },
          "to": [
            {
              "shell_command": "osascript -e 'tell application \"Safari\" to activate; repeat with win in windows of application \"Safari\" if name of win contains \"Stack Overflow\" then set index of win to 1 end if end repeat'"
            }
          ],
          "to_if_alone": [
            {
              "shell_command": "osascript -e 'tell application \"Safari\" to activate; repeat with win in windows of application \"Safari\" if name of win contains \"Stack Overflow\" then set index of win to 1 end if end repeat'"
            }
          ]
        }
      ]
    }
  ]
}

内容的提问来源于stack exchange,提问作者Brigand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:39:08