And the spinner implementation: (define p (let ((index 0) (spinner-chars "|\\-/")) (define (spin) (set! index (+ index 1)) (if (>= index (string-length spinner-chars)) (set! index 0)) (display (array-ref spinner-chars index)) (display "\b")) (make-soft-port (vector (lambda (c) (if (char=? c #\newline) (spin) (write c))) ; putc (lambda (s) (if (string-contains s "\n") (spin))) ; puts (lambda () #t) ; flush (lambda () #f) ; getc (lambda () #t)) ; close "w")))
(define (f) (display "\n" p) (f)) (f)