summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2018-11-30 16:13:49 -0800
committerJesse Luehrs <doy@tozt.net>2018-11-30 16:14:09 -0800
commitbfe4648ed0ba0d5d2a9870833dec2517905a8901 (patch)
tree783154f549629b2aed956881f52ca25a2cd2867b
parent3ba62ac4b8a3f07c0837fd5a1077a53803a44787 (diff)
downloadconf-bfe4648ed0ba0d5d2a9870833dec2517905a8901.tar.gz
conf-bfe4648ed0ba0d5d2a9870833dec2517905a8901.zip
fix hammerspoon active app tracking
-rw-r--r--hammerspoon/init.lua22
1 files changed, 20 insertions, 2 deletions
diff --git a/hammerspoon/init.lua b/hammerspoon/init.lua
index 2f6b836..072957f 100644
--- a/hammerspoon/init.lua
+++ b/hammerspoon/init.lua
@@ -112,23 +112,41 @@ end)
-- hs.eventtap.keyStroke({"cmd", "option"}, "i")
-- end)
+possibly_active_apps = {}
+current_app_name = nil
+
function enter_bindings(name)
if extra_bindings[name] then
extra_bindings[name]:enter()
+ current_app_name = name
end
end
function exit_bindings(name)
if extra_bindings[name] then
extra_bindings[name]:exit()
+ current_app_name = nil
end
end
+-- the application watcher receives notifications about new apps being
+-- activated before the old apps are deactivated, so we have to hack around
+-- that a bit
current_application_watcher = hs.application.watcher.new(function(name, event_type, app)
if event_type == hs.application.watcher.activated then
- enter_bindings(app:name())
+ possibly_active_apps[app:pid()] = app
elseif event_type == hs.application.watcher.deactivated then
- exit_bindings(app:name())
+ possibly_active_apps[app:pid()] = nil
+ end
+
+ apps = {}
+ for _, v in pairs(possibly_active_apps) do
+ table.insert(apps, v)
+ end
+
+ if #apps == 1 and apps[1]:name() ~= current_app_name then
+ exit_bindings(current_app_name)
+ enter_bindings(apps[1]:name())
end
end)
enter_bindings(hs.application.frontmostApplication():name())