叟澡帅 发表于 2025-6-12 02:20:58

MacOS cmd tab增强

问题背景

在日常使用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 打开配置文件

[*]添加脚本
-- 需要管理的 App 列表(可按需扩展)
local managedApps = {
    ["Spotify"] = "com.spotify.client",
    ["ChatGPT"] = "com.openai.chat"
}

-- 保存上次切换的 App,避免重复处理
local lastAppName = nil

-- 应用切换监听器
hs.application.watcher.new(function(appName, eventType, app)
    if eventType == hs.application.watcher.activated then
      -- 避免重复处理相同 App
      if appName == lastAppName then return end
      lastAppName = appName

      -- 延迟执行以等待系统切换完成
      hs.timer.doAfter(0.05, function()
            local frontApp = hs.application.frontmostApplication()
            if not frontApp then return end

            -- 如果是被管理的 App,则尝试恢复窗口
            if managedApps then
                local mainWin = frontApp:mainWindow()

                -- 情况1:窗口存在但被最小化
                if mainWin and mainWin:isMinimized() then
                  mainWin:unminimize()
                  mainWin:focus()

                -- 情况2:主窗口不存在(可能被 Cmd+W 关闭)
                elseif not mainWin then
                  hs.timer.doAfter(0.05, function()
                        hs.application.launchOrFocusByBundleID(managedApps)
                  end)
                end
            end
      end)
    end
end):start()
[*]右键菜单 Reload Config 打开配置文件
如何添加其他APP:

[*]获取 App 的 Bundle ID:
osascript -e 'id of app "App名称"'例如:
osascript -e 'id of app "WeChat"'
# 输出: com.tencent.xinWeChat

[*]在 managedApps 中添加:
["App显示名"] = "App的BundleID"
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: MacOS cmd tab增强