最终实现的效果是option+1跳转到Cursor,option+2跳转到Chrome,当我第二次按option+2,会回到上一次打开的应用,也就是Cursor
下载Hammerspoon
- 打开浏览器,访问 Hammerspoon 的官方 GitHub 发布页面:github.com/Hammerspoon… 。
- 在该页面,你会看到最新版本的 Hammerspoon 安装包(通常为
.dmg格式)。点击下载链接,等待下载完成。 - 下载完成后,找到下载的
.dmg文件并双击打开它。 - 在弹出的安装窗口中,将 “Hammerspoon.app” 图标拖移到 “应用程序” 文件夹图标上,以完成安装。
要手动创建init.lua,这个是配置文件,用来编写跳转逻辑。Cursor帮我创建。
每次修改需要执行Reload Config,但是当时图标没有显示在右上角,Cursor帮我解决。
最终init.lua内容如下
-- 跟踪上一个应用
local lastApp = nil
-- 跟踪终端状态
local terminalActive = false
-- Option+1 切换 Cursor,再按切换到上一个应用
hs.hotkey.bind({"alt"}, "1", function()
local currentApp = hs.application.frontmostApplication()
local cursorApp = hs.application.find("Cursor")
if cursorApp then
-- 如果 Cursor 已经运行
if currentApp:bundleID() == cursorApp:bundleID() then
-- 如果当前是 Cursor,切换到上一个应用
if lastApp and lastApp:isRunning() then
lastApp:activate()
end
else
-- 如果当前不是 Cursor,记录当前应用并切换到 Cursor
lastApp = currentApp
cursorApp:activate()
end
else
-- 如果 Cursor 没运行,记录当前应用并启动 Cursor
lastApp = currentApp
hs.application.launchOrFocus("Cursor")
end
end)
-- Option+2 切换 Chrome,再按切换到上一个应用
hs.hotkey.bind({"alt"}, "2", function()
local currentApp = hs.application.frontmostApplication()
local chromeApp = hs.application.find("Google Chrome")
if chromeApp then
if currentApp:bundleID() == chromeApp:bundleID() then
if lastApp and lastApp:isRunning() then
lastApp:activate()
end
else
lastApp = currentApp
chromeApp:activate()
end
else
lastApp = currentApp
hs.application.launchOrFocus("Google Chrome")
end
end)
-- Option+3 切换 Fork,再按切换到上一个应用
hs.hotkey.bind({"alt"}, "3", function()
local currentApp = hs.application.frontmostApplication()
local forkApp = hs.application.find("Fork")
if forkApp then
if currentApp:bundleID() == forkApp:bundleID() then
if lastApp and lastApp:isRunning() then
lastApp:activate()
end
else
lastApp = currentApp
forkApp:activate()
end
else
lastApp = currentApp
hs.application.launchOrFocus("Fork")
end
end)
-- Option+4 切换豆包,再按切换到上一个应用
hs.hotkey.bind({"alt"}, "4", function()
local currentApp = hs.application.frontmostApplication()
local doubaoApp = hs.application.find("豆包") or hs.application.find("Doubao")
if doubaoApp then
if currentApp:bundleID() == doubaoApp:bundleID() then
if lastApp and lastApp:isRunning() then
lastApp:activate()
end
else
lastApp = currentApp
doubaoApp:activate()
end
else
lastApp = currentApp
hs.application.launchOrFocus("豆包")
end
end)
-- Option+5 切换飞书,再按切换到上一个应用
hs.hotkey.bind({"alt"}, "5", function()
local currentApp = hs.application.frontmostApplication()
local feishuApp = hs.application.find("飞书") or hs.application.find("Lark") or hs.application.find("Feishu")
if feishuApp then
if currentApp:bundleID() == feishuApp:bundleID() then
if lastApp and lastApp:isRunning() then
lastApp:activate()
end
else
lastApp = currentApp
feishuApp:activate()
end
else
lastApp = currentApp
hs.application.launchOrFocus("飞书")
end
end)
-- Option+6 切换终端,再按切换到上一个应用
hs.hotkey.bind({"alt"}, "6", function()
local currentApp = hs.application.frontmostApplication()
local terminalApp = hs.application.find("Terminal")
if terminalApp then
if terminalActive then
-- 如果终端是活跃状态,切换到上一个应用
if lastApp and lastApp:isRunning() then
lastApp:activate()
end
terminalActive = false
else
-- 如果终端不是活跃状态,记录当前应用并切换到终端
lastApp = currentApp
hs.application.launchOrFocus("Terminal")
terminalActive = true
end
else
-- 如果终端没运行,记录当前应用并启动终端
lastApp = currentApp
hs.application.launchOrFocus("Terminal")
terminalActive = true
end
end)
选择option键,因为我想f12直接打开控制台,就修改了默认行为,使用fn切换应用就变成按1直接切换。control、command有些程序用来切换标签页。
之前想按下快捷键切换,再按缩小,但是Cursor尝试很多方案都不行,就改成切换到上一个打开的应用。
比较特殊的是跳转到终端,这个Cursor也是尝试了很多方案。