[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.
change
commit bef2ae387894281621dda1e05976347ea77387a4
author Alpha Chen <alpha@kejadlen.dev>
date
parent a814454f
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