• src/syncterm/scripts/auto/connected/scrollback_view.wrensrc/syncterm/C

    From Deuc¿@VERT to Git commit to main/sbbs/master on Tue May 5 05:32:15 2026
    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