diff options
Diffstat (limited to 'world/ui.scm')
-rw-r--r-- | world/ui.scm | 36 |
1 files changed, 6 insertions, 30 deletions
diff --git a/world/ui.scm b/world/ui.scm index 4fa8b65..40d4e69 100644 --- a/world/ui.scm +++ b/world/ui.scm @@ -1,44 +1,20 @@ -;; https://invisible-island.net/xterm/ctlseqs/ctlseqs.html - -;; Clear the screen better: -;; https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-The-Alternate-Screen-Buffer - -(define csi-lead "\x1b[") - -(define (str-csi . args) - (apply string-append csi-lead args)) - -(define (csi-command! . args) - (write-string (apply str-csi args)) - (flush-output-port)) - -; These are xterm things, but they are widely adopted -(define (enable-alternate-buffer!) - (csi-command! "?1049h")) -(define (disable-alternate-buffer!) - (csi-command! "?1049l")) - -(define (erase-screen!) (csi-command! "2J")) - -(define (move-cursor! x y) - "Also valid with CSI<L>;<C>f being <L> and <C> line number and column - number respectively" - (csi-command! (number->string y) ";" (number->string x) "H")) (define (echo-char) (define table (make-piece-table "hola")) - (display "HELO") - (enable-alternate-buffer!) + (ui-initialize!) (let loop ((char (read-char))) + (move-cursor! 0 0) (cond ((char=? #\q char) #f) (else (piece-table-insert! table 4 "hola" 'normal) - (move-cursor! 0 0) (erase-screen!) (write-string (piece-table->string table)) (loop (read-char))))) - (disable-alternate-buffer!)) + (ui-deinitialize!)) (define (start arguments) (with-raw-io (current-input-port) echo-char)) + +;; Extend `with-raw-io` with the initialization functions and just move to a +;; `with-tui` function that calls the provided thunk in the proper mode |