Last active
May 12, 2022 21:30
-
-
Save dominicfreeston/76d4adc6b3594a345f8d2cf683c51a88 to your computer and use it in GitHub Desktop.
Reload browser on file-change (Ubuntu/xdotool/babashka)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bb | |
(require '[babashka.pods :as pods]) | |
(pods/load-pod 'org.babashka/fswatcher "0.0.3") | |
(require '[pod.babashka.fswatcher :as fw]) | |
(println "select window to reload") | |
;; This will block the script until the user has selected a window | |
(def browser-window (:out (shell/sh "xdotool" "selectwindow"))) | |
(println "will reload" (:out (shell/sh "xdotool" "getwindowname" browser-window))) | |
(defn reload [] | |
(println "reloading...") | |
(shell/sh "xdotool" "key" "--window" browser-window "F5")) | |
;; This implements a debounce mechanism where we want to | |
;; delay triggering the reload until we stop receiving events. | |
(def reload-op (atom nil)) | |
(defn trigger-reload [_] | |
(let [[old _] (reset-vals! reload-op (future (Thread/sleep 20) (reload)))] | |
(when old (future-cancel old)))) | |
(let [folder (first *command-line-args*)] | |
(fw/watch folder | |
trigger-reload | |
{:delay-ms 0 :recursive true}) | |
(println "watching" (str (fs/canonicalize folder)))) | |
@(promise) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment