agenda: Permit a post-run-hook in start-agenda.
authorChristopher Allan Webber <cwebber@dustycloud.org>
Sat, 7 May 2016 17:20:18 +0000 (12:20 -0500)
committerChristopher Allan Webber <cwebber@dustycloud.org>
Sat, 7 May 2016 17:20:18 +0000 (12:20 -0500)
* 8sync/agenda.scm (start-agenda): Add a post-run-hook keyword argument.
  This permits more live hacking madness, as used in syncmud.

8sync/agenda.scm

index c417a40e28fdad25cf811d796a92381d4efa71e8..05a999617db1d29173678e6217af0a406a3ebd45 100644 (file)
@@ -745,7 +745,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)
                        ;;   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))
   ;; TODO: Document fields
   "Start up the AGENDA"
   (let loop ((agenda agenda))
@@ -754,6 +756,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)))
            ;;   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
       (if (and stop-condition (stop-condition agenda))
           'done
           (let* ((agenda