v1.10.4: booterm mobile UX — copy/paste, swipe-close, send-to-chat, search
- Long-press selection + floating menu (mobile + desktop right-click): Copy, Paste, Select All, Search, Send to chat. Tap-outside / Esc dismiss. - Pane-header Paste button (📋) for iOS user-gesture clipboard read. - Swipe-left-to-close on mobile pane pill with red "Close" overlay and translateX visual hint; spring-back below 80px threshold. - Send-to-chat reverse path: chatInputsRegistry + sendToChat event mirror the existing terminalsRegistry pattern. ChatInput appends with newline separator on receive and focuses (no auto-send). - Scrollback search via xterm-addon-search@^0.13.0: SearchBar overlay with N-of-M match counter (onDidChangeResults), Enter/Shift-Enter cycling. - Cmd/Ctrl+F intercept in Session.tsx when active pane is terminal; xterm also intercepts when focused. Browser native find passes through elsewhere. - terminalsRegistry signature extended with openSearch + paste callbacks. Includes deferred CLAUDE.md updates documenting v1.10/v1.10.1/v1.10.2/v1.10.3 learnings (uid 1000 collision, libc match, two event buses, vite proxy order, mobile pane URL sync, xterm canvas selection). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -251,6 +251,18 @@ function SessionInner({ sessionId }: { sessionId: string }) {
|
||||
return;
|
||||
}
|
||||
|
||||
// v1.10.4: Cmd/Ctrl + F — when the active pane is a terminal, open the
|
||||
// scrollback search bar. When it isn't, fall through to the browser's
|
||||
// native find (no preventDefault, no early return).
|
||||
if (key === 'f' && !e.shiftKey) {
|
||||
const activePane = panes[activePaneIdx];
|
||||
if (activePane?.kind === 'terminal') {
|
||||
e.preventDefault();
|
||||
terminalsRegistry.get(activePane.id)?.openSearch();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Cmd/Ctrl + Tab / Shift+Tab — cycle through panes.
|
||||
if (key === 'tab') {
|
||||
if (panes.length <= 1) return;
|
||||
|
||||
Reference in New Issue
Block a user