https://gitlab.synchro.net/main/sbbs/-/commit/db36ea385821994e462db67a
Modified Files:
src/conio/ciolib.adoc ciolib.c ciolib.h src/syncterm/Wren.adoc conn.c modem.c ripper.c src/syncterm/scripts/auto/connected/disconnect_flow.wren keys_default.wren online_menu.wren scrollback_view.wren src/syncterm/scripts/auto/menu/main_menu.wren src/syncterm/scripts/auto/picker/file_picker.wren src/syncterm/scripts/menu_bbs_editor.wren menu_ui.wren syncterm.wren syncterm_menu.wren ui_app.wren ui_help_test.wren ui_widget.wren ui_widget_test.wren wren_console.wren src/syncterm/ssh.c syncterm.c syncterm.h term.c wren_bind.c wren_bind_screen.c wren_bind_screen.h wren_host.h
Log Message:
Make process-close requests unwind Wren UI safely
Treat CIO_KEY_QUIT as a sticky process-level request and preserve it
across conio input ownership barriers. Route every SyncTERM getch path
through a shared reader so connection setup, RIP popups, scrollback,
and terminal input cannot consume a close request accidentally.
Handle the request before connected-session Wren hooks and before
ordinary App widget or keymap dispatch. Unwind one modal frame through
its Escape cleanup on each pump iteration, including when cleanup
raises an error.
Add Widget.atExit as the explicit UIFC-style exception and inherit it
for nested modals. Use it throughout the command-line entry-save flow
so shutdown confirmations and edits remain interactive while ordinary
menus continue unwinding.
Remove obsolete per-menu quit bindings, document the host and widget
contracts, and add regression coverage for modal unwinding, at-exit inheritance, keymap bypass, and cleanup failures.
Co-Authored-By: OpenAI Codex <
noreply@openai.com>
---
þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net