diff options
author | Jesse Luehrs <doy@tozt.net> | 2018-11-30 16:13:49 -0800 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2018-11-30 16:14:09 -0800 |
commit | bfe4648ed0ba0d5d2a9870833dec2517905a8901 (patch) | |
tree | 783154f549629b2aed956881f52ca25a2cd2867b | |
parent | 3ba62ac4b8a3f07c0837fd5a1077a53803a44787 (diff) | |
download | conf-bfe4648ed0ba0d5d2a9870833dec2517905a8901.tar.gz conf-bfe4648ed0ba0d5d2a9870833dec2517905a8901.zip |
fix hammerspoon active app tracking
-rw-r--r-- | hammerspoon/init.lua | 22 |
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()) |