X-Git-Url: https://jxself.org/git/?p=8sync.git;a=blobdiff_plain;f=eightsync%2Fagenda.scm;h=edade135c09499e7b08beaf86c573c01d5fb3e1e;hp=68db42eceee7bdb981612f594eacc0b4792c3568;hb=fbb1776a35db50db19fc158381e74361d6e9b789;hpb=a9e932ba04d488a5492afe0dd6d88337f4b01686 diff --git a/eightsync/agenda.scm b/eightsync/agenda.scm index 68db42e..edade13 100644 --- a/eightsync/agenda.scm +++ b/eightsync/agenda.scm @@ -65,6 +65,8 @@ %port-request %run %run-at %run-delay + catch-8sync catch-%8sync + print-error-and-continue %current-agenda @@ -543,6 +545,22 @@ return the wrong thing via (%8sync) and trip themselves up." (lambda () body ...))))) +(define-syntax-rule (catch-8sync exp (handler-key handler) ...) + (catch '%8sync-caught-error + (lambda () + exp) + (lambda (_ orig-key orig-args orig-stacks) + (cond + ((or (eq? handler-key #t) + (eq? orig-key handler-key)) + (apply handler orig-stacks orig-args)) ... + (else (raise '%8sync-caught-error + orig-key orig-args orig-stacks)))))) + +;; Alias...? +(define-syntax-rule (catch-%8sync rest ...) + (catch-8sync rest ...)) + ;;; Execution of agenda, and current agenda