BBS:      TELESC.NET.BR
Assunto:  src/syncterm/Wren.adoc src/syncterm/scripts/auto/connected/keys_defaul
De:       Deuc¨
Data:     Mon, 4 May 2026 13:07:23 -0700
-----------------------------------------------------------
https://gitlab.synchro.net/main/sbbs/-/commit/9480df8001d2548b3d9bbf0b
Modified Files:
	src/syncterm/Wren.adoc src/syncterm/scripts/auto/connected/keys_default.wren src/syncterm/scripts/syncterm.wren ui_popup.wren src/syncterm/syncterm.c term.c wren_bind.c wren_bind_conn.c wren_bind_conn.h wren_host.c wren_host.h wren_host_internal.h
Log Message:
SyncTERM: move disconnect cluster (Alt-X / Alt-H / Ctrl-Q / [X]) to Wren

The four hangup-and-quit keys are now driven from
keys_default.wren via a new DisconnectFlow helper that raises a
Confirm popup ("Disconnect... Are you sure?") and, on yes, calls
Conn.endSession(exitApp).  doterm() picks the request up at the
top of its next iteration, runs the (UI-free) C cleanup, and
either returns to the bbslist (Alt-H / Ctrl-Q) or exits
syncterm (Alt-X / window-close).

Ctrl-Q is gated to text-mode terminals (curses / ANSI) at module-
load time via the new Host.textTerminal predicate; graphical
backends keep Ctrl-Q as a normal control byte.

C-side check_hangup is now pure cleanup  the confirm popup and
screen save/restore moved to Wren, the only caller was doterm,
and the syncmenu's SM_DISCONNECT / SM_EXIT cases are now
deduped onto the same primitive.  check_exit keeps its UIFC
"Are you sure you want to exit?" popup because bbslist + menu.c
ESC handlers reach it from outside the disconnect-cluster path
where Wren has already asked.

Wren bindings: Conn.endSession(exitApp), Host.textTerminal,
Key.ctrlA..Key.ctrlZ (full set; not just the two I happened
to need), Popup.onDismiss=(fn) so a fresh App can drive a
standalone Confirm without an enclosing run loop.

Pending-disconnect drain runs at the top of the doterm outer
loop after wren_result_drain  the parked DisconnectFlow fiber
resumes during the result drain and calls Conn.endSession from
there, not from a wren_host_dispatch_key frame, so a single
post-drain check is what makes the hangup land in the same
iteration as the user's Yes click.

Co-Authored-By: Claude Opus 4.7 (1M context) 
n
---
  mSynchronetn  hgVertrauen n hHome of Synchronet n gh[vert/cvs/bbs].synchro.net

-----------------------------------------------------------
[Voltar]