https://gitlab.synchro.net/main/sbbs/-/commit/e7394337303a1c648f71532a
Added Files:
src/syncterm/scripts/auto/connected/scrollback_view.wren
Modified Files:
src/syncterm/CMakeLists.txt src/syncterm/SyncTERM.pbproj/project.pbxproj src/syncterm/SyncTERM.vcxproj bbslist.c objects.mk src/syncterm/scripts/auto/connected/keys_default.wren online_menu.wren src/syncterm/scripts/syncterm.wren wrentest.wren src/syncterm/term.c wren_bind.c wren_bind_conn.c wren_bind_screen.c wren_bind_screen.h wren_host.c wren_host_internal.h
Removed Files:
src/syncterm/menu.c menu.h
Log Message:
SyncTERM: move scrollback viewer to Wren, delete menu.c
Replaces viewscroll() with scripts/auto/connected/scrollback_view.wren -
a Fiber-driven modal that pushes the live cterm region into the
scrollback ring, runs its own Input.next() pan loop (arrows / jklh /
PgUp/PgDn / Home/End / wheel / drag-select / Esc / q), and pops the
ring on exit. Help is a Pane-rendered markdown popup reached via F1.
Wren bindings: new Scrollback foreign class behaves as a Surface via linearize-and-dispatch (in-place 3-reverse row rotation, no malloc'd
copy) plus pushScreen / popScreen verbs that wrap the live cterm
region into and out of the ring. Surface.urlAt(col, row) wraps
detect_url_at. Scrollback.is(_) overrides so `Scrollback is Surface`
is true. The previously-added Hyperlinks.open(id) primitive is
removed; opening URLs from script bypassed the consent model that
treats a real user click as the gating gesture.
C side: handle_mouse_event() folds wheel-press into the existing
button-2/3 conn_send block (preserving tracking-mode wheel-to-remote forwarding), with the Hook.onMouse(wheelUpPress) gate in
scrollback_view.wren consuming wheel-press in OFF/RIP/X10 to enter
the viewer. Conn.scrollback() now invokes ScrollbackView.run() via
wrenCall, so menu.c is deleted entirely.
Co-Authored-By: Claude Opus 4.7 (1M context) <
noreply@anthropic.com>
---
■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net