summaryrefslogtreecommitdiff
path: root/world/ui.scm
diff options
context:
space:
mode:
Diffstat (limited to 'world/ui.scm')
-rw-r--r--world/ui.scm36
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