Hammerspoon hs.application:kill() 不可调用

尝试在 OSX 中让 Hammerspoon 在音乐应用启动时退出 (kill) (该应用程序已被苹果安装,使其非常难以更改,并且每当连接蓝牙设备时就会启动,基本上是恼人的垃圾软件)。所以,我从 Hammerspoon 的“入门”页面中借了这个 https://www.hammerspoon.org/go/...

function applicationWatcher(appName, eventType, appObject)
  if (eventType == hs.application.watcher.launched) then
    if (appName == "Music") then
      hs.application:kill()
    end
  end
end
appWatcher = hs.application.watcher.new(applicationWatcher)
appWatcher:start()

这样正确响应音乐应用程序的启动,但是出现错误 ERROR: LuaSkin: hs.application.watcher callback: /Users/seancamden/.hammerspoon/init.lua:142: method 'kill' is not callable (a nil value)

我该如何使该方法可调用?或者,正确的做法是什么?

https://www.hammerspoon.org/docs/hs.application.watcher.html https://www.hammerspoon.org/docs/hs.application.html#kill

点赞
用户4075928
用户4075928

你的代码基本上是对的,只有一个错误。你使用了全局模块hs.application并尝试从中调用对象方法:kill()。你需要先实例化一个新对象才能调用它的kill方法。例如:hs.application.get(appName):kill()

然而,观察器已经提供了调用该函数的应用程序对象作为appObject。因此,appObject:kill()就是你要找的。

function applicationWatcher(appName, eventType, appObject)
  if (eventType == hs.application.watcher.launched) then
    if (appName == "Music") then
      appObject:kill()
    end
  end
end

appWatcher = hs.application.watcher.new(applicationWatcher)
appWatcher:start()

在MacOS BigSur上测试过。

2021-08-06 01:33:31