[hammerspoon] Quitter updates
Make Quitter more performant - don't iterate over all running
applications, only ones that we intend on quitting.
Re-enable quitting Discord.
diff --git a/.hammerspoon/Spoons/Quitter.spoon/init.lua b/.hammerspoon/Spoons/Quitter.spoon/init.lua
index 2d1a8873..a18f3eef 100644
--- a/.hammerspoon/Spoons/Quitter.spoon/init.lua
+++ b/.hammerspoon/Spoons/Quitter.spoon/init.lua
@@ -1,6 +1,6 @@
--- === Quitter ===
--
--- Quits configured apps if they have not been used since a specified amount of time.
+-- Quits apps if they have not been used since a specified amount of time.
local obj = {}
obj.__index = obj
@@ -69,39 +69,45 @@ function obj:reset()
local name = app:name()
local duration = self.quitAppsAfter[name]
- if not duration then return false end
+ if duration == nil then return false end
self.lastFocused[name] = os.time()
end)
end
-function obj:reap()
- self.logger.d("reaping")
- local appsToQuit = hs.fnutils.ifilter(hs.application.runningApplications(), function(app)
- local appName = app:name()
+function obj:shouldQuit(app)
+ if app == nil then return false end
- -- Don't quit the currently focused app
- if app:isFrontmost() then return false end
+ -- Don't quit the currently focused app
+ if app:isFrontmost() then return false end
- local duration = self.quitAppsAfter[appName]
- if not duration then return false end
+ local duration = self.quitAppsAfter[app:name()]
+ if duration == nil then return false end
- local lastFocused = self.lastFocused[appName]
- if not lastFocused then return false end
+ local lastFocused = self.lastFocused[app:name()]
+ if lastFocused == nil then return false end
- self.logger.d("app: " .. appName .. " last focused at " .. lastFocused)
+ self.logger.d("app: " .. app:name() .. " last focused at " .. lastFocused)
- return (os.time() - lastFocused) > duration
- end)
+ return (os.time() - lastFocused) > duration
+end
+
+function obj:reap()
+ self.logger.d("reaping")
- for _, app in pairs(appsToQuit) do
- hs.notify.new({
- title = "Hammerspoon",
- informativeText = "Quitting " .. app:name(),
- withdrawAfter = 2,
- }):send()
- app:kill()
- self.lastFocused[app:name()] = nil
+ local frontmostApp = hs.application.frontmostApplication()
+ for appName, _ in pairs(self.quitAppsAfter) do
+ local app = hs.application.get(appName)
+
+ if self:shouldQuit(app) then
+ hs.notify.new({
+ title = "Hammerspoon",
+ informativeText = "Quitting " .. app:name(),
+ withdrawAfter = 2,
+ }):send()
+ app:kill()
+ self.lastFocused[app:name()] = nil
+ end
end
end
diff --git a/.hammerspoon/init.fnl b/.hammerspoon/init.fnl
index 7faca177..19704d66 100644
--- a/.hammerspoon/init.fnl
+++ b/.hammerspoon/init.fnl
@@ -2,7 +2,7 @@
(set hs.window.animationDuration 0.0)
(hs.loadSpoon "MiroWindowsManager")
-(set spoon.MiroWindowsManager.fullScreenSizes [1]) ;; only fullscreen
+;; (set spoon.MiroWindowsManager.fullScreenSizes [1 (/ 4 3) 2]) ;; only fullscreen
(let [mash [:cmd :alt :ctrl]
smash [:cmd :alt :ctrl :shift]]
(spoon.MiroWindowsManager:bindHotkeys {
@@ -43,7 +43,7 @@
(hs.loadSpoon "Quitter")
(set spoon.Quitter.quitAppsAfter {
- ;; :Discord 300
+ :Discord 300
:Flotato 300
:MailMate 300
:Messages 300