v0.15.0: Critical input/rendering fixes, subagent-reviewed #7

Merged
amr merged 36 commits from feature/v0.11.0-slots into main 2026-05-11 22:03:18 -04:00
3 changed files with 19 additions and 28 deletions
Showing only changes of commit eede03ee3f - Show all commits

20
demo
View File

@@ -1,20 +0,0 @@
#!/bin/sh
# cl-tty demo launcher
# Sets raw terminal mode, runs the demo, restores terminal on exit.
# This is needed because SBCL's --script mode + run-program combo
# can't reliably set raw mode from inside the Lisp process.
SAVED=$(stty -g 2>/dev/null)
if [ -z "$SAVED" ]; then
echo "ERROR: Not running in a real terminal." >&2
echo " Try: sbcl --script demo.lisp" >&2
exit 1
fi
cleanup() {
stty "$SAVED" 2>/dev/null
}
trap cleanup EXIT INT TERM
stty raw -echo -isig -icanon min 1 time 0 2>/dev/null
sbcl --script "$(dirname "$0")/demo.lisp"

View File

@@ -1,9 +1,5 @@
;;; demo.lisp — cl-tty interactive demo
;;; Run: sbcl --script demo.lisp
;;;
;;; Demonstrates: backend detection, raw terminal mode, key/mouse input,
;;; layout engine, component rendering pipeline, framebuffer diff flush,
;;; text-input, textarea, select, dialog, scrollbox, tabbar.
;; Load cl-tty directly via ASDF (no Quicklisp dependency needed —
;; sb-posix is built into SBCL, no external libraries required).
@@ -124,10 +120,8 @@
t)))
(defun run-demo ()
"Run the demo. Assumes raw terminal mode is already set by the
shell wrapper (./demo) or by running:
stty raw -echo -isig -icanon min 1 time 0
sbcl --script demo.lisp"
"Run the demo. Raw terminal mode should already be set by the
./demo.sh shell wrapper."
(init-app-state)
(let* ((backend (detect-backend))
(w 80) (h 24))

17
demo.sh Executable file
View File

@@ -0,0 +1,17 @@
#!/bin/sh
# cl-tty demo launcher
# Sets raw terminal mode before starting SBCL, restores on exit.
# Raw mode is needed so individual keystrokes are captured instead
# of being line-buffered and echoed by the terminal driver.
SAVED=$(stty -g 2>/dev/null)
if [ -z "$SAVED" ]; then
echo "ERROR: Not running in a real terminal." >&2
exit 1
fi
cleanup() { stty "$SAVED" 2>/dev/null; }
trap cleanup EXIT INT TERM
stty raw -echo -isig -icanon min 1 time 0 2>/dev/null
sbcl --script "$(dirname "$0")/demo.lisp"