Mac Hammerspoon是OS X的桌面自动化工具。它将各种系统级API连接到Lua脚本引擎,允许您通过编写Lua脚本对系统产生强大的影响。这次小编给大家讲解一下Hammerspoon for Mac(自动化批处理软件) 如何对应用程序事件和wifi事件做出反应?
对应用程序事件做出反应
使用hs.application.watcher
回调,我们可以对各种应用程序级事件做出反应,例如正在启动,退出,隐藏和激活的应用程序。
我们可以通过创建一个非常简单的回调来证明这一点,这将确保当您激活Finder应用程序时,它的所有窗口都将被带到显示器的前面。
function applicationWatcher(appName, eventType, appObject)
if (eventType == hs.application.watcher.activated) then
if (appName == "Finder") then
-- Bring all Finder windows forward when one gets activated
appObject:selectMenuItem({"Window", "Bring All to Front"})
end
end
end
appWatcher = hs.application.watcher.new(applicationWatcher)
appWatcher:start()
首先,我们定义一个接受三个参数的回调函数,并在其中检查触发该函数的事件类型是否是一个被激活的应用程序。然后我们检查被激活的应用程序是否是Finder。如果是,我们选择其菜单项将其所有窗口都放在前面。
然后,我们创建一个应用程序观察器对象,它将调用我们的函数,并告诉它启动。
请注意,我们保留了对watcher对象的引用,而不是简单地调用hs.application.watcher.new(applicationWatcher):start()
。这样做的原因是,:stop()
如果我们需要,我们可以稍后调用观察者(例如,在重新加载我们的配置的函数中 - 有关如何自动重新加载Hammerspoon配置的信息,请参阅Fancy Config Reloading示例)。
对wifi事件做出反应
如果你使用MacBook,那么你家里可能有一个WiFi网络。Hammerspoon在您到家并加入您的WiFi网络或离家出发并离开网络时触发事件非常简单。在这种情况下,我们将做一些简单的事情并调整MacBook的音量,使其在您离家时为零(保护您免受在咖啡店打开MacBook并肆无忌惮地播放音乐的耻辱感)在家里玩!)
wifiWatcher = nil
homeSSID = "MyHomeNetwork"
lastSSID = hs.wifi.currentNetwork()
function ssidChangedCallback()
newSSID = hs.wifi.currentNetwork()
if newSSID == homeSSID and lastSSID ~= homeSSID then
-- We just joined our home WiFi network
hs.audiodevice.defaultOutputDevice():setVolume(25)
elseif newSSID ~= homeSSID and lastSSID == homeSSID then
-- We just departed our home WiFi network
hs.audiodevice.defaultOutputDevice():setVolume(0)
end
lastSSID = newSSID
end
wifiWatcher = hs.wifi.watcher.new(ssidChangedCallback)
wifiWatcher:start()
在这里,我们创建了一个回调函数,将当前WiFi网络的名称与之前网络的名称进行比较,并检查我们是否已从预定义的家庭网络转移到其他地方,反之亦然,然后用于hs.audiodevice
调整系统容量。