[hammerspoon] quitter

main
Alpha Chen 3 days ago
parent 6cd8ea8d00
commit 0b15fd2be2
Signed by: alpha
SSH Key Fingerprint: SHA256:3fOT8fiYQG/aK9ntivV3Bqtg8AYQ7q4nV6ZgihOA20g

@ -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 {}) (local to-kill {})
(fn kill [app] (fn kill [app]
(when (not (app:isFrontmost)) (when (not (app:isFrontmost))
(log.i (.. "killing " (app:name))) (log.i (.. "killing " (app:name)))
(app:kill))) (let [focused-win (window.focusedWindow)]
(app:kill)
(fn mark [app] (focused-win:focus))))
(when (= (app:kind) 1)
(log.i (.. "marking " (app:name)))
(set (. to-kill (app:bundleID)) (timer.doAfter 300 #(kill app)))))
(fn unmark [win] (fn unmark [app]
(let [app (win:application) (let [bundle-id (app:bundleID)
bundle-id (app:bundleID)
t (?. to-kill bundle-id)] t (?. to-kill bundle-id)]
(when (not= t nil) (when (not= t nil)
(log.i (.. "unmarking " (app:name))) (log.i (.. "unmarking " (app:name)))
(t:stop) (t:stop)
(set (. to-kill bundle-id) nil)))) (set (. to-kill bundle-id) nil))))
(fn mark-all-apps [event] (fn mark [app]
(when (= event caffeinate.watcher.systemDidWake) (when (= (app:kind) 1)
(each [_ app (ipairs (application.find ""))] (unmark app)
(mark 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 (local wf (window.filter.new {:Safari false
:Arc false :Arc false
@ -43,7 +57,7 @@
(log.i :starting) (log.i :starting)
(mark-all-apps) (mark-all-apps)
(cw:start) (cw:start)
(wf:subscribe {window.filter.windowFocused unmark (wf:subscribe {window.filter.windowFocused #(unmark ($1:application))
window.filter.windowUnfocused #(mark ($1:application))})) window.filter.windowUnfocused #(mark ($1:application))}))
;; use global so this isn't GC'ed ;; use global so this isn't GC'ed

Loading…
Cancel
Save