- New screenshot action (default alt+p, bindable like any action):
renders the current workspace to a buffer and saves it as plain text
and/or PNG (screenshot_format = text|png|both, screenshot_dir
configurable, default skärmbilder/ under the config dir). The PNG is
rasterized cell by cell with an embedded DejaVu Sans Mono font
(vendored, ~340 kB); glyphs missing from the font (color emoji)
render as filled boxes. A popup confirms the saved paths
- Settings dialog gains a 'Tangenter' row: lists all keybinds with
label and scope, Enter captures the next keypress as the new chord
(persisted by rewriting [[keybind]] via toml_edit), Delete removes
a binding — changes take effect immediately
- Integration suite: 48/48 (screenshot files + validity, keybind list,
live rebind ctrl+space→alt+z)
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>
- 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`.