[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.
pull/37/head
Alpha Chen 3 years ago
parent a814454fd4
commit bef2ae3878

@ -1,6 +1,6 @@
--- === Quitter === --- === 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 = {} local obj = {}
obj.__index = obj obj.__index = obj
@ -69,32 +69,37 @@ function obj:reset()
local name = app:name() local name = app:name()
local duration = self.quitAppsAfter[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() self.lastFocused[name] = os.time()
end) end)
end end
function obj:reap() function obj:shouldQuit(app)
self.logger.d("reaping") if app == nil then return false end
local appsToQuit = hs.fnutils.ifilter(hs.application.runningApplications(), function(app)
local appName = app:name()
-- Don't quit the currently focused app -- Don't quit the currently focused app
if app:isFrontmost() then return false end if app:isFrontmost() then return false end
local duration = self.quitAppsAfter[appName] local duration = self.quitAppsAfter[app:name()]
if not duration then return false end if duration == nil then return false end
local lastFocused = self.lastFocused[appName] local lastFocused = self.lastFocused[app:name()]
if not lastFocused then return false end 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 return (os.time() - lastFocused) > duration
end) end
for _, app in pairs(appsToQuit) do function obj:reap()
self.logger.d("reaping")
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({ hs.notify.new({
title = "Hammerspoon", title = "Hammerspoon",
informativeText = "Quitting " .. app:name(), informativeText = "Quitting " .. app:name(),
@ -103,6 +108,7 @@ function obj:reap()
app:kill() app:kill()
self.lastFocused[app:name()] = nil self.lastFocused[app:name()] = nil
end end
end
end end
return obj return obj

@ -2,7 +2,7 @@
(set hs.window.animationDuration 0.0) (set hs.window.animationDuration 0.0)
(hs.loadSpoon "MiroWindowsManager") (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] (let [mash [:cmd :alt :ctrl]
smash [:cmd :alt :ctrl :shift]] smash [:cmd :alt :ctrl :shift]]
(spoon.MiroWindowsManager:bindHotkeys { (spoon.MiroWindowsManager:bindHotkeys {
@ -43,7 +43,7 @@
(hs.loadSpoon "Quitter") (hs.loadSpoon "Quitter")
(set spoon.Quitter.quitAppsAfter { (set spoon.Quitter.quitAppsAfter {
;; :Discord 300 :Discord 300
:Flotato 300 :Flotato 300
:MailMate 300 :MailMate 300
:Messages 300 :Messages 300

Loading…
Cancel
Save