From d2615ab4d2a9af24a742489edd1b130e816b928c Mon Sep 17 00:00:00 2001 From: shuki Date: Sat, 7 Mar 2026 01:17:42 +0200 Subject: [PATCH] Add touch-to-scroll support for mobile web view Translate touch swipe gestures into wheel events dispatched to the xterm terminal, enabling scrolling on touch devices. Co-Authored-By: Claude Opus 4.6 --- tui/web_templates/app_index.html | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/tui/web_templates/app_index.html b/tui/web_templates/app_index.html index cbaf7a5..37e66f8 100644 --- a/tui/web_templates/app_index.html +++ b/tui/web_templates/app_index.html @@ -163,6 +163,38 @@ window.location.replace(url.toString()); } })(); + + // Touch-to-scroll: translate swipe gestures into wheel events for xterm + (function() { + var touchStartY = null; + var THRESHOLD = 5; + + document.addEventListener("touchstart", function(e) { + if (e.touches.length === 1) { + touchStartY = e.touches[0].clientY; + } + }, { passive: true }); + + document.addEventListener("touchmove", function(e) { + if (touchStartY === null || e.touches.length !== 1) return; + var dy = touchStartY - e.touches[0].clientY; + if (Math.abs(dy) < THRESHOLD) return; + touchStartY = e.touches[0].clientY; + + var target = document.querySelector(".xterm-screen") || document.querySelector("#terminal"); + if (!target) return; + target.dispatchEvent(new WheelEvent("wheel", { + deltaY: dy > 0 ? 3 : -3, + deltaMode: 0, + bubbles: true, + cancelable: true + })); + }, { passive: false }); + + document.addEventListener("touchend", function() { + touchStartY = null; + }, { passive: true }); + })();