update docs

This commit is contained in:
2026-01-22 10:50:26 -05:00
parent 95b53f7533
commit 0e40fe01d7
14 changed files with 57 additions and 508 deletions
+10 -6
View File
@@ -101,7 +101,7 @@
Options:
- :init - Initial model (required)
- :update - (fn [model msg] [new-model cmd]) (required)
- :view - (fn [model] hiccup) (required)
- :view - (fn [model size] hiccup) where size is {:width w :height h} (required)
- :init-cmd - Initial command to run
- :fps - Target frames per second (default 60)
- :alt-screen - Use alternate screen buffer (default true)
@@ -128,8 +128,10 @@
(execute-cmd! init-cmd msg-chan))
;; Initial render
(let [initial-view (render/render (view init))]
(term/render! initial-view))
(let [size (term/get-terminal-size)
ctx {:available-height (:height size)
:available-width (:width size)}]
(term/render! (render/render (view init size) ctx)))
;; Main loop
(loop [model init
@@ -151,15 +153,17 @@
;; Update model
(let [[new-model cmd] (update model msg)
new-view (render/render (view new-model))
size (term/get-terminal-size)
ctx {:available-height (:height size)
:available-width (:width size)}
now (System/currentTimeMillis)]
;; Execute command
(when cmd
(execute-cmd! cmd msg-chan))
;; Render
(term/render! new-view)
;; Render with context for flex layouts
(term/render! (render/render (view new-model size) ctx))
(recur new-model now))))))
-75
View File
@@ -1,75 +0,0 @@
(ns tui.simple
"Simplified TUI runtime - no core.async, works with Babashka.
Synchronous event loop, no timers/async commands."
(:require [tui.terminal :as term]
[tui.input :as input]
[tui.render :as render]
[tui.ansi :as ansi]))
;; === Commands ===
(def quit [:quit])
;; === Key Matching ===
(defn key=
"Check if message is a specific key."
[msg key-pattern]
(input/key-match? msg key-pattern))
(defn key-str
"Get string representation of key."
[msg]
(input/key->str msg))
;; === Simple Run Loop ===
(defn run
"Run a TUI application (synchronous, no async commands).
Options:
- :init - Initial model (required)
- :update - (fn [model msg] [new-model cmd]) (required)
- :view - (fn [model size] hiccup) where size is {:width w :height h} (required)
- :alt-screen - Use alternate screen buffer (default true)
Returns the final model."
[{:keys [init update view alt-screen]
:or {alt-screen true}}]
;; Setup terminal
(term/raw-mode!)
(term/init-input!)
(when alt-screen (term/alt-screen!))
(term/clear!)
(try
;; Initial render
(let [size (term/get-terminal-size)
ctx {:available-height (:height size)
:available-width (:width size)}]
(term/render! (render/render (view init size) ctx)))
;; Main loop - simple synchronous
(loop [model init]
(if-let [key-msg (input/read-key)]
(let [[new-model cmd] (update model key-msg)
size (term/get-terminal-size)
ctx {:available-height (:height size)
:available-width (:width size)}]
;; Render with context for flex layouts
(term/render! (render/render (view new-model size) ctx))
;; Check for quit
(if (= cmd [:quit])
new-model
(recur new-model)))
(recur model)))
(finally
;; Cleanup
(when alt-screen (term/exit-alt-screen!))
(term/restore!)
(term/close-input!)
(println)
(flush))))
;; Re-export render
(def render render/render)