V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
g1vemep0wer

给 macOS 用户分享一下自用 hammerspoon 脚本

  •  2
     
  •   g1vemep0wer · 2024 年 4 月 12 日 · 2978 次点击
    这是一个创建于 742 天前的主题,其中的信息可能已经有所发展或是发生改变。

    hammerspoon 已经成功让我卸掉了好几个第三方软件,今天分享一些自用脚本

    源码仓库地址 👉 https://github.com/xiaojundebug/hammerspoon-config

    介绍

    1. scripts/auto-switch-input-method.lua 根据 app 自动切换输入法,一定程序上取代 SwitchKeyInputSourcePro

    2. scripts/input-method-indicator.lua 自带输入法没有指示器,经常输错中英文,它可以在屏幕顶部显示一条横线,最近我将它支持了渐变色,看上去更美观,一定程序上取代 ShowEdge Imgur

    3. scripts/ring.lua 一个丝滑的环形 App 启动器,我甚至为它加上了过渡动画,用 + tab 呼出,划到目标处松开键盘即可, 一定程序上提高软件打开效率 Imgur

    4. scripts/caffeinated.lua 在状态栏放了一个 icon ,点击使 mac 禁止睡眠

    5. scripts/defeating-paste-blocking.lua 官方示例,部分网站禁止用户粘贴,它可以通过模拟输入事件将字符逐个键入,快捷键 + + v

    6. https://github.com/xiaojundebug/hammerspoon-config/blob/main/scripts/wifi-mute.lua 连接公司 wifi 后自动静音

    7. scripts/show-launchpad.lua macOS 有个很蠢的 bug ,设置中配置的启动台快捷键经常失效,那就用脚本代替它吧

    另外还有一个没在仓库中的脚本,名叫“暗格”,如有人需要我再放进去

    Imgur

    各位有啥创意可以提高效率,欢迎提意见~

    10 条回复    2026-04-09 23:03:27 +08:00
    NoLifeRyan
        1
    NoLifeRyan  
       2024 年 12 月 6 日
    输入法指示器好像无效? macOS 14.7
    NoLifeRyan
        2
    NoLifeRyan  
       2024 年 12 月 6 日
    @NoLifeRyan 有效,我的问题,怎么删除这条
    g1vemep0wer
        3
    g1vemep0wer  
    OP
       2025 年 1 月 12 日
    由于文件命名有改变,所以文中地址访问会 404 ,有需要的可以访问 https://github.com/xiaojundebug/hammerspoon-config
    yukminnie
        4
    yukminnie  
       2 月 2 日
    谢谢分享, 用起来.
    19cm
        5
    19cm  
       17 天前
    老哥,想请教下您, input_method_indicator.lua 这个我想改成监听 只监听微信输入法的中英文切换,有办法做到吗,试了几个 ai 写的都不行
    g1vemep0wer
        6
    g1vemep0wer  
    OP
       17 天前
    @19cm 这个真不清楚,我没用过微信自带的英文输入,只用微信的中文输入
    19cm
        7
    19cm  
       17 天前
    @g1vemep0wer #6 还有个问题,想请教下 mac 有没有辅助软件能做到 监听指定软件 当指定点击软件关闭按钮时 让软件强行退出并且在 dock 栏干掉 lua 我写了个不行,只能退出不会在 dock 干掉

    -- ===================== 配置区:只改这里 =====================
    -- 要监控的软件名称(必须和应用名称完全一致,可在活动监视器看)
    local TARGET_APPS = {
    'IINA'
    }
    -- ==========================================================

    -- 创建窗口过滤器:只监听目标应用
    local wf = hs.window.filter.new(TARGET_APPS)

    -- 监听 [窗口被销毁] (点 X 关闭)
    wf:subscribe(hs.window.filter.windowDestroyed, function(win)
    if not win then return end

    local app = win:application()
    if not app then return end
    local appName = app:name()

    -- 延迟 0.2s 再判断,避免窗口还没完全销毁时判断错误
    hs.timer.doAfter(0.2, function()
    -- 检查该应用是否**已经没有任何窗口**
    local allWindows = app:allWindows()
    if not allWindows or #allWindows == 0 then
    -- 强制退出进程
    app:kill()
    -- 可选:通知中心提示(可删掉)
    hs.notify.new({
    title = "已强制退出",
    subTitle = appName,
    autoWithdraw = true
    }):send()
    end
    end)
    end)
    g1vemep0wer
        8
    g1vemep0wer  
    OP
       16 天前
    @19cm 不清楚,退出 app 简单,但是想从 dock 栏移除我印象里没看到过类似 api ,系统默认的行为,就算手动退出也会有记录,但是你可以手动关闭 dock 历史记录功能,这样 dock 右边这块所有记录都没了
    g1vemep0wer
        9
    g1vemep0wer  
    OP
       16 天前
    @19cm 或者你直接编辑 ~/Library/Preferences/com.apple.dock.plist 文件,里边存了最近打开的 app ,删除后,kill dock 也能曲线救国
    19cm
        10
    19cm  
       15 天前
    @g1vemep0wer #9 诶,找不到完美方案,我干脆直接 把 在程序坞中显示建议 App 和最近使用的 App 给关掉了,至少不会让 iina 这种占位置了
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   3023 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 07:21 · PVG 15:21 · LAX 00:21 · JFK 03:21
    ♥ Do have faith in what you're doing.