Commit Graph

16 Commits

Author SHA1 Message Date
Mortdecai 8a9d89bed5 docs: add session handoff for toolbar refresh deploy
Captures: what shipped (Workspace dark refresh + compose bar in
static/toolbar.js, deployed to /opt/sethmux/), the manual-deploy gotcha
that left 3 prior fixes undeployed for a month, the Caddy-not-ttyd
serving path for static assets, and the mobile acceptance checklist
that's the only remaining gate.

Validator score: 88/100 (READY).
2026-04-24 19:56:48 -04:00
Mortdecai b8a7810bfd chore: archive design handoff bundle for toolbar refresh
Stores SethMux_4-24-26.zip + extracted design_handoff_sethmux_toolbar/
so the spec, mockups, and reference jsx components stay in-repo for
future reference. Not served in production — the only file that ships
is static/toolbar.js, which already matches the design's toolbar.js
byte-for-byte.
2026-04-24 19:51:48 -04:00
Mortdecai 2b375b0206 chore: add detect-secrets baseline
Captures the SRI integrity hashes in static/index.html (xterm.js, ttyd assets)
and in the upcoming claude-design/preview*.html mockups. These are public
content-addressing hashes for unpkg.com / cdnjs scripts, not secrets — but
they trip the global pre-commit detect-secrets hook by entropy.

Baseline committed first so the design-bundle commit doesn't get blocked.
2026-04-24 19:51:39 -04:00
Mortdecai 3b06ce752d fix: keep tmux selection alive after mouse-drag in copy mode
Change MouseDragEnd1Pane from copy-selection-and-cancel to
copy-selection so a drag-select copies but stays in copy mode,
letting you re-select without re-entering copy mode each time.
Press 'q' to exit when done.
2026-04-24 19:50:24 -04:00
Mortdecai 8e70875631 feat: Workspace dark refresh + mobile compose bar
Re-skin the mobile toolbar to Google Workspace dark vocabulary
(#202124 bar, #303134 surface, #3c4043 hairlines, Roboto 12/500)
keeping #D35400 as the sethmux accent. Adds .mono / .hi / .grn
button variants with hover/active wash transitions.

Adds a compose bar (toggled by 'Type' button) — a real <input>
with autocorrect=on and enterkeyhint=send. Enter/Send/↵ flushes the
assembled string to stdin in one shot, plus \\r. Other toolbar taps
while composing flush typed text first to preserve order, but keep
the compose bar open. Sidesteps xterm.js's per-keystroke input
model that drops Gboard/iOS bulk-replacement events.

relayout() now measures bar.offsetHeight instead of hard-coding
calc(100vh - 88px) so the third row reflows the terminal correctly.

Records the design rationale and what was rejected in DECISIONS.md.
2026-04-24 19:50:17 -04:00
Mortdecai 451a055757 docs: document mobile autocomplete-disable fix
Explains why setting autocomplete/autocorrect/autocapitalize/spellcheck
attributes on xterm.js's hidden helper textarea is needed (and why a
MutationObserver) for mobile keyboards to stop corrupting per-keystroke
input. Still load-bearing alongside the new compose bar — covers chord
and arrow keys typed outside the compose input.
2026-04-24 19:50:05 -04:00
Mortdecai 6a2782852f chore: ignore .backup/ directories
Per global convention, originals are backed up to .backup/ before edits.
Don't track those copies.
2026-04-24 19:49:55 -04:00
Mortdecai 4818a04b0d fix: remove Tab keydown interceptor, use tabIndex=-1 on buttons instead
The keydown interceptor was likely conflicting with xterm.js native
Tab handling. Instead, set tabIndex=-1 on toolbar buttons so Tab
can't escape the terminal to browser focus, and auto-refocus terminal
on any click outside the toolbar.
2026-03-26 20:04:43 -04:00
Mortdecai fef67c148e fix: intercept Tab key to prevent browser focus navigation
Tab key was being captured by the browser for focus cycling instead of
being sent to the terminal for bash completion. Now intercepted at the
document level and forwarded to the terminal when xterm has focus.
2026-03-26 20:02:00 -04:00
Mortdecai 8f407f74ae fix: toolbar buttons now send actual control chars via xterm _core API
Buttons were sending literal 'n'/'p' instead of Ctrl-A+n/p because
the hex escape decode was failing. Now uses real control characters
in data-k attributes and sends via triggerDataEvent() which hooks
directly into ttyd's websocket transport.
2026-03-26 19:34:23 -04:00
Mortdecai 59db3ab59a fix: make help tab read-only (stty -echo -icanon) 2026-03-26 19:22:16 -04:00
Mortdecai ff33967020 feat: persistent help tab with keybindings cheat sheet
- Colorized reference card auto-redraws on resize
- Ctrl-A ? jumps to help tab (recreates if closed)
- Fixed tmux config syntax error in capture/logging bindings
2026-03-26 19:20:47 -04:00
Mortdecai d1eea4f26a feat: kitty-compatible keybindings via tmux extended-keys (CSI u)
All Ctrl+Shift shortcuts mapped to match kitty defaults:
- Ctrl+Shift+T/W/Left/Right for tab management
- Ctrl+Shift+Enter for splits, ]/[ for pane cycling
- Ctrl+Shift+C/V for copy/paste, H for scrollback pager
- Ctrl+Shift+1-9 for goto tab, F11 for fullscreen
- Dvorak extras and Alt shortcuts preserved alongside
2026-03-26 19:18:56 -04:00
Mortdecai 8d075f2b48 feat: AI-CLI workflow optimizations
- 200K scrollback, vi-mode copy, copy-on-select
- Ctrl-A S captures pane to ~/logs/, Ctrl-A L toggles live logging
- Status bar shows git branch + working directory
- Pre-built session: code/git/run/logs windows
- Aggressive resize + focus events for multi-device switching
- Toolbar: added Paste (clipboard), Zoom (pane fullscreen), Save (capture)
- All new windows inherit current working directory
- Toolbar split into 2 rows for more buttons without clutter
2026-03-26 19:13:02 -04:00
Mortdecai 2cca6f3900 feat: dvorak-friendly split keybindings (Ctrl-A v/s) 2026-03-26 19:07:28 -04:00
Mortdecai 5f1beb4d4d feat: initial release - mobile-first web terminal with tmux touch toolbar and push notifications 2026-03-26 18:59:37 -04:00