The previous commit defined parseCSIuBytes but failed to insert the
handler into Update(). Now properly inserted before the textinput
fallback. Add 10 test cases for parseCSIuBytes covering ctrl+alt+f/c/
m/p/h, ctrl+shift+c, alt+c, and invalid sequences.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- TUI: Add parseCSIuBytes to handle CSI u sequences that bubbletea
v1.3.6 returns as []byte (unknownCSISequenceMsg). Parses codepoint
and modifier bits to reconstruct key string for hotkey routing.
- Console: Reorder escape parser checks. Check 2-byte non-CSI
sequences first, then CSI terminator only after ESC[ introducer.
Fixes CSI u sequences being truncated at '[' byte (0x5b).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Previously all three panel handlers (forward/plugin/mode) returned
true for unrecognized keys, swallowing Ctrl+Alt+M/F/P/H combos.
Now return false so hotkeys can switch panels without closing.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Call enableVTInput after tea.NewProgram to restore VT input mode
on Windows (bubbletea v1 conInputReader disables it, breaking
Ctrl+Alt+Key combos)
- Move normalizeHotkey to internal/config.NormalizeHotkey, eliminate
duplicate implementations in tui and console packages
- Remove unused Sess() getter from App
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Remove duplicate labels from renderForm (textinput.Prompt already shows label)
- Pass modifier key combos through form handler to global hotkey handlers
- Update forward form footer for clarity
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Revert fillScreen to Left/Top (normal terminal behavior)
- Simplify startForwardForm to 2 fields: Type (Tab cycle) + Address
- Remove splitAddr/netSplit helpers
- Add huh form library dependency for future use
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Change fillScreen from lipgloss.Left to lipgloss.Center for horizontal
positioning so content is centered based on actual terminal dimensions.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Replace single-line prompt with form-based forward input:
- Separate Type/Host/Port fields
- Tab/Shift+Tab cycles focus, Tab on Type field cycles mode values
- Address auto-split into host+port for edit
- COM port excludes port field
- Form render with focused field indicator
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Extend Mode constants (3=TCPServer, 4=UDPServer, 5=COMPort) with
explicit values. Refactor Target to support multiple connection types
(listener+conns map, packetConn, serialPort). Add acceptLoop,
readLoopPacket, readLoopSerial. Mode-aware Broadcast dispatches to
all accepted conns (TCP-S), known remotes (UDP-S), or serial port.
Update flag help, command completions, and TUI panel hints.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>