Guest User

Untitled

a guest
Jul 22nd, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.14 KB | None | 0 0
  1. #!/usr/bin/env gosh
  2. (use file.util)
  3. (use srfi-1)
  4.  
  5.  
  6. (define (make-ext-matcher extensions)
  7. (let1 exts (map string->symbol extensions)
  8. (lambda (path)
  9. (let1 ext (string->symbol (or (path-extension path) ""))
  10. (find (lambda (e) (eq? e ext)) exts)))))
  11.  
  12. (define (build-tree path ext-matcher)
  13. (filter-map (lambda (p)
  14. (cond ((file-is-directory? p) (build-tree p ext-matcher))
  15. ((ext-matcher p) (list p (file-mtime p)))
  16. (else #f)))
  17. (directory-list path :children? #t :add-path? #t)))
  18.  
  19. (define (watch path exts command)
  20. (let* ((matcher (make-ext-matcher (string-split exts #\,)))
  21. (tree (build-tree path matcher)))
  22. (let loop ((cur tree) (pre tree))
  23. (unless (equal? cur pre)
  24. (sys-system command))
  25. (sys-sleep 1)
  26. (loop (build-tree path matcher) cur))))
  27.  
  28. (define (usage progname)
  29. (format (current-error-port) "usage: ~s path-to-watch extentions command\n" progname)
  30. (sys-exit 1))
  31.  
  32. (define (main args)
  33. (unless (= (length args) 4)
  34. (usage (car args)))
  35. (apply watch (cdr args)))
Add Comment
Please, Sign In to add comment