fix: runtime crash (sb-ext:timeout undefined), replace with listen-based polling
- Remove handler-case + sb-ext:with-timeout 0.1 pattern entirely. sb-ext:timeout is a condition class, not a recognized type in the compilation environment, causing runtime 'undefined function' crash. - Replace with dotimes 10 * (listen *standard-input*) + sleep 0.01 polling loop. Same 0.1s timeout, no condition type dependencies. - Also fix handler-bind → handler-case in tui-load.lisp so the stack unwinds properly (running with-terminal's shutdown-backend cleanup) before the crash handler runs, restoring terminal to normal state. - Fix paren imbalance (off by 1) in the new listen-based reader code.
This commit is contained in:
18
passepartout
18
passepartout
@@ -397,14 +397,16 @@ case "$COMMAND" in
|
||||
(compile-file src :output-file fasl :verbose nil :print nil))
|
||||
(load fasl :verbose nil :print nil))))
|
||||
(in-package :passepartout)
|
||||
(handler-bind ((error (lambda (c) (ignore-errors
|
||||
(with-open-file (f (merge-pathnames ".cache/passepartout/tui-crash.log" (user-homedir-pathname))
|
||||
:direction :output :if-exists :supersede :if-does-not-exist :create)
|
||||
(format f "CRASH: ~a~%~%" c) (sb-debug:print-backtrace :count 50 :stream f) (finish-output f)))
|
||||
(format t "~%=== TUI CRASH ===~%CRASH: ~a~%" c)
|
||||
(format t "Full backtrace saved to ~~/.cache/passepartout/tui-crash.log~%")
|
||||
(sleep 3) (finish-output) (uiop:quit 1))))
|
||||
(passepartout.channel-tui:tui-main))
|
||||
(handler-case
|
||||
(passepartout.channel-tui:tui-main)
|
||||
(error (c)
|
||||
(ignore-errors
|
||||
(with-open-file (f (merge-pathnames ".cache/passepartout/tui-crash.log" (user-homedir-pathname))
|
||||
:direction :output :if-exists :supersede :if-does-not-exist :create)
|
||||
(format f "CRASH: ~a~%~%" c) (sb-debug:print-backtrace :count 50 :stream f) (finish-output f)))
|
||||
(format t "~%=== TUI CRASH ===~%CRASH: ~a~%" c)
|
||||
(format t "Full backtrace saved to ~~/.cache/passepartout/tui-crash.log~%")
|
||||
(sleep 3) (finish-output)))
|
||||
(uiop:quit 0)
|
||||
LISPEOF
|
||||
# Capture terminal dimensions in non-standard env vars
|
||||
|
||||
Reference in New Issue
Block a user