问题背景
在日常使用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[appName] 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[appName])
- end)
- end
- end
- end)
- end
- end):start()
复制代码 - 右键菜单 Reload Config 打开配置文件
如何添加其他APP:
- osascript -e 'id of app "App名称"'
复制代码 例如:- osascript -e 'id of app "WeChat"'
- # 输出: com.tencent.xinWeChat
复制代码- ["App显示名"] = "App的BundleID"
复制代码 来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |