- -h/--help prints a full usage overview (modes, config keys, keys, mouse)
- Run dialog now executes the typed command directly in the new window
(previously it spawned the default shell and typed the command into
it, which showed up as just an empty terminal)
- Virtual terminals get vt100 scrollback (config scrollback_lines,
default 1000): mouse wheel scrolls history when the app doesn't
capture the mouse, arrow-key fallback on the alternate screen, any
keypress jumps back to the bottom; optional scrollbar on the right
border (show_scrollbar) plus configurable default_window_size
- Exit triggered from a connected display client (ctrl+q / panel
button) now only disconnects that client — the daemon/standalone
session and its programs keep running
- Windows now paint the border zone in the desktop background color so
rounded corners actually look rounded instead of a filled square
with an inner rounded frame; popup dialogs rounded too
- Integration suite extended to 19 checks (scrollback, run dialog,
client-safe exit) — all passing
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
All colors/styles for windows, panel, dropdown and desktop now live in
src/theme.rs — restyle the whole WM from one file. Windows and menus
use rounded borders; hover/focus states share one accent style.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Wide characters shifted everything after them one column to the right:
- render.rs: vt100's empty wide-continuation cell was padded to a
space, making wide chars occupy 2+1 columns — skip it entirely
- ipc.rs buffer_to_ansi: same bug for daemon frames — skip cells
covered by a preceding wide symbol (unicode-width)
- app.rs: clamp virtual terminals to >= 2 columns (vt100 0.16 has a
subtraction underflow panic on wide chars in a 1-col grid) and give
content_area a sane 80x24 default so windows spawned before the
first layout pass aren't degenerate
- main.rs: use try_send for display frames so one slow/stalled client
can no longer freeze the whole WM
- integration test: new end-to-end check that emoji do not shift the
row, plus fix a false match against the window title
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- New key_event/mouse_event client messages (crossterm serde) that run
through the complete WM event handling on the server — remote clients
get window focus, drag/resize and mouse forwarding into virtual
terminals (SGR/UTF-8/X10) identical to standalone mode
- tui-wm -c now forwards mouse events; previously only keyboard worked
remotely
- IPC unit tests + end-to-end integration test (tests/integration.py):
daemon, frames, click/scroll SGR forwarding, popups, TUI-FM in a
window — 12/12 passing
- Document the new messages in SOCKET_API.md
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
CI on push to master/main: cargo test, native arm64 build on the Pi5
runner, cross-compiled x64 build, rolling 'latest' release with both
binaries and checksums.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Replace Unix-socket-only server/client with interprocess local sockets:
unchanged unix domain socket on Linux (SOCKET_API compatible),
named pipes on Windows
- Run command lines with arguments via sh -c / cmd /C in the PTY
- Wire RunProgram args into the spawned command
- Make libc a unix-only dependency
- Skip Kitty background image on Windows (protocol unsupported)
- Drop dead pixel-size query code in kitty_gfx
- Reject left/right panel positions at config parse instead of silently
ignoring them
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Capture OSC 0/2 window title in scan_osc_sequences since vt100 0.16
no longer exposes Screen::title()
- Remove committed build artifacts (testapps/mouse-test/target) and
extend .gitignore
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Added `kitty_gfx` module to handle loading, scaling, and displaying background images using the Kitty graphics protocol.
- Integrated background image handling into the main application loop, allowing dynamic updates based on configuration.
- Enhanced terminal rendering to support transparent backgrounds when a Kitty image is active.
- Updated IPC server to manage client connections and messages, including handling background image settings.
- Modified `PtyTerminal` to accept additional environment variables during shell spawning.
- Improved rendering logic to support popup dialogs and terminal background color customization.
- Introduced a new `Config` struct for loading application configuration from a TOML file.
- Added support for keybindings and panel configurations, including status widgets.
- Implemented `PtyTerminal` for handling pseudo-terminal interactions.
- Created a rendering module to manage the display of application windows, panels, and dropdowns.
- Refactored the main application loop to utilize the new configuration and rendering logic.
- Removed legacy code related to event handling and rendering from `main.rs`.