読者です 読者をやめる 読者になる 読者になる

HammerspoonではWatcherはグローバルでないとGCされる件

にてwatcherを使った実装をしていましたが、sleepから戻ると実行できなくなっていました。

調べて見ると

Hammerspoon のイベント監視が止まるのはGCのせい - Qiita
GC対象となってしまっていたようです。

対応方法は

local 宣言を外しグローバルスコープにするだけ。

@@ -40,7 +40,7 @@ local notVimBindingApps = {
   "Atom", "CotEditor", "iTerm", "Google Chrome", "Night Owl"
 }

-local function handleGlobalAppEvent(name, event, app)
+function handleGlobalAppEvent(name, event, app)
   if event == hs.application.watcher.activated then
     -- hs.alert(name)
     if hasValue(notVimBindingApps, name) then
@@ -51,7 +51,7 @@ local function handleGlobalAppEvent(name, event, app)
   end
 end

-local appsWatcher = hs.application.watcher.new(handleGlobalAppEvent)
+appsWatcher = hs.application.watcher.new(handleGlobalAppEvent)
 appsWatcher:start()