Commit graph

3052 commits

Author SHA1 Message Date
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
23bb542548 chore(release): v0.43.0 2025-08-05 08:56:42 +02:00
Aram Drevekenin
b634a57de8
style: link and help fixes (#4339)
* style: link and help fixes

* fix: tip coloring
2025-08-04 10:40:17 +02:00
Aram Drevekenin
b7bf364c09
fix(ci): make cross compilation work with the no-web variant (#4330)
* add no_web flag to ci cross compilation

* chore(ci): refactor release to web/no-web variants

* fix ci for cross building with no-web
2025-08-01 16:17:44 +02:00
Aram Drevekenin
b5a893f36a
style: some cleanups (#4329)
* style: some cleanups

* style(fmt): rustfmt
2025-08-01 15:17:44 +02:00
Aram Drevekenin
549c5edb46
docs(about): release notes for version 0.43.0 (#4326) 2025-07-31 17:34:21 +02:00
Thomas Linford
ae8981f7a0
fix(web): focus terminal on init (#4325)
Always focus the terminal during init instead of on a mouse event.
2025-07-31 14:34:26 +02:00
Thomas Linford
aaa843eee0
fix(web): allow pasting with cmd-v (#4321) 2025-07-30 11:54:40 +02:00
Thomas Linford
be20acaa3e
fix(web-client): theme not loading (#4265)
Fix theme not getting applied in web client.

- Ensure theme is properly read from config
- Update config in web server shared state when it gets updated (without this, clients connecting after a config change would still get the old settings)
2025-07-28 11:28:04 +02:00
Vishal
090b1714b0
Add gruber-darker theme (#4288)
* Create gruber-darker.kdl

* Removed verification comments from gruber-darker.kdl
2025-07-28 10:50:30 +02:00
DawidPietrykowski
f391a73731
fix(web_server): Handle extracting session_token from multiple cookies (#4271)
Replaces `headers().get("cookie)` with `headers().get_all("cookie")`
because Axum splits a single `Cookie: a; b; c` into 3 separate headers
each with a single value
2025-07-28 10:22:08 +02:00
Aram Drevekenin
25a684e094
feat(web): allow specifying ip/port/cert/key through the cli (#4314)
* feat(web): allow specifying ip/port/cert/key through the cli

* fix no-web
2025-07-23 10:56:10 +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
Tanapol Prucksakorn
ee933744dd
performance(server): Improve dump_screen! performance (#2548)
* Pre-allocates `buf` string.
* Uses `trim_end_matches()` instead of regex.

Co-authored-by: Tanapol Prucksakorn <tanapol.pr@gmail.com>
2025-07-22 17:03:44 +02:00
Aram Drevekenin
6af82a9e99
fix(plugins): multiple-select + compact-bar tooltip multiplayer issues (#4312)
* fix: allow stacking panes if root pane is floating

* fix: handle multiple client gracefully in multiple select

* style(fmt): rustfmt

* fix compact-bar tooltip multiuser duplication

* style(fmt): rustfmt
2025-07-22 09:13:41 +02:00
Aram Drevekenin
ba680fc2eb
fix(compact-bar): tooltip duplication (#4310)
* fix(tooltip): update config name and only launch once

* add new stacked pane to tooltip
2025-07-21 14:58:00 +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
9fd7a02023
fix(web): change URL when renaming session (#4299)
* fix(web): change URL when renaming session

* style(fmt): rustfmt
2025-07-17 15:48:07 +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
25390b1616
fix(panes): do not default to tiled pane (#4295) 2025-07-16 17:36:09 +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
dcd185d499
fix(web): allow pasting with ctrl-shift-v (#4291) 2025-07-15 11:27:04 +02:00
Aram Drevekenin
1c3fd7d88e
docs(changelog): cmd/cwd fixes 2025-07-15 10:31:03 +02:00
Aram Drevekenin
d4f5975527
fix(plugins): forward CWD when opening new panes (#4290)
* use plugin cwd as last focused pane cwd when starting plugins

* fix strider to use the new change_host_folder method

* start terminals in same cwd as plugin pane if focused

* style(fmt): rustfmt
2025-07-15 10:27:43 +02:00
Rousseau Vincent
118d5fb877
fix: populate layount metadata with the right cmd and cwd (#4287)
Add cmd from sysinfo in terminal_ids_to_commands if no cmd are return by
ps. So then, cmd and cwd are udpated in "session-layout.kdl" even if no
cmd is runing in pane.
2025-07-15 10:26:43 +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
ed1f067f59 HOTFIX: e2e test flakiness 2025-07-02 15:35:59 +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
11015c8fe4
feat(plugin-api): allow replacing pane with existing pane (#4246)
* work

* make the api work

* some cleanups

* close pane

* style(fmt): rustfmt
2025-06-26 13:51:17 +02:00
Aram Drevekenin
16dd0a91cd
docs(changelog): terminal performance 2025-06-26 12:57:52 +02:00
Aram Drevekenin
a4d5b0238d
performance(terminal): consolidate renders (#4245)
* work

* fix tests for async rendering

* remove comment

* some cleanups

* style(fmt): rustfmt

* fix e2e tests

* fix more e2e tests

* style(fmt): rustfmt

* fix one more test

* style(fmt): rustfmt
2025-06-26 12:57:05 +02:00
Aram Drevekenin
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 <linford.t@gmail.com>
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