X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=8sync%2Fagenda.scm;h=e747899a93f054865a319fdd4eef55d267e29b52;hb=cf4f09fb7e81655c6c47f49a884c95e3d88d7b5b;hp=f20fffe889507a936a1e13df3d70f51c82c5a2ac;hpb=ac6b7ab9cd36a5960f8289d6225a1c187debe777;p=8sync.git diff --git a/8sync/agenda.scm b/8sync/agenda.scm index f20fffe..e747899 100644 --- a/8sync/agenda.scm +++ b/8sync/agenda.scm @@ -1,5 +1,5 @@ ;;; 8sync --- Asynchronous programming for Guile -;;; Copyright (C) 2015 Christopher Allan Webber +;;; Copyright (C) 2015, 2016 Christopher Allan Webber ;;; ;;; This file is part of 8sync. ;;; @@ -72,6 +72,7 @@ 8sync-run 8sync-run-at 8sync-run-delay 8sync-port 8sync-port-remove 8sync-nowait + 8sleep catch-8sync @@ -617,6 +618,11 @@ forge ahead in our current function!" (else (raise '8sync-caught-error orig-key orig-args orig-stacks)))))) +;; This is sugar... and could probably be considerably +;; simplified and optimized. But whatever. +(define-syntax-rule (8sleep time) + (8sync-delay 'no-op time)) + ;;; Execution of agenda, and current agenda @@ -745,7 +751,9 @@ Also handles sleeping when all we have to do is wait on the schedule." ;; the default stop-condition? (stop-condition stop-on-nothing-to-do) (get-time gettimeofday) - (handle-ports update-agenda-from-select!)) + (handle-ports update-agenda-from-select!) + ;; For live hacking madness, etc + (post-run-hook #f)) ;; TODO: Document fields "Start up the AGENDA" (let loop ((agenda agenda)) @@ -754,6 +762,11 @@ Also handles sleeping when all we have to do is wait on the schedule." ;; select'ing on ports. ;; We could compose over agenda-run-once and agenda-read-ports (agenda-run-once agenda))) + ;; @@: This relies on mutation at present on the queue, in the rare + ;; event it's used. If we ever switch to something more immutable, + ;; it should return a new modified agenda instead. + (if post-run-hook + (post-run-hook agenda)) (if (and stop-condition (stop-condition agenda)) 'done (let* ((agenda