Commit Graph
3236 Commits
Author SHA1 Message Date
Aram Drevekenin 120b649c48 chore(release): v0.44.1 2026-04-07 14:47:27 +02:00
Aram Drevekenin 7faac6f4ae Minor fix before patch version (#5011)
* bump patch version

* fix: preserve row background when scrolling

* add pr
2026-04-07 11:57:07 +02:00
Aram Drevekenin 985cca716e docs(changelog): osc52 report pr 2026-04-07 11:20:46 +02:00
Michael HoangandMichael Hoang b8057186b5 feat(zellij-server): report OSC 52 clipboard support over DA1 (#4545)
As Zellij always handles OSC 52 from inner programs and then forwards
it appropriately (`copy_command`, `copy_clipboard`), I think it makes
sense to unconditionally report OSC 52 support.

Co-authored-by: Michael Hoang <[email protected]>
2026-04-07 11:19:23 +02:00
Aram Drevekenin 93c7ef5249 Fix pty race when opening new panes (#5010)
* fix: race condition when starting panes

* rustfmt

* add pr
2026-04-07 08:53:35 +02:00
Aram Drevekenin 060b7f41a0 docs(changelog): underline reset fix 2026-04-06 15:10:59 +02:00
Kószó Attilaandkazimazi 9bf9bafa1b fix(ansi): reset bold should not entail reset underline (#4962)
Co-authored-by: kazimazi <[email protected]>
2026-04-06 15:10:13 +02:00
Aram Drevekenin 4d0115b136 docs(changelog): update --name pr 2026-04-06 10:35:29 +02:00
divensanddivens 2b3ae1e69c fix: respect --name flag when creating new panes (#4979)
* fix: respect --name flag when creating and renaming panes

Three issues fixed:

1. Pane creation: --name was silently discarded for default shell panes
   because use_terminal_title was true. Now user-provided names take
   priority. Also pass initial_pane_title as pane_name to TerminalPane
   constructor (was hardcoded to empty string).

2. CLI rename without --pane-id: was routed through PaneNameInput which
   appends to existing name. Now uses a dedicated RenameActivePane action
   that fully replaces the name, working for any name length including
   single characters.

3. Interactive rename: entering rename mode preserves the existing name
   for editing (append/backspace). Esc reverts to the name before rename
   mode was entered.

Adds 28 tests covering rename semantics, interactive editing, undo,
OSC title interaction, and a wire-level IPC round-trip test.

* refactor: route active-pane rename via Option<PaneId>

Replace the dedicated Action::RenameActivePane variant with an
Option<PaneId> on the existing Action::RenamePaneByPaneId. route.rs
dispatches None to the server-internal ScreenInstruction::RenameActivePane
and Some(id) to the existing RenamePaneWithPaneId path.

Drops all proto/conversion boilerplate for the removed variant: plugin
API additions, IPC tag 137, and both directions of the wire conversion.

---------

Co-authored-by: divens <[email protected]>
2026-04-06 10:34:23 +02:00
Aram Drevekenin d52e1aa2b8 docs(changelog): update recent PRs 2026-04-03 10:24:20 +02:00
Satoru HigaandAram Drevekenin 27a825ebdc fix: position host cursor for CJK IME even when app hides cursor (#4951)
* fix: position host cursor for CJK IME even when app hides cursor

When apps like Claude Code (ink/React library) hide the cursor during
rendering, Zellij's render_cursor() was not sending a CUP sequence to
the host terminal. This caused IME composition candidates to appear at
the wrong position, breaking CJK input in these apps.

Change cursor_coordinates() to return the cursor position unconditionally
(as long as it is within bounds) along with a bool indicating visibility.
render_cursor() now positions the host cursor even when the app has hidden
it, so the IME subsystem can read the correct cursor position.

* add test

* rustfmt

---------

Co-authored-by: Aram Drevekenin <[email protected]>
2026-04-03 10:21:34 +02:00
divensanddivens cbe0237b1e fix(windows): encode modifiers in raw bytes for non-Char keys (#4967)
On the native console input path, crossterm captures modifier flags
from INPUT_RECORD but the raw bytes written to the PTY don't include
them. This causes inner applications to never see ALT, SHIFT, or CTRL
modifiers for keys like Enter, Tab, Backspace, arrows, and function
keys.

Encode modifiers using standard VT conventions:
- Simple keys (Enter, Tab, Backspace): ALT uses ESC prefix, other
  modifiers use CSI u encoding
- CSI letter-final keys (arrows, Home, End): xterm modifier parameter
- CSI tilde keys (PageUp, Delete, F5+): modifier before tilde
- SS3 keys (F1-F4): convert to CSI with modifier

Co-authored-by: divens <[email protected]>
2026-04-03 10:04:41 +02:00
0532949bbd fix(web-client): use base URL when switching sessions (#4981)
* fix(web-client): use base URL when switching sessions

Session switch redirected to /{session_name} instead of
{base_url}/{session_name}, breaking reverse proxy setups.

Use getBaseUrl() to construct the redirect URL, consistent with
how auth.js and connection.js already handle base URL.

Fixes #4980

Co-authored-by: Copilot <[email protected]>

* fix(web-client): encode session name in redirect URL

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>

* docs: update changelog
---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
Co-authored-by: Thomas Linford <[email protected]>
2026-04-02 12:05:51 +02:00
Aram Drevekenin 1411b2d9ad Fix bce and other issues (#4992)
* fix bce and other issues

* rustfmt

* add pr
2026-04-02 11:54:15 +02:00
Thomas Linford 6542afabd8 fix(e2e): stabilize tests and support Apple Silicon local dev (#4952)
- 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
2026-04-01 12:41:07 +02:00
Aram Drevekenin 7c68623580 Move from native-tls to rustls in the remote client (mirrors the web server) (#4972)
* native-tls -> rustls

* add/update tests

* rustfmt

* add pr
2026-03-31 20:19:50 +02:00
Nitin GuptaandAram Drevekenin 50c029afaf Preserve scrollback for partial scroll regions starting at top (#4941)
* 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 <[email protected]>
2026-03-31 16:28:07 +02:00
Aram Drevekenin 22ace8e54f Proper error when providing layout name with a tab (#4958)
* proper error when providing layout name with a tab

* rustfmt
2026-03-30 20:34:12 +02:00
Aram Drevekenin 00c6b0f549 Error on socket paths that are too long (#4957)
* error on socket paths that are too long

* add pr
2026-03-30 16:43:01 +02:00
Aram Drevekenin 8ce05f0bbd Layout string flag (#4956)
* allow sending a stringified layout with --layout-string

* add --tab-id to all the things

* fix windows tests

* add pr
2026-03-30 16:02:09 +02:00
Aram Drevekenin 16beceaa0a docs(changelog): recent windows fixes 2026-03-28 10:40:20 +01:00
divensanddivens d12b75800c fix: resolve Windows compilation warnings (#4890)
- 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 <[email protected]>
2026-03-28 10:38:37 +01:00
Hiro ec0834f4f2 fix(windows): normalize temp socket paths (#4923) 2026-03-28 10:37:00 +01:00
Aram Drevekenin 608cc9905d Support OSC-99 desktop notifications (#4931)
* 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
2026-03-28 09:19:54 +01:00
Aram Drevekenin 802c96f5fc CLI focus-pane-id and are-floating-panes-visible actions (#4926)
* add zellij action focus-pane-id

* zellij action are-floating-panes-visible

* fix e2e tests

* add pr
2026-03-27 16:23:14 +01:00
Aram Drevekenin 2134deb5d5 docs(changelog): riscv64 binaries 2026-03-27 08:33:58 +01:00
Bruno Verachten 62f0bb361c ci: add riscv64 to release binaries (#4913)
* 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)
2026-03-27 08:32:51 +01:00
Aram Drevekenin 9014486ae7 docs(changelog): update recent PRs 2026-03-26 12:51:18 +01:00
Aram Drevekenin 12ee607532 fix: performance regression when switching tabs (#4918)
* remove pane render report

* only collect pane contents if pane should render

* add logs

* conditional keybinding serialization

* remove logs

* rustfmt

* fix tests

* tests

* rustfmt
2026-03-26 12:49:05 +01:00
Aram Drevekenin 93bc9ec00f fix: do not reset layout selection in layout manager (#4919) 2026-03-26 12:48:24 +01:00
Aram Drevekenin e220f1bd11 docs(changelog): theme pr 2026-03-26 10:57:55 +01:00
Luca PattocchioandAram Drevekenin e8cd0de2af fix: user themes from ~/.config/zellij/themes not loaded on session start (#4892)
* Fix user themes in config folder not loaded on session start

* preserve layout config dir

---------

Co-authored-by: Aram Drevekenin <[email protected]>
2026-03-26 10:57:19 +01:00
Aram Drevekenin 15485aea7d fix: properly display web server status with default ports in share plugin (#4908)
* initial implementation

* add pr
2026-03-26 07:14:42 +01:00
Aram Drevekenin e7fbd985cb chore(release): v0.44.0 v0.44.0 2026-03-23 09:03:25 +01:00
Aram Drevekenin a6a6440614 Fix cli blocking logic and update dependencies (#4881)
* fix: do not unblock blocking commands for other unblock conditions

* update deps

* allow trailing : in file path detection and change log format to match
2026-03-21 20:19:37 +01:00
divensanddivens 3fa7744906 Add windows support in strider (#4854)
* 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 <[email protected]>
2026-03-21 19:20:32 +01:00
Aram Drevekenin 4ba41c085a Release notes and fixes (#4879)
* release notes

* fix some link issues

* rustfmt

* fix click wording
2026-03-20 17:28:36 +01:00
Aram Drevekenin 9e00821c60 adjust badges location in readme 2026-03-19 10:18:56 +01:00
Aram Drevekenin fc0599a7c8 fix sponsored links truncation 2026-03-19 09:34:51 +01:00
divensanddivens 62633f930d fix(windows): avoid hang when share plugin starts web server (#4863)
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 <[email protected]>
2026-03-19 08:58:13 +01:00
divensanddivens 1166061f4c Fix Windows config/data paths and consolidate path helpers (#4852)
* 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 <[email protected]>
2026-03-19 08:54:48 +01:00
Aram Drevekenin bbba23c04f change layout manager key (#4865) 2026-03-18 10:24:29 +01:00
Aram Drevekenin 6143d485ed Minor fixes and updates (#4861)
* add all blocking flags to action new-pane

* security updates
2026-03-17 16:00:59 +01:00
Aram Drevekenin a0deec573b fix: do not reuse terminal pane ids, clean up tokio tasks (#4859)
* don't reuse terminal pane_ids, perform some cleanups

* rustfmt

* add pr
2026-03-16 22:06:41 +01:00
Kaan Ozdokmeci 34e3a6d592 feat(themes): add Flexoki Dark theme (#4555) 2026-03-16 13:03:10 +01:00
divensanddivens c4a572a884 Add Windows MSI installer with WiX v6 (#4847)
* 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 <[email protected]>
2026-03-16 12:38:38 +01:00
Aram Drevekenin f59d6b9288 fix: sixel-image aspect ratio and opacity issues (#4858)
* upgrade sixel-image

* add pr
2026-03-16 12:25:07 +01:00
Aram Drevekenin 91e7297b63 Warning and duplication cleanups (#4857)
* cleanup compilation warnings

* consolidate EditScrollbackRaw into EditScrollback
2026-03-16 10:37:45 +01:00
Aram Drevekenin a1e2247547 Ansi dump support (#4848)
* 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
2026-03-14 08:35:00 +01:00
Aram Drevekenin aa5ca34d4b Add --pane-id and --tab-id to all relevant CLI commands (#4846)
* add missing pane-id and tab-id arguments to all cli actions

* rustfmt

* fix tests

* update e2e snapshots

* add pr
2026-03-13 16:33:25 +01:00