找回密码
 立即注册
首页 业界区 安全 MacOS cmd tab增强

MacOS cmd tab增强

叟澡帅 2025-6-12 02:20:58
问题背景

在日常使用mac时,经常会使用cmd w关闭窗口或是cmd m最小化窗口,但是使用cmd w或cmd m后,会导致在cmd tab时,虽然会显示该应用,但是无法重新唤起窗口。
比如,使用cmd w关闭spotify或者chatgpt后,cmd tab无法唤醒。
解决方法初探


  • 尝试搜索cmd tab的增强方案,比如 HyperSwitch, Witch, AltTab等软件,但是无法实现需求
  • 改变使用习惯,不使用cmd w或cmd m,而是cmd h,但是cmd h需要两只手按,而cmd w只需要单手,所以也不方便。
Hammerspoon搭配Lua脚本

Hammerspoon 是一款 macOS 自动化工具,可以通过 Lua 脚本控制和增强系统行为。它就像是 macOS 的“自动化万能遥控器”,功能非常强大但也偏技术向。
具体步骤:

  • 安装软件
  • 右键菜单 Open Config 打开配置文件
    1.png

  • 添加脚本
    1. -- 需要管理的 App 列表(可按需扩展)
    2. local managedApps = {
    3.     ["Spotify"] = "com.spotify.client",
    4.     ["ChatGPT"] = "com.openai.chat"
    5. }
    6. -- 保存上次切换的 App,避免重复处理
    7. local lastAppName = nil
    8. -- 应用切换监听器
    9. hs.application.watcher.new(function(appName, eventType, app)
    10.     if eventType == hs.application.watcher.activated then
    11.         -- 避免重复处理相同 App
    12.         if appName == lastAppName then return end
    13.         lastAppName = appName
    14.         -- 延迟执行以等待系统切换完成
    15.         hs.timer.doAfter(0.05, function()
    16.             local frontApp = hs.application.frontmostApplication()
    17.             if not frontApp then return end
    18.             -- 如果是被管理的 App,则尝试恢复窗口
    19.             if managedApps[appName] then
    20.                 local mainWin = frontApp:mainWindow()
    21.                 -- 情况1:窗口存在但被最小化
    22.                 if mainWin and mainWin:isMinimized() then
    23.                     mainWin:unminimize()
    24.                     mainWin:focus()
    25.                 -- 情况2:主窗口不存在(可能被 Cmd+W 关闭)
    26.                 elseif not mainWin then
    27.                     hs.timer.doAfter(0.05, function()
    28.                         hs.application.launchOrFocusByBundleID(managedApps[appName])
    29.                     end)
    30.                 end
    31.             end
    32.         end)
    33.     end
    34. end):start()
    复制代码
  • 右键菜单 Reload Config 打开配置文件
如何添加其他APP:

  • 获取 App 的 Bundle ID:
  1. osascript -e 'id of app "App名称"'
复制代码
例如:
  1. osascript -e 'id of app "WeChat"'
  2. # 输出: com.tencent.xinWeChat
复制代码

  • 在 managedApps 中添加:
  1. ["App显示名"] = "App的BundleID"
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册