Commit Graph
941 Commits
Author SHA1 Message Date
har7an 80de7f462c build(cargo): Update Rust toolchain to 1.90.0 (#4457)
* build(cargo): Define shared manifest properties workspace-wide

in order to allow workspace members to easily copy their values, rather
than copying the actual values manually between files. Prepare for a
future update of the Rust edition this way by defining the edition in
one central location.

* build(cargo): Share the license between all workspace members

and don't copy the actual license value manually between crates.

* build(cargo): Share the rust edition between workspace members

rather than manually defining the value per crate. There is no
apparent advantage in having different parts of the code use different
rust editions. It only makes the code inconsistent, which is not a goal
worth striving for.

* build(cargo): Share the crate version between workspace members

at least for those workspace members that are versioned in lockstep.

* refactor(session-manager): Migrate to Rust edition 2021

from edition 2018 in order to use a single unified Rust edition across
the entire workspace. Apparently the migration does not involve changes
to the actual code.

* refactor(plugin-manager): Migrate to Rust edition 2021

from edition 2018 in order to use a single unified Rust edition across
the entire workspace. Apparently the migration does not involve changes
to the actual code.

* build(zellij-utils): Remove the obsolete build script

which has contained nothing but comments for two years now. The initial
"workaround" has by now become the proper solution and the original
issue (see <https://github.com/zellij-org/zellij/pull/2711>) has never
been heard of since.

The real motivation for this change is the simple fact that this version
of prost-build pulled in a pretty old version of the `which` crate which
doesn't appear to build with Rust 1.89 (latest stable as of now).

* build(cargo): Update Rust toolchain to 1.89

which is the latest stable toolchain as of writing this and has support
for the 2024 Rust edition, unlike the previously used 1.84.

* fixup! build(zellij-utils): Remove the obsolete build script

* refactor: Make implicitly elided lifetimes explicit

in cases where a functions return type has an actual lifetime that
depends on a non `'static` argument.

* build(cargo): Update Rust toolchain to 1.90.0

which is the latest stable toolchain as of writing this. Compared to
1.89.0 this changes the default linker and should, hence, cut down
iteration times during development significantly.

* ci: Force configured rust toolchain version in release builds

for the tagged release assets. Previously the rust version was
unconditionally overwritten to be `stable` regardless of what
`rust-toolchain.toml` configured.

* docs(changelog): Add MR #4457

to list of unreleased changes.

* build: Read package version from workspace version value

since it no longer resides directly in the `package` object.
2025-10-06 17:11:34 +00:00
Aram Drevekenin 209d525c92 New Feature: remote attach to a Zellij session from the terminal (#4460)
* remote web attach

* docs(changelog): add PR
2025-10-06 16:25:53 +02:00
Aram Drevekenin bfbc7cd2af fix(resurrection): allow splitting fixed one-row fixed panes (#4442)
* fix(resurrection): allow splitting fixed one-row fixed panes

* docs(changelog): add PR
2025-09-25 12:14:37 +02:00
Aram Drevekenin 51ecdfeebb fix(resurrection): occasional status-bar pop-out after resurrection (#4440)
* fix(resurrection): occasional status-bar pop-out after resurrection

* add pr
2025-09-24 18:25:01 +02:00
Aram Drevekenin 533140831d fix(ipc): make sessions compatible between versions (#4439)
* translate ipc tuple enum variants to struct enum variants

* initial client/server contract

* tests and missing types

* migrate web server and remove rmp_serde

* change socket folder

* fix crash on unknown messages

* fix client  logout on unknown message

* fix web client logout on unknown message

* rustfmt

* add comment and change  log level

* address compilation warnings

* style(fmt): rustfmt

* fix plugin system test assertions

* add pr
2025-09-24 12:56:56 +02:00
Aram Drevekenin 3a26df6314 refactor(client-server-contract): config + layout (#4383)
* commented out ConfigWrittenToDisk instructions

* commented out WriteConfigToDisk instructions

* commented out FailedToWriteConfigToDisk and WriteConfigToDisk instructions

* pass cli assets from client to server instead of parsed config - kind of working, lots of stuff still broken

* move ClientAttributes to the server side

* move ClientAttributes to the server side in Attach instruction as well

* move CliArgs and runtime options from NewClient -> move them to the server

* moved plugin_aliases to the server side

* moved initial config writing to the server side

* moved layout parsing to the server

* some cleanups

* move config file watching and live reload to the server

* move config file writing to the server side

* use saved config when attaching

* get web server to work with the new config roles

* some cleanups

* moar cleanups

* even moar cleanups

* yet more cleanups

* fix tests

* style(fmt): rustfmt

* style(fmt): rustfmt

* fix e2e tests

* docs(changelog): add PR
2025-08-28 17:48:34 +02:00
Thomas Linford 7146995abc fix(web): avoid sending single meta keypresses, cleanup (#4376)
* fix(web): avoid sending single meta keypresses, cleanup

- extend the logic already used to skip single modifier keypresses to meta
- refactor: extract the code into a function, make it simpler and use event.key instead of deprecated event.keyCode
- cleanup leftover axum cors config from feature development

* update changelog
2025-08-20 17:20:59 +02:00
Aram Drevekenin d121d8e016 chore(release): v0.43.1 2025-08-08 14:54:42 +02:00
Aram Drevekenin 9fe8905e5f docs(changelog): KKP fix 2025-08-08 11:39:10 +02:00
Aram Drevekenin 671569eb8f fix(web): use session name as initial document title (#4357)
* fix(web): use session name as initial document title

* docs(changelog): add PR
2025-08-08 11:21:30 +02:00
Aram Drevekenin 7fc8a0308c fix(compact-bar): make tooltip hints use opaque bg (#4356)
* fix(compact-bar): make tooltip hints use opaque bg

* docs(changelog): add PR
2025-08-08 10:46:51 +02:00
Aram Drevekenin e2a8f2e146 docs(changelog): resurrection fix 2025-08-07 16:29:44 +02:00
Aram Drevekenin ab5461eb90 docs(changelog): terminal title fix 2025-08-07 11:35:42 +02:00
Aram Drevekenin 6848c8b136 docs(changelog): safari login fix 2025-08-07 10:23:52 +02:00
Aram Drevekenin a3cfa0316f fix(panes): backspace pane name regression (#4346)
* fix(panes): backspace pane name regression

* docs(changelog): add PR
2025-08-06 11:39:41 +02:00
Aram Drevekenin 1398e1eefc chore(repo): update development version 2025-08-05 11:01:18 +02:00
Aram Drevekenin 91716979e0 fix(status-bar): proper truncation of secondary info (#4313)
* fix(status-bar): properly truncate secondary keybindings

* style(fmt): rustfmt

* more correct fix

* fix e2e tests

* docs(changelog): add PR
2025-07-22 21:12:38 +02:00
Aram Drevekenin 67e08cbb74 docs(changelog): dump screen performance 2025-07-22 17:04:57 +02:00
Aram Drevekenin 16d8e6d0ab fix(plugins): standardize should_focus parameter when launching new plugin via pipe (#4309)
* fix(plugins): standardize should_focus parameter when launching new plugins via pipe

* docs(changelog): add PR
2025-07-21 11:29:27 +02:00
Aram Drevekenin 7d970c7090 fix: stack ordering command (#4308)
* fix: some issues with stacking panes

* cleanups and formatting

* docs(changelog): add PR
2025-07-21 09:40:43 +02:00
Aram Drevekenin 48ecb0e34f fix(ux): allow pasting and inputing wide-chars in search + tab rename + pane rename (#4303)
* fix(ux): allow pasting to search/tab-rename/pane-rename

* fix(ux): allow setting wide chars (eg. emoji) in tab/pane names

* style(fmt): rustfmt

* docs(changelog): add PR
2025-07-18 17:35:47 +02:00
Aram Drevekenin 44a3c1dae9 fix(grid): account for wide characters when double-triple mouse clicking (#4302)
* fix(grid): account for wide characters when double-triple mouse clicking

* fix(e2e): moar race conditions

* docs(changelog): add PR
2025-07-18 10:05:32 +02:00
Aram Drevekenin 32d4c7114e fix(tabs): do not send release event to inactive tab (#4300)
* fix(ui): switch left/right in multiple-select to prevent confusion

* fix(mouse): do not send release event to inactive pane

* docs(changelog): add PR
2025-07-17 18:29:04 +02:00
Aram Drevekenin 19c159175c fix(clipboard): reap process of external command (#4298)
* fix(clipboard): reap process of external command

* docs(changelog): add PR
2025-07-17 11:41:17 +02:00
Aram Drevekenin 4a68c6d90b fix(resurrection): do not parse resurrection layouts on startup (#4292)
* fix(resurrection): do not parse resurrection layouts on startup

* proper error when file is corrupt

* docs(changelog): add PR

* fix attach command

* style(fmt): rustfmt
2025-07-16 12:03:32 +02:00
Aram Drevekenin 403f0a07be fix(sessions): remove popups from welcome screen (#4294)
* remove popups from welcome screen

* docs(changelog): add pr
2025-07-16 11:43:18 +02:00
Aram Drevekenin 1c3fd7d88e docs(changelog): cmd/cwd fixes 2025-07-15 10:31:03 +02:00
Aram Drevekenin fd90067e7b fix(web-server): thread leak due to excess file watching (#4286)
* fix(web-server): thread leak due to excess file watching

* docs(changelog): add PR
2025-07-12 13:19:32 +02:00
Aram Drevekenin 8113ddf9db fix(compact-bar): fix cursor length calculation for multiple users (#4279)
* fix(compact-bar): account for multiplayer cursor length

* fix(e2e): account for races in tmux mode

* style(fmt): rustfmt

* docs(changelog): add PR
2025-07-09 17:32:41 +02:00
Aram Drevekenin f8b8d61552 fix(web-client): use default_layout if configured (#4278)
* fix(web-client): use default_layout if configured

* docs(changelog): add PR
2025-07-09 16:39:52 +02:00
Aram Drevekenin da9cf4ffeb fix(serialization): don't serialize when only UI elements present and provide post command discovery hook (#4276)
* do not serialize when only UI elements are present

* start work on a post serialization hook

* add post_command_discovery_hook

* fix tests

* style(fmt): rustfmt

* some cleanups

* moar formatting

* docs(changelog): add PR
2025-07-08 22:50:08 +02:00
Aram Drevekenin 358caa180c fix(tabs): allow setting cwd without a layout (#4273)
* working for cli and keybinding

* working for plugin API

* style(fmt): rustfmt

* docs(changelog): add PR
2025-07-08 11:06:03 +02:00
Aram Drevekenin 2b9884645d fix(plugins): use the terminal title when spawning terminals (#4272)
* fix(plugins): use the terminal title when spawning terminals

* docs(changelog): add PR

* fix: plugin tests
2025-07-07 19:06:31 +02:00
Aram Drevekenin 2580564d50 feat(terminal): multiline hyperlink support (#4264)
* working

* done

* docs(changelog): add PR
2025-07-04 14:23:55 +02:00
Aram Drevekenin c5487fb1b6 fix(web-client): various bugs (#4257)
* fix: background color issues and server recovery bug

* fix: display title in web client

* style(fmt): rustfmt

* docs(changelog): add PR
2025-07-02 13:38:00 +02:00
Aram Drevekenin ca0048bdcb feat: stack pane action (#4255)
* refactor: group placement properties

* add stackpane cli and keybinding

* add test

* refactor: move spawn vertically/horizontally to spawnterminal

* fix tests and cleanups

* some cleanups and minor fixes

* more cleanups

* add stack action to the UI

* style(fmt): rustfmt

* fix serialization

* add to default config

* fix e2e tests

* style(fmt): rustfmt

* fix cli

* fix tests

* docs(changelog): add PR
2025-07-01 20:17:37 +02:00
Aram Drevekenin 02a0d055b6 docs(changelog): replace pane API 2025-06-26 13:51:59 +02:00
Aram Drevekenin 16dd0a91cd docs(changelog): terminal performance 2025-06-26 12:57:52 +02:00
Aram DrevekeninandThomas Linford c5ac796880 Feature: web-client/server to share your sessions in the browser (#4242)
* work

* moar work

* notes

* work

* separate to terminal and control channels

* stdin working

* serve html web client initial

* serve static assets loaded with include_dir

* merge

* enable_web_server config parameter

* compile time flag to disable web server capability

* rustfmt

* add license to all xterm.js assets

* mouse working except copy/paste

* helpful comment

* web client improvements

- move script to js file
- add favicon
- add nerd font
- change title

TODO: investigate if font license embedded in otf is sufficient

* get mouse to work properly

* kitty keyboard support initial

* fix wrong type in preload link

* wip axum websocket handlers

- upgrade axum to v0.8.1, enable ws feature
- begin setup of websocket handlers
- tidy up imports

* replace control listener

* handle terminal websocket with axum

* cleanup Cargo.toml

* kitty fixes and bracketed paste

* fix(mouse): pane not found crash

* initial session switching infra

* add `web_client_font` option

* session switching, creation and resurrection working through the session manager

* move session module to zellij-utils and share logic with web-client

* some cleanups

* require restart for enable-web-server

* use session name from router

* write config to disk and watch for config changes

* rename session name to ipc path

* add basic panic handler, make render_to_client exit on channel close

* use while let instead of loop

* handle websocket close

* add mouse motions

* make clipboard work

* add weblink handling and webgl rendering

* add todo

* fix: use session name instead of patch on session switch

* use "default" layout for new sessions

* ui indication for session being shared

* share this session ui

* plugin assets

* Fix process crash on mac with notify watcher.

Use poll watcher instead of recommended as a workaround.

* make url session switching and creation work

* start welcome screen on root url

* scaffold control messages, set font from config

* set dimensions on session start

* bring back session name from url

* send bytes on terminal websocket instead of json

- create web client os input and id before websocket connection

* draft ui

* work

* refactor ui

* remove otf font, remove margins to avoid scrollbar

* version query endpoint for server status

* web session info query endpoint

* refactor: move stuff around

* add web client info to session metadata

* make tests pass

* populate real data in session list

* remove unnecessary endpoint

* add web_client node to config, add font option

* remove web_client_font

* allow disabling the web session through the config - WIP

* formalize sharing/not-sharing configuration

* fix tests

* allow shutting down web server

* display error when web clients are forbidden to attach

* only show sessions that allow web clients if this is a web client

* style(fmt): rustfmt

* fix: query web server from Zellij rather than from each plugin

* remove log spam

* handle some error paths better in the web client

* allow controlling the web server through the cli

* allow configuring the web server's ip/port

* fix tests and format code

* use direct WebServerStatus event instead of piggy-backing on SessionInfo

* plugin revamp initial

* make plugin responsive

* adjust plugin title

* refactor: share plugin

* refactor: share plugin

* add cors middleware

* some fixes for running without a compiled web server capability

* display error when starting the share plugin without web server support

* clarify config

* add pipelines to compile zellij without web support

* display error when unable to start web server

* only query web server when share plugin is running

* refactor(web-client): connection table

* give zellij_server_listener access to the control channel

* fixes and clarifications

* refactor: consolidate generate_unique_session_name

* give proper error when trying to attach to a forbidden session

* change browser URL when switching sessions

* add keyboard shortcut

* enforce https when bound to non-loopback ip

* initial authentication token implementation

* background color from theme

* initial web client theme config

* basic token generation ui

* refactor set config message creation

* also set body background

* allow editing scrollback for plugins too

* set scrollback to 0

* properly parse colors in config

* generate token from plugin

* nice login modals

* initial token management screen

* implement token authentication

* refactor(share): token management screen

* style(fmt): rustfmt

* fix(plugin): some minor bugs

* refactor(share): main screen

* refactor(share): token screen

* refactor(share): main

* refactor(share): ui components

* fix(responsiveness): properly send usage_width to the render function

* fix cli commands and add some verbosity

* add support for settings ansi and selection colors

* add cursor and cursor accent

* basic web client tests

* fix tests

* refactor: web client

* use session tokens for authentication

* improve modals

* move shutdown to ipc

* refactor: ipc logic

* serialize theme config for web client

* update tests

* refactor: move some stuff around to prepare for config hot reload

* config live reloading for the web clients

* change remember-me UI wording

* improve xterm.js link handling

* make sure terminal is focused on mousemove

* remove deprecated sharing indication from compact-bar

* gate deps and functionality behind the web_server_compatibility feature

* feat(build): add --no-web flag in all the places

* fix some other build flows

* add new assets

* update CI for no-web (untested)

* make more dependencies optional

* update axum-extra

* add web client configuration options

* gracefully close connections on server exit

* tests for graceful connection closing

* handle client-side reconnect when server is down

* fix: make sure ipc bus folder exists before starting

* add commands to manage login tokens from the cli

* style(fmt): rustfmt

* some cleanups

* fix(ux): allow alt-right-click on the web client without opening the context menu

* fix: prevent attaching to welcome screen

* fix: reload config issues

* fix long socket path on macos

* normalize config conversion and fix color gap in browser

* revoke session_token cookie if it is not valid

* fix: visual bug with multiple clients in extremely small screen sizes

* fix: only include rusqlite for the web server capability builds

* update e2e snapshots

* refactor(web): client side js

* some cleanups

* moar cleanups

* fix(tests): wait for server instead of using a fixed timeout

* debug CI

* fix(tests): use spawn_blocking for running the test web server

* fix(tests): wait for http rather than tcp port

* fix(tests): properly pass config path - hopefully this is the issue...

* success! bring back the rest of the tests

* attempt to fix the macos CI issue

* docs(changelog): add PR

---------

Co-authored-by: Thomas Linford <[email protected]>
2025-06-23 19:19:37 +02:00
Aram Drevekenin 7ef7cd5ecd feat(ui): add optional tooltip with key hints to the compact bar (#4225)
* initial implementation

* some refactoring

* refactor: separate some concerns and tidy up

* fix: move tooltip to focused tab as needed

* some ux adjustments

* some refactoring

* only show tooltip if we have configured a shortcut key

* add plugin artifacts

* fix tests

* truncate tooltip if it exceeds width

* change config name

* remove comment

* docs(changelog): add PR
2025-06-10 17:23:46 +02:00
Aram Drevekenin a9f8bbcd19 feat(ux): improve multiple select (#4221)
* intercept/clear-intercept key APIs

* allow opening a pinned unfocused floating pane

* rework plugin

* improve some apis

* fix tests

* tests for pane groups

* more exact placement and tests

* plugin command permission and cleanup

* improve some multiselect ux

* improve plugin ui

* remove old status indicator

* allow moving plugin out of the way

* style(fmt): rustfmt

* update plugins

* remove old keybinding

* cleanups

* fix: only rename pane if needed

* changelog and some cleanups

* style(fmt): rustfmt
2025-06-03 17:15:32 +02:00
Aram Drevekenin 226f5dc854 docs(changelog): theme fixes 2025-04-30 15:00:11 +02:00
Aram Drevekenin 717e54e0df docs(changelog): multiple select 2025-04-29 20:53:06 +02:00
Aram Drevekenin 20838a4114 chore(release): v0.42.2 2025-04-15 09:13:16 +02:00
Aram Drevekenin 70fd08a148 docs(changelog): deps upgrade 2025-04-08 09:33:40 +02:00
Aram Drevekenin f3351f4f75 performance(render): improve rendering performance by consolidating renders and introducing repaint_delay (#4100)
* initial draft

* style(comment): add explanation to async render

* remove timeouts from terminal_bytes

* some cleanups

* cleanups

* chore(docs): update pr
2025-03-24 16:48:39 +01:00
har7an 6be8c495bc build: Don't re-export foreign crates in utils (#4087)
* build(utils): Don't use reexported dependency

for internal code, but use the dependency directly.

* build(client): Don't use re-exports from `utils`

but turn `zellij-utils` dependencies into shared workspace dependencies
instead and specify those in `Cargo.toml` explicitly. This gives a much
better overview of what component in zellij uses which crates. The
previous approach hides a lot of this information since it looks like
crates are used in a single place where this isn't actually true.

* deps(tile): Don't use re-exports from zellij-utils.

* build(zellij): Don't use re-exports from zellij-utils.

* build(server): Don't use re-exports from zellij-utils.

* build(utils): Don't re-export foreign crates.

* docs: Update Changelog with PR #4087.

* style: Apply rustfmt.

* style: Apply rustfmt.

* build(e2e): Don't use re-export from zellij-utils.

* test: Restore e2e tests.

* style: Apply more formatting.
2025-03-23 10:03:42 +00:00
har7an a2ae82259c build: Don't use default features (#4086)
* chore: Cut down dependency features

and reduce the impact of future changes to crate `default-feature`
changes. Also reduce a few transient dependencies which were previously
pulled in by crate features we aren't using.

* deps(utils): Remove `once_cell` dependency.

* deps: Remove more dependency features.

* deps: Remove remaining default features.

* docs: Update Changelog with PR #4086.

* style: Apply rustfmt.
2025-03-22 13:40:37 +00:00
har7an 25e5f551c0 chore: Introduce workspace dependencies (#4085)
* cargo: Introduce workspace dependencies

and deduplicate dependency entries across all non-plugin workspace
members. In the future this hopefully makes dependency upgrade easier
since shared dependencies need only be touched in one location.

* docs: Update CHANGELOG with PR #4085.
2025-03-22 12:57:32 +00:00
Aram Drevekenin 503e20132a refactor(terminal): log scroll region as tuple rather than Option<tuple> (#4082)
* initial go over

* do not pad scroll region by default

* some cleanups

* moar cleanups

* style(fmt): rustfmt

* docs(changelog): add PR
2025-03-22 01:57:17 +01:00