Commit graph

105 commits

Author SHA1 Message Date
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
905892439f chore: update development version 2025-04-15 09:45:04 +02:00
Aram Drevekenin
f7546ae43b chore: update patch version 2025-04-15 09:09:03 +02: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
5081352b54 chore(repo): update development version 2025-03-21 10:11:37 +01:00
Aram Drevekenin
a1693ab2a8 chore(release): v0.42.1 2025-03-21 09:47:15 +01:00
Aram Drevekenin
5d5f58465a chore(repo): update development version 2025-03-17 09:50:17 +01:00
Aram Drevekenin
46f6b59cb5 chore(repo): bump development version 2024-11-19 14:21:18 +01:00
Aram Drevekenin
b8cceacc60 chore(version): set patch version 2024-11-19 13:04:31 +01:00
Aram Drevekenin
f958ae9205 chore(repo): bump development version 2024-11-05 09:32:45 +01:00
Aram Drevekenin
c0ac187cab HOTFIX: patch version 2024-11-04 11:41:21 +01:00
Aram Drevekenin
81c5a2a9df chore(version): bump development version 2024-05-02 10:43:25 +02:00
Aram Drevekenin
d81bda0937 chore(version): adjust version for release 2024-05-02 08:56:36 +02:00
Aram Drevekenin
07dddc60fc chore(version): bump development version 2024-04-16 12:03:02 +02:00
Aram Drevekenin
65bea269a4 chore(version): bump development version 2023-11-29 13:13:23 +01:00
Aram Drevekenin
8e2d37e141 chore(version): bump to 0.39.2 2023-11-29 11:41:59 +01:00
Aram Drevekenin
c33f5b6cc6 chore(version): bump development version 2023-11-13 10:17:12 +01:00
Aram Drevekenin
ebcf35989a chore(release): v0.39.1 2023-11-13 08:51:24 +01:00
Aram Drevekenin
b20715b5ae chore(version): bump development version 2023-11-07 10:28:04 +01:00
Aram Drevekenin
e70743e3f1 chore(version): bump development version 2023-09-15 18:36:42 +02:00
Aram Drevekenin
30db58eaf6 chore(version): bump version for patch release 2023-09-15 17:29:33 +02:00
Aram Drevekenin
697723ddd3 chore(version): bump development version 2023-08-31 11:43:28 +02:00
Aram Drevekenin
a4279ca9ba chore(version): adjust version for release 2023-08-31 10:44:01 +02:00
Aram Drevekenin
ac4085d1a4 chore(version): bump development version 2023-08-28 11:23:53 +02:00
Aram Drevekenin
5bf421ecdc chore(version): bump development version 2023-07-12 20:32:53 +02:00
Aram Drevekenin
3ed2a24572 chore(version): bump development version 2023-06-20 17:31:34 +02:00
Aram Drevekenin
294b87803f chore(version): bump development version 2023-06-19 18:54:15 +02:00
Aram Drevekenin
5b14fc423b chore(version): bump development version 2023-06-19 18:14:00 +02:00
Aram Drevekenin
4102a14e5c chore(version): bump development version 2023-06-18 15:10:43 +02:00
Aram Drevekenin
03c507bc64 chore(version): bump development version 2023-04-13 11:16:47 +02:00
Aram Drevekenin
09c1d7909d chore(version): bump development version 2023-03-10 15:39:58 +01:00
Aram Drevekenin
43a52a2bd3 chore(version): bump development version 2023-03-10 14:50:39 +01:00
Aram Drevekenin
dfae62526b chore(version): bump development version 2023-03-07 10:14:14 +01:00
Aram Drevekenin
112782e1ed
chore(repo): version 0.35.0 (#2230)
* chore(assets): new readme animation

* chore(assets): increase animation resolution

* chore(assets): improve animation

* chore(assets): improve animation

* docs(readme): some cleanups and clarifications

* docs(readme): fix links and wording

* chore(version): bump development version
2023-03-07 09:26:11 +01:00
Aram Drevekenin
3a0e56afd8
fix(ux): cache stdin queries on startup (remove startup delay) (#2173)
* fix(ux): cache stdin queries on startup

* style(fmt): rustfmt
2023-02-17 19:32:07 +01:00
Andreas Hartmann
177cd20bea chore: Bump development version 2022-12-13 17:24:19 +01:00
Andreas Hartmann
962f37e767 chore: Bump development versions 2022-12-13 14:59:49 +01:00
Aram Drevekenin
0598a84e1f chore(version): patch version due to CI difficulties 2022-12-09 12:09:07 +01:00
Aram Drevekenin
fba273eebb chore(version): patch version due to CI difficulties 2022-12-09 12:01:20 +01:00
Aram Drevekenin
adab6b8363 chore(version): patch version due to CI difficulties 2022-12-09 11:44:36 +01:00
Aram Drevekenin
a71b2ae890 chore(version): bump development version 2022-11-10 11:48:09 +01:00
Aram Drevekenin
5793af7655 chore(version): bump development version 2022-10-25 11:43:53 +02:00
Aram Drevekenin
79bf6ab868
feat(config): switch to kdl (#1759)
* chore(config): default kdl keybindings config

* tests

* work

* refactor(config): move stuff around

* work

* tab merge layout

* work

* work

* layouts working

* work

* layout tests

* work

* work

* feat(parsing): kdl layouts without config

* refactor(kdl): move stuff around

* work

* tests(layout): add cases and fix bugs

* work

* fix(kdl): various bugs

* chore(layouts): move all layouts to kdl

* feat(kdl): shared keybidns

* fix(layout): do not count fixed panes toward percentile

* fix(keybinds): missing keybinds and actions

* fix(config): adjust default tips

* refactor(config): move stuff around

* fix(tests): make e2e tests pass

* fix(kdl): add verbose parsing errors

* fix(kdl): focused tab

* fix(layout): corret default_tab_template behavior

* style(code): fix compile warnings

* feat(cli): send actions through the cli

* fix(cli): exit only when action is done

* fix(cli): open embedded pane from floating pane

* fix(cli): send actions to other sessions

* feat(cli): command alias

* feat(converter): convert old config

* feat(converter): convert old layout and theme files

* feat(kdl): pretty errors

* feat(client): convert old YAML files on startup

* fix: various bugs and styling issues

* fix: e2e tests

* fix(screen): propagate errors after merge

* style(clippy): lower clippy level

* fix(tests): own session_name variable

* style(fmt): rustfmt

* fix(cli): various action fixes

* style(fmt): rustfmt

* fix(themes): loading of theme files

* style(fmt): rustfmt

* fix(tests): theme fixtures

* fix(layouts): better errors on unknown nodes

* fix(kdl): clarify valid node terminator error

* fix(e2e): adjust close tab test

* fix(e2e): adjust close tab test again

* style(code): cleanup some comments
2022-10-05 07:44:00 +02:00
Aram Drevekenin
3f43a057cb chore(version): bump development version 2022-09-09 13:38:22 +02:00
Aram Drevekenin
a28d905d84 chore(release): v0.31.4 2022-09-09 13:00:24 +02:00
Aram Drevekenin
639de16c5e chore(version): bump development version 2022-08-18 09:30:12 +02:00
Aram Drevekenin
588167f38e chore(release): v0.31.3 2022-08-18 08:55:21 +02:00
Aram Drevekenin
ac8a9d4b28 chore(version): bump development version 2022-08-17 11:46:46 +02:00