V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jassssper
V2EX  ›  Apple

hammerspoon 是如何当我当个合格的舔狗的

  •  
  •   jassssper · 17 小时 53 分钟前 · 735 次点击

    1 、痛点: 在 mac 上聊天的时候 iPhone 手机就一直咚咚的响好烦,如果点击顶部把 ”mac 已登录手机通知关闭“ 的话,又会忘了开,导致女神的消息无法及时回复,被 diss 不是一个合格的舔狗,emm...

    2 、观察结论: 如果在 mac 上退出微信的话,手机上的 ”mac 已登录手机通知关闭“ 会自动消掉,手机就能收到通知,从而达到无缝衔接的目的。

    3 、解决思路: 使用 hammerspoon 实现如下功能: a.每 30 秒检查一次键盘和鼠标动作,如果 120 秒没有动作就退出 mac 微信(注意不能用 killall ,否则 iPhone 那边不知道 mac 上已经退出了) b.当检测到有鼠标和键盘动作后,立即调起微信登录

    4 、具体方法: a.下载、安装、打开 hammerspoon ( https://www.hammerspoon.org/) b.打开配置文件写入脚本:

    `local idleLimit = 120 -- 120 秒无操作算不活跃 local checkInterval = 30 -- 每 30 秒检查一次 local wechatBundleID = "com.tencent.xinWeChat"

    local timer = nil local enabled = true local lastRunning = nil -- 记录上一次运行状态,避免重复日志

    -- 判断微信是否运行 local function isWeChatRunning() return hs.application.get(wechatBundleID) ~= nil end

    -- 优雅退出微信 local function quitWeChat(reason) local app = hs.application.get(wechatBundleID) if app then app:kill() hs.alert.show("💤 自动退出微信") print("WeChat quit (" .. (reason or "idle") .. ") at " .. os.date()) lastRunning = false end end

    -- 启动微信 local function launchWeChat(reason) if not enabled then return end if not isWeChatRunning() then hs.application.launchOrFocusByBundleID(wechatBundleID) hs.alert.show("🚀 启动微信") print("WeChat launched (" .. (reason or "active") .. ") at " .. os.date()) lastRunning = true end end

    -- 检查是否该退出 local function checkIdle() if not enabled then return end local idleTime = hs.host.idleTime() local running = isWeChatRunning()

    if running ~= lastRunning then
        print("WeChat running=" .. tostring(running) .. " at " .. os.date())
        lastRunning = running
    end
    
    if idleTime > idleLimit and running then
        quitWeChat("idle")
    end
    

    end

    -- 电源事件监听:休眠时退出微信,唤醒后延迟启动 local sleepWatcher = hs.caffeinate.watcher.new(function(eventType) if eventType == hs.caffeinate.watcher.systemWillSleep then quitWeChat("sleep") elseif eventType == hs.caffeinate.watcher.systemDidWake then hs.timer.doAfter(10, function() launchWeChat("wake") end) elseif eventType == hs.caffeinate.watcher.screensDidSleep then quitWeChat("screens sleep") elseif eventType == hs.caffeinate.watcher.screensDidWake then hs.timer.doAfter(5, function() launchWeChat("screens wake") end) end end) sleepWatcher:start()

    -- 定时器:负责检测是否要退出 if timer then timer:stop() end timer = hs.timer.doEvery(checkInterval, checkIdle)

    -- 事件监听:键盘/鼠标动作 → 立即启动微信 local eventtap = hs.eventtap.new({ hs.eventtap.event.types.keyDown, hs.eventtap.event.types.mouseMoved, hs.eventtap.event.types.leftMouseDown, hs.eventtap.event.types.rightMouseDown }, function(_) launchWeChat("input") return false end) eventtap:start() ` 后记: 1 、在 iPhone 通知栏可设置 1 小时不提醒,今天不提醒,但是这样也是简单粗暴

    2 、微信不像企业微信那样可以设置 5min 10min 无活动就恢复通知

    在 AI 大爆发的时代,他们把东西做成这样我表示很痛心

    9 条回复    2025-09-30 16:24:33 +08:00
    Guino
        1
    Guino  
       17 小时 48 分钟前
    换一个不会 diss 你不合格的女神
    jassssper
        2
    jassssper  
    OP
       17 小时 47 分钟前
    @Guino #1 换不了一点儿
    kiev84
        3
    kiev84  
       17 小时 15 分钟前
    你想表达是「 hammerspoon 是如何帮我当个合格的舔狗的」吧?标题看了半天没看明白。
    huaweii
        4
    huaweii  
       17 小时 13 分钟前 via Android
    「女神的消息如果不立刻回复我就会失去女神」,请问你是?
    zhouweiluan
        5
    zhouweiluan  
       16 小时 58 分钟前   ❤️ 1
    只能说微信这一点是真的智障,QQ 以及企业微信都能监测到电脑长时间无响应会把消息推送到手机,但微信就死活不搞这个,每次都因为离开电脑去吃午饭而错过无数需要及时响应的消息。
    jassssper
        6
    jassssper  
    OP
       16 小时 50 分钟前
    @zhouweiluan #5 试试我上面那个方法就解决啦
    kamikaze472
        7
    kamikaze472  
       14 小时 50 分钟前
    手机打开专注模式的工作模式, 微信就不会一直响了
    suitts
        8
    suitts  
       14 小时 46 分钟前
    哈哈,我是弄的 mac 锁屏退出微信
    killua67
        9
    killua67  
       13 小时 3 分钟前
    我也发现这个问题了,我手机上开了通知,好像只有打开微信界面的时候手机会响,锁屏了不会响,不知道是不是戴了手表的原因 就不推送手机了
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   750 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 21:28 · PVG 05:28 · LAX 14:28 · JFK 17:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.