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