* Add --panel flag to new-split command
Allows splitting a specific panel without changing focus first.
Usage: cmuxterm new-split <direction> [--panel <id|index>]
Example: cmuxterm new-split down --panel 1
* Return new panel ID from new-split command
new-split now returns the UUID of the newly created panel, enabling
reliable chaining of split operations without index drift issues.
Before: OK
After: OK F2675177-3838-49AF-A1A0-1744C0048E99
Example workflow to create left + 2x2 grid on right:
RIGHT=$(cmuxterm new-split right | awk '{print $2}')
BOTTOM=$(cmuxterm new-split down --panel $RIGHT | awk '{print $2}')
cmuxterm new-split right --panel $RIGHT
cmuxterm new-split right --panel $BOTTOM
Key changes:
- Fix keyboard input handling for control characters in GhosttyTerminalView
- Set consumed_mods correctly (exclude Ctrl/Cmd from consumed mods)
- Send unmodified character text for Ctrl+key combinations
- Add unshifted_codepoint support for proper key encoding
- Add TerminalController with Unix socket API (/tmp/ghosttytabs.sock)
- Commands: send, send_key, list_tabs, new_tab, close_tab, select_tab
- Supports ctrl-c, ctrl-d, ctrl-z, enter, tab, escape, etc.
- Add Python test client and automated test suite
- tests/ghosttytabs.py - Python client library
- tests/test_ctrl_socket.py - Main Ctrl+C/D test suite (4 tests)
- tests/test_signals_auto.py - Standalone PTY signal tests
- Update CLAUDE.md with socket API documentation and testing guide
- Update .gitignore for Python cache files
This fixes Ctrl+C/D not working in apps like claude-code, btop, opencode
while continuing to work in simpler apps like htop.