| Commit message (Collapse) | Author | Age |
| ... | |
| |
|
|
|
|
|
| |
* fix bce and other issues
* rustfmt
* add pr
|
| |
|
|
|
|
|
|
|
|
| |
- cross-compile musl binary on macOS via cargo-zigbuild, with
arch-independent symlink so snapshots are stable across x86_64 and aarch64
- kill_running_sessions() now calls stop_zellij() instead of
start_zellij(), eliminating 3s startup per test
- prevent steps from firing prematurely by tightening completion conditions
and adding re-send logic for garbled keys
|
| |
|
|
|
|
|
|
|
|
|
| |
(#4972)
* native-tls -> rustls
* add/update tests
* rustfmt
* add pr
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Preserve scrollback for partial scroll regions starting at top
When a partial scroll region starts at row 0 (the top of the viewport),
lines scrolled off the top were silently discarded via viewport.remove(0)
instead of being transferred to lines_above (the scrollback buffer).
This affected both add_canonical_line and rotate_scroll_region_down.
Applications like Codex CLI use partial scroll regions to push rendered
content into terminal scrollback (via DECSTBM + newlines). In tmux,
these lines are preserved in the scrollback buffer and accessible via
copy-mode scrolling. In Zellij, they were lost, causing mouse wheel
scrolling to show only stale pre-application content.
Transfer lines to lines_above when scroll_region_top == 0 and alternate
screen is not active, matching the behavior of tmux.
* add selection handling to CSI S, add matching handling for CSI M, add tests
* add pr
---------
Co-authored-by: Aram Drevekenin <aram@poor.dev>
|
| |
|
|
|
| |
* proper error when providing layout name with a tab
* rustfmt
|
| |
|
|
|
| |
* error on socket paths that are too long
* add pr
|
| |
|
|
|
|
|
|
|
| |
* allow sending a stringified layout with --layout-string
* add --tab-id to all the things
* fix windows tests
* add pr
|
| | |
|
| |
|
|
|
|
|
| |
- Consume unused CompilationResult from embed_resource::compile in build.rs
- Gate std::io::prelude import with #[cfg(unix)] since it's only used by
daemonize_web_server which is unix-only
Co-authored-by: divens <divens.dev@gmail.com>
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* initial implementation
* tests
* fix: always report to zellij, only report to app if it wants a report
* rustfmt
* fix: always report capabilities to panes requesting them
* rustfmt
* add pr
|
| |
|
|
|
|
|
|
|
| |
* add zellij action focus-pane-id
* zellij action are-floating-panes-visible
* fix e2e tests
* add pr
|
| | |
|
| |
|
|
|
|
|
|
|
| |
* ci: add cross-compilation test for riscv64
* ci: add riscv64 to release binaries
* ci: switch riscv64 to musl target, consistent with other Linux targets
* ci: remove separate cross-compile workflow (not needed per reviewer)
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* remove pane render report
* only collect pane contents if pane should render
* add logs
* conditional keybinding serialization
* remove logs
* rustfmt
* fix tests
* tests
* rustfmt
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
| |
(#4892)
* Fix user themes in config folder not loaded on session start
* preserve layout config dir
---------
Co-authored-by: Aram Drevekenin <aram@poor.dev>
|
| |
|
|
|
|
|
| |
(#4908)
* initial implementation
* add pr
|
| | |
|
| |
|
|
|
|
|
| |
* fix: do not unblock blocking commands for other unblock conditions
* update deps
* allow trailing : in file path detection and change log format to match
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Add Windows path support to strider plugin
Strider is a WASM plugin where std::path::PathBuf uses Unix semantics,
so Windows backslash paths break parent(), join(), strip_prefix(), etc.
Fix by normalizing all incoming paths to forward slashes at plugin
boundaries and converting back to native backslashes for display. A new
platform.rs module detects the host OS at runtime from the initial_cwd
format and centralizes all platform-aware logic.
Also fix scan_host_folder on the server side: canonicalize
plugin_host_folder so the starts_with security check works on Windows,
where canonicalize() adds the \?\ prefix.
* Add virtual root view for drive and WSL navigation in strider
On Windows, navigating up from a drive root (e.g. C:\) now shows a
"Computer" view listing all available drives and WSL distributions.
Drives are enumerated via GetLogicalDriveStringsW and WSL distros
via `wsl -l -q` (since read_dir on \wsl.localhost fails with OS
error 64/67). Drive letters appear before WSL entries, which are
displayed as "Ubuntu-24.04 (WSL)" etc. On non-Windows platforms,
behavior is unchanged.
* Rename ListHostEntries to ListWindowsVolumes and gate behind FullHdAccess
The old name was misleading — on Unix it just returned `/`, which isn't
"listing host entries." Rename to ListWindowsVolumes to make the
Windows-specific intent explicit, gate behind FullHdAccess permission,
and replace the Unix implementation with a log::error since the command
is not meaningful on non-Windows platforms.
* Replace direct array indexing with .get() in strider platform detection
Use safe accessors and matches! macro instead of direct byte indexing
for bounds-checked access patterns.
---------
Co-authored-by: divens <divens.dev@gmail.com>
|
| |
|
|
|
|
|
|
|
| |
* release notes
* fix some link issues
* rustfmt
* fix click wording
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
| |
Use cmd.status() instead of cmd.output() on Windows to prevent pipe
handle inheritance from blocking indefinitely. cmd.output() creates
pipe handles that the grandchild web server process inherits via
CreateProcess bInheritHandles, keeping them open and preventing EOF.
Co-authored-by: divens <divens.dev@gmail.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Fix Windows config/data paths and consolidate path helpers
Move platform-specific path logic into home_unix.rs / home_windows.rs
behind a shared interface. Consolidate duplicated path helpers from
setup.rs into home.rs. Use Display formatting for paths in setup info
output to avoid escaped backslashes on Windows.
- Remove organization from ProjectDirs to get clean Zellij\ paths
- Add Windows-specific ProgramData paths for system config/data
- Remove duplicated find_default_config_dir, get_default_data_dir,
xdg_config_dir, xdg_data_dir, home_config_dir, get_layout_dir,
get_theme_dir from setup.rs (now in home.rs)
* Restore quoted paths in setup --check and org qualifier on non-Windows
Restore quotation marks around paths in setup --check output, and keep
the "org", "Zellij Contributors" qualifier in ProjectDirs on non-Windows
platforms to preserve existing config directory locations.
---------
Co-authored-by: divens <divens.dev@gmail.com>
|
| | |
|
| |
|
|
|
| |
* add all blocking flags to action new-pane
* security updates
|
| |
|
|
|
|
|
| |
* don't reuse terminal pane_ids, perform some cleanups
* rustfmt
* add pr
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Add Windows MSI installer with WiX v6
Build a dual-scope MSI installer that lets users choose per-user
(%LocalAppData%\Zellij) or per-machine (Program Files\Zellij) install,
with automatic PATH configuration and clean uninstall support.
- Custom UI based on stock WixToolset.UI.wixext dialogs to work around
the long-standing WixUI_Advanced dual-scope bug (wixtoolset/issues#7137)
- Custom folder resolution CAs (SetFolderPerUser/SetFolderPerMachine)
- Embed application icon into zellij.exe via embed-resource
- Icon shown in Add/Remove Programs via ARPPRODUCTICON
- MSI build integrated into release.yml CI workflow
* Add MSI installer to no-web build and fix artifact naming
- Add MSI build steps to build-release-noweb job
- Add SHA256 checksums for MSI artifacts
- Pin WixToolset.UI.wixext to 6.0.2 to avoid v7 RC incompatibility
- Use -installer suffix after target in artifact names
---------
Co-authored-by: divens <divens.dev@gmail.com>
|
| |
|
|
|
| |
* upgrade sixel-image
* add pr
|
| |
|
|
|
| |
* cleanup compilation warnings
* consolidate EditScrollbackRaw into EditScrollback
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* add missing pane-id and tab-id arguments to all cli actions
* rustfmt
* dump-screen --ansi
* edit-scrollback --ansi
* add --ansi to subscribe
* add tests for ansi additions
* add ansi render report to plugins
* rustfmt
* fix e2e tests
* add pr
|
| |
|
|
|
|
|
|
|
|
|
| |
* add missing pane-id and tab-id arguments to all cli actions
* rustfmt
* fix tests
* update e2e snapshots
* add pr
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Fix debug-mode stack overflow on Windows
The clap-derived augment_subcommands for CliAction (~70 variants)
produces a >1 MB stack frame in debug mode, overflowing the Windows
default 1 MB main-thread stack. Increase it to 8 MB via linker flag
to match Linux. Only applies to debug builds; release optimizes the
frame down and doesn't need it.
* move file and include dev-opt
---------
Co-authored-by: divens <divens.dev@gmail.com>
Co-authored-by: Aram Drevekenin <aram@poor.dev>
|
| |
|
|
|
|
|
|
|
|
|
| |
* fix: pass NotificationEnd to KeybindPipe to prevent 1s timeout
* fix: threded down complete signal
* fix: shadowing fixes
---------
Co-authored-by: Gence Erdagi <gence@Gence.localdomain>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* fix: restore console input mode on exit to prevent mouse sequence leak
On Windows with WezTerm (VT input path), enable_vt_input() sets
ENABLE_MOUSE_INPUT and ENABLE_VIRTUAL_TERMINAL_INPUT on the console
handle. crossterm's disable_raw_mode() only ORs back LINE_INPUT,
ECHO_INPUT and PROCESSED_INPUT — it never clears those flags.
After Zellij exits, ConPTY continues delivering mouse events as VT
escape sequences (urxvt mode 1015) into the shell's stdin, causing
visible garbage like [555;99;32M at the prompt.
Fix: save the original console mode before enable_vt_input() modifies
it, and restore it on all exit paths via a new restore_console_mode()
method on the ClientOsApi trait. Also move disable_mouse() before
unset_raw_mode() on error/panic paths for correct ordering.
* Move Windows VT input state management to stdin_handler_windows.rs
Move enable_vt_input, restore_vt_input, ORIGINAL_CONSOLE_MODE, and
related windows-sys imports from the shared stdin_handler.rs into
stdin_handler_windows.rs to keep platform-specific code in _windows
files per project convention.
---------
Co-authored-by: divens <divens.dev@gmail.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(#4818)
* fix: handle short writes in write_to_tty_stdin to prevent paste truncation
On macOS the kernel PTY buffer is only 4-16 KiB, so a single write()
call for a large paste returns a short write count rather than blocking
until all bytes are accepted. The current code returns this partial
count without retrying, silently dropping the remaining bytes.
This wraps the write in a retry loop that handles:
- Short writes (advances the buffer offset and retries)
- EINTR (retries immediately)
- EAGAIN (sleeps 1ms then retries)
Without this fix, pasting ~1 KiB+ of text into a terminal pane loses
everything beyond the first kernel-buffer-full.
Includes a test that exercises the fix using a real PTY pair with
O_NONBLOCK set on the master fd to force short writes.
* fix: cap EAGAIN retries at 50 to prevent infinite busy-wait
Per reviewer feedback, add a retry counter that caps consecutive EAGAIN
retries at 50 and logs an error if the limit is reached. The counter
resets on any successful write progress, so it only triggers when the
PTY is genuinely stuck.
* fix: use poll(POLLOUT) instead of sleep-retry loop for EAGAIN handling
Replace the 50-retry sleep(1ms) busy-wait with poll(POLLOUT, 5s timeout).
This properly waits for fd writability without CPU spinning and returns
an error on timeout instead of silently returning Ok(partial) — which
the caller (pty_writer_main) would ignore, causing silent data loss.
Tests:
- write_to_tty_stdin_delivers_all_bytes: remove flaky reader delay,
use concurrent reader, move master close after reader join to avoid
macOS kernel buffer flush race
- write_all_to_fd_errors_on_stuck_pty: new test verifying timeout
returns Err on stuck PTY (uses 100ms timeout for speed)
* fix: re-queue partial PTY writes instead of blocking PtyWriter thread
Replace the poll(POLLOUT) blocking loop with a non-blocking re-queue
approach as suggested in review. On partial write or EAGAIN:
- write_to_tty_stdin now drains as much as the kernel accepts in one
pass and returns the count (may be 0 on EAGAIN)
- PtyWriter re-queues unwritten bytes back onto its own channel,
letting other terminals' writes proceed between retries
- Retry count tracks consecutive zero-progress attempts (reset on
any forward progress), drops bytes after 50 retries with log::error
- yield_now() before re-queue on zero progress to avoid tight spin
- Guard against write() returning Ok(0) on non-empty buffer
- Wire up PtyWriter's self-sender (was None, now Some(&to_pty_writer))
* fix: per-terminal write buffering to handle short writes and EAGAIN
Replace re-queue approach with per-terminal pending write buffers
(HashMap<u32, VecDeque<PendingWrite>>). Uses recv_timeout(10ms) when
pending data exists, blocking recv when idle. 10MB per-terminal cap
drops buffer on overflow. Terminal errors clear the queue.
Adds Bus::recv_timeout via crossbeam Select::select_timeout.
Removes tcdrain from write path.
* use safe accessor methods and saturating substitutions
* add tests for ptywriter
* rustfmt
* fix tests by not assuming kernel buffer sizes
* rustfmt
* add pr
---------
Co-authored-by: Aram Drevekenin <aram@poor.dev>
|
| |
|
|
|
|
|
|
|
| |
* implement focus follows mouse
* mouse click through
* rustfmt
* add pr
|
| | |
|
| |
|
|
|
|
|
| |
* fix: atomic floating pane issues with the about screen
* rustfmt
* add pr
|
| |
|
|
|
|
|
|
|
| |
* close self after applying and rename tab as layout
* general ui/ux fixes
* change session manager title on startup
* add pr
|
| |
|
|
|
|
|
|
|
| |
* security hardening
* fix some issues
* rustfmt
* add pr
|
| |
|
|
|
| |
* highlight priority levels
* add pr
|
| |
|
|
|
| |
* allow specifying ip/port with the zellij web --status cli
* add pr
|
| | |
|
| | |
|