diff --git a/.hammerspoon/quitter.fnl b/.hammerspoon/quitter.fnl
index b90d45e4..09cb0915 100644
--- a/.hammerspoon/quitter.fnl
+++ b/.hammerspoon/quitter.fnl
@@ -1,34 +1,48 @@
-(local {: application : caffeinate : logger : timer : window} hs)
+(local {: application : caffeinate : fnutils : logger : timer : window} hs)
-(local log (logger.new :quitter :info))
+(local {: contains : ifilter} fnutils)
+
+(local log (logger.new :quitter :debug))
+
+(local keep-apps [:Safari
+ :Arc
+ "Firefox Developer Edition"
+ :Ghostty
+ :Miniflux
+ :Phanpy
+ :Obsidian])
(local to-kill {})
(fn kill [app]
(when (not (app:isFrontmost))
(log.i (.. "killing " (app:name)))
- (app:kill)))
-
-(fn mark [app]
- (when (= (app:kind) 1)
- (log.i (.. "marking " (app:name)))
- (set (. to-kill (app:bundleID)) (timer.doAfter 300 #(kill app)))))
+ (let [focused-win (window.focusedWindow)]
+ (app:kill)
+ (focused-win:focus))))
-(fn unmark [win]
- (let [app (win:application)
- bundle-id (app:bundleID)
+(fn unmark [app]
+ (let [bundle-id (app:bundleID)
t (?. to-kill bundle-id)]
(when (not= t nil)
(log.i (.. "unmarking " (app:name)))
(t:stop)
(set (. to-kill bundle-id) nil))))
-(fn mark-all-apps [event]
- (when (= event caffeinate.watcher.systemDidWake)
- (each [_ app (ipairs (application.find ""))]
- (mark app))))
+(fn mark [app]
+ (when (= (app:kind) 1)
+ (unmark app)
+ (log.i (.. "marking " (app:name)))
+ (set (. to-kill (app:bundleID)) (timer.doAfter 300 #(kill app)))))
+
+(fn mark-all-apps []
+ (log.d :mark-all-apps)
+ (each [_ app (ipairs (ifilter [(application.find "")]
+ #(not (contains keep-apps ($1:name)))))]
+ (mark app)))
-(local cw (caffeinate.watcher.new mark-all-apps))
+(local cw (caffeinate.watcher.new #(when (= $1 caffeinate.watcher.systemDidWake)
+ (mark-all-apps))))
(local wf (window.filter.new {:Safari false
:Arc false
@@ -43,7 +57,7 @@
(log.i :starting)
(mark-all-apps)
(cw:start)
- (wf:subscribe {window.filter.windowFocused unmark
+ (wf:subscribe {window.filter.windowFocused #(unmark ($1:application))
window.filter.windowUnfocused #(mark ($1:application))}))
;; use global so this isn't GC'ed