在苹果笔记本上做到win+数字键切换应用

94 阅读3分钟

最终实现的效果是option+1跳转到Cursor,option+2跳转到Chrome,当我第二次按option+2,会回到上一次打开的应用,也就是Cursor

下载Hammerspoon

  1. 打开浏览器,访问 Hammerspoon 的官方 GitHub 发布页面:github.com/Hammerspoon… 。
  2. 在该页面,你会看到最新版本的 Hammerspoon 安装包(通常为.dmg格式)。点击下载链接,等待下载完成。
  3. 下载完成后,找到下载的.dmg文件并双击打开它。
  4. 在弹出的安装窗口中,将 “Hammerspoon.app” 图标拖移到 “应用程序” 文件夹图标上,以完成安装。

要手动创建init.lua,这个是配置文件,用来编写跳转逻辑。Cursor帮我创建。

每次修改需要执行Reload Config,但是当时图标没有显示在右上角,Cursor帮我解决。

image.png

最终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也是尝试了很多方案。