calm-evt: event wrapper that calms an event’s delivery. (require (planet "calm-evt.ss" ("dyoo" "calm-evt.plt" 1 0))) calm-evt wraps around events and calms them down. It’s meant to be similar to the behavior of calm-e in the Flapjax language. 1. Example Examples: > (module exercise-calm-evt mzscheme (require (lib "mred.ss" "mred") (lib "class.ss") (lib "async-channel.ss") (planet "calm-evt.ss" ("dyoo" "calm-evt.plt" 1))) (provide test) (define text%/changed-notification (class text% (inherit get-text) (define notify-channel (make-async-channel)) (define/public (get-notify-channel) notify-channel) (define/augment (after-insert pos len) (inner (void) after-insert pos len) (async-channel-put notify-channel (get-text))) (define/augment (after-delete pos len) (inner (void) after-delete pos len) (async-channel-put notify-channel (get-text))) (super-new))) (define (test) (parameterize ([current-eventspace (make-eventspace)]) (define f (new frame% [label ""])) (define t (new text%/changed-notification)) (define c (new editor-canvas% [parent f] [editor t])) (send f show #t) (thread (lambda () (define delayed-change-evt (make-calm-evt (send t get-notify-channel))) (let loop () (sync (handle-evt delayed-change-evt (lambda (val) (printf "~s~n" val)))) (loop)))) (void)))) Run the test function, and then start typing in the new frame. Changes in the text will be printed out, but only after a period of inactivity. 2. API A calm-evt can be used as an argument to sync. Its result is the result of the event that it wraps. (make-calm-evt wrapped-evt [delay-in-milliseconds]) -> calm-evt? wrapped-evt : evt? delay-in-milliseconds : natural-number/c = 1000 Creates a new calm-evt that wraps around the wrapped-evt. (calm-evt? datum) -> boolean? datum : any/c Returns true if the datum is a calm-evt.