From cab43001e629e282cc665b995ffe734345f5eff0 Mon Sep 17 00:00:00 2001 From: Puck Meerburg Date: Sun, 2 Mar 2025 14:02:56 +0000 Subject: [PATCH] (zilch core statusbar): small cleanups --- core/src/statusbar.sld | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/core/src/statusbar.sld b/core/src/statusbar.sld index 542c9c4..2b74c20 100644 --- a/core/src/statusbar.sld +++ b/core/src/statusbar.sld @@ -10,6 +10,8 @@ statusbar-logger) (begin + ; Creates a buffered port, which buffers up to one line (terminated by a newline character) + ; and calls redraw-status-bar after a write that prints a newline. (define (buffered-port mutex write-output-line redraw-status-bar close-this-port) (define line-buffer (make-bytevector 1024 0)) (define line-buffer-location 0) @@ -40,18 +42,23 @@ (make-output-port (lambda (str) (mutex-lock! mutex) (write-data (string->utf8 str) 0)) close-this-port)) (define (statusbar-logger out-port err-port print-logs) + ; Current status bar text (define status-bar "[0/0 builds, 0 running] ...") (define terminal-width 80) (define-values (rows cols) (terminal-size err-port)) (when (> cols 0) (set! terminal-width cols)) (define (terminal-width-thread-thunk handler) - (handler #t) - (mutex-lock! out-mutex) + ; Lock the output mutex whilst setting the terminal size. (define-values (rows cols) (terminal-size err-port)) + (mutex-lock! out-mutex) (when (> cols 0) (set! terminal-width cols)) (mutex-unlock! out-mutex) + + ; Wait until the next SIGWINCH, then loop + (handler #t) (terminal-width-thread-thunk handler)) + (define terminal-width-thread (make-thread (lambda () (terminal-width-thread-thunk (make-signal-handler signal/winch))))) (define (draw-status-bar) @@ -92,7 +99,7 @@ (begin (set! last-activity-start-id #f) (set! last-activity-start (utf8->string (bytevector-copy buf start end))) - (set! need-redraw #t)))) + (draw-status-bar)))) (define (write-out-line buf start end) (unless need-redraw