-
-
Notifications
You must be signed in to change notification settings - Fork 666
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add plugin permission system #2624
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi, @imsnif !
I uploaded the code by applying only a very basic flow related to the UI.
Does this flow make sense?
Hey @jaeheonji - this looks great! I think this is a very good flow, and the trick you did here: https://github.com/zellij-org/zellij/pull/2624/files#diff-74ec31ae71096d7d0ec36db5be3abfd8f6ffdc920f36c2e1bc8a83ae553e115fR201 is actually more clever than what I had in mind. I like it (in the end maybe we will add some comments to explain it more, but for now it's good). What I would add to this is: once the user confirms the permissions, we need to let the plugin know (because then the plugin can make decisions about it - for example, if the user did not give permissions, the plugin can try to work in a different way, or without a certain feature). So what I suggest, is in this case to send a new What do you think? Does this make sense? |
Thank you! @imsnif
Yes! it makes sense. I thought I needed something similar, and it's a very good way. I'll update the code that puts all this together as soon as possible. |
Hi, @imsnif ! I would like to inform you that The plugin permissions system have been implemented 😄
If there is no problem in the system, we can add additional permissions before merging. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey @jaeheonji - I'll start by saying this is, as usual, fantastic work from you. You created a really great system in a short amount of time, meeting the deadline and even allowing time for review. Kudos!
I have a few comments (also left some in the code), but I think nothing major:
- I think it would be a good idea to always read from permissions.kdl when we need permissions - meaning, never keep it in memory. This will prevent a lot of troubles such as "the user deleted the cache while the plugin is still running", "the user deleted the cache and reloaded the plugin", etc. I think it's not a big performance overhead at all and will save a lot of trouble. We can always revisit this decision later if we want.
- Let's add some tests for this. I think there are some good examples here: https://github.com/zellij-org/zellij/blob/main/zellij-server/src/plugins/unit/plugin_tests.rs (these tests are run as part of our e2e tests, but not in the docker environment... they are only there because they can be a little long). I think tests such as "load plugin, try to do something that needs permission, see that we fail" and "load plugin, request permission, see that we are able to perform the action" and finally "load plugin, request different permission, see that we are not able to perform the action"
- Will it be OK for you if I play around a little bit with the UI to add colors, newlines, maybe truncations and such? I've just done it 100 times and can do it quickly :)
Once again - great work here! Looking forward to getting this merged soon.
EDIT: oops, added this as a comment and not a PR review, deleted and fixed now
Thank you so much @imsnif !
Yes. it makes sense. It seems we can always read data from the file cache whenever the plugin calls
Sure! I'll try to add it soon.
Welcome anytime. If you have something to add or update, feel free to apply right away! |
Sounds good!
Great, I'll let you work and finish this up and then I'll fix up the UI before merging. |
* supermode prototype * fix integration tests * fix tests * style(fmt): rustfmt
d509b0a
to
1c5ae05
Compare
af3785f
to
f38b914
Compare
Only thing I can think of is maybe locally you're still using an old fixture plugin? Maybe try to build everything again? Maybe even completely delete the |
I tried cleaning the project perfectly and running it again. Works fine locally, but still not in workflow. 😢 |
Hey @jaeheonji - I looked into this and it was indeed quite a tricky problem! The tests were failing because of a race condition, since the plugins are loaded asynchronously and in these cases nothing was waiting for a message from the screen thread. I fixed these by conditionally sending a message from a "fake" screen thread when they receive a permission request from the plugins. This solved the problem locally for me. I also merged from main and so transferred the permission request to use protobuffers for serializing across the wasm boundary (which we now do in main) and fixed up some other merge issues. I hope the e2e tests still pass :D I'm going to configure some permissions and change some stuff around before merging, hopefully I'll get it all done tomorrow. Great work on this!! |
Thank you for your hard work @imsnif ! |
Hey @jaeheonji - so I think I'm finally done with my part in this (hopefully, if the CI passes 🤞 ) I configured the following permissions: ReadApplicationState,
ChangeApplicationState,
OpenFiles,
RunCommands,
OpenTerminalsOrPlugins,
WriteToStdin I removed the KeyboardInput permission for now, because I think plugins should be allowed to see their input without permission. I think we will add it again when we add the ability for plugins to reigster global keybindings (I hope to be adding this soon). I also changed the permissions in So, all in all - this is a really good system. I think it works very well, I like the caching mechanism and it's quite simple to extend it. Good job on this and thanks for the quick and punctual implementation! I will go over the code one more time and then merge this if CI passes and I don't find anything that I forgot to change. |
* add necessary actions in server and utils * update * move all logic relevant to local default config directories to utils::home * add debug statements for pane geom * add tests; print resulting kdl * fix dumping custom layouts from setup; start fixing algorithm for simplest layout possible * fix: fixed persistence code and tests to support flexible layouts * fix(tab-bar,compact-bar): tab switching with mouse sometimes not working (#2587) * tab-bar: fix clicks sometimes not registering Caching the click position wasn't working across multiple plugin instances. Also a couple of refactors: - move the code with the tab switching logic inside update - avoid rendering when calling switch_tab_to, since it will happen anyway afterwards * same fix for compact-bar * docs(changelog): plugins tab switching with mouse fix * feat(ui): new status bar mode (#2619) * supermode prototype * fix integration tests * fix tests * style(fmt): rustfmt * docs(changelog): status-bar supermode * fix(rendering): occasional glitches while resizing (#2621) * docs(changelog): resize glitches fix * chore(version): bump development version * Fix colored pane frames in mirrored sessions (#2625) * server/panes/tiled: Fix colored frames in mirrored sessions. Colored frames were previously ignored because they were treated like floating panes when rendering tiled panes. * CHANGELOG: Add PR #2625 * server/tab/unit: Fix unit tests for server. * fix(sessions): use custom lists of adjectives and nouns for generating session names (#2122) * Create custom lists of adjectives and nouns for generating session names * move word lists to const slices * add logic to retry name generation * refactor - reuse the name generator - iterator instead of for loop --------- Co-authored-by: Thomas Linford <linford.t@gmail.com> * docs(changelog): generate session names with custom words list * feat(plugins): make plugins configurable (#2646) * work * make every plugin entry point configurable * make integration tests pass * make e2e tests pass * add test for plugin configuration * add test snapshot * add plugin config parsing test * cleanups * style(fmt): rustfmt * style(comment): remove commented code * docs(changelog): configurable plugins * fix(terminal): properly handle resizes in alternate screen (#2654) * docs(changelog): focus glitches * feat(plugins): utility functions to find active pane and tab (#2652) * docs(changelog): plugin api utility functions * feat(ui): break pane to new tab and move panes between tabs (#2664) * prototype * some tests * break out floating pane * break out plugin panes * add keybind and fix some minor issues * remove cli * move pane to left/right tab * update ui * adjust ui * style(fmt): rustfmt * style(comment): remove commented code * update snapshots * docs(changelog): break pane to new tab * fix(performance): plug memory leak (#2675) * docs(changelog): plug memory leak * feat(plugins): use protocol buffers for serializing across the wasm boundary (#2686) * work * almost done with command protobuffers * done translating command data structures * mid transferring of every command to protobuff command * transferred plugin_command.rs, now moving on to shim.rs * plugin command working with protobufs * protobuffers in update * protobuf event tests * various TODOs and comments * fix zellij-tile * clean up prost deps * remove version mismatch error * fix panic * some cleanups * clean up event protobuffers * clean up command protobuffers * clean up various protobufs * refactor protobufs * update comments * some transformation fixes * use protobufs for workers * style(fmt): rustfmt * style(fmt): rustfmt * chore(build): add protoc * chore(build): authenticate protoc * docs(changelog): protobuffers * feat: add plugin permission system (#2624) * WIP: add exaple of permission ui * feat: add request permission ui * feat: add caching permission in memory * feat: add permission check * feat: add file caching * fix: changes request * feat(ui): new status bar mode (#2619) * supermode prototype * fix integration tests * fix tests * style(fmt): rustfmt * docs(changelog): status-bar supermode * fix(rendering): occasional glitches while resizing (#2621) * docs(changelog): resize glitches fix * chore(version): bump development version * Fix colored pane frames in mirrored sessions (#2625) * server/panes/tiled: Fix colored frames in mirrored sessions. Colored frames were previously ignored because they were treated like floating panes when rendering tiled panes. * CHANGELOG: Add PR #2625 * server/tab/unit: Fix unit tests for server. * fix(sessions): use custom lists of adjectives and nouns for generating session names (#2122) * Create custom lists of adjectives and nouns for generating session names * move word lists to const slices * add logic to retry name generation * refactor - reuse the name generator - iterator instead of for loop --------- Co-authored-by: Thomas Linford <linford.t@gmail.com> * docs(changelog): generate session names with custom words list * feat(plugins): make plugins configurable (#2646) * work * make every plugin entry point configurable * make integration tests pass * make e2e tests pass * add test for plugin configuration * add test snapshot * add plugin config parsing test * cleanups * style(fmt): rustfmt * style(comment): remove commented code * docs(changelog): configurable plugins * style(fmt): rustfmt * touch up ui * fix: don't save permission data in memory * feat: load cached permission * test: add example test (WIP) * fix: issue event are always denied * test: update snapshot * apply formatting * refactor: update default cache function * test: add more new test * apply formatting * Revert "apply formatting" This reverts commit a4e9370. * apply format * fix: update cache path * apply format * fix: cache path * fix: update log level * test for github workflow * Revert "test for github workflow" This reverts commit 01eff3b. * refactor: permission cache * fix(test): permission grant/deny race condition * style(fmt): rustfmt * style(fmt): rustfmt * configure permissions * permission denied test * snapshot * add ui for small plugins * style(fmt): rustfmt * some cleanups --------- Co-authored-by: Aram Drevekenin <aram@poor.dev> Co-authored-by: har7an <99636919+har7an@users.noreply.github.com> Co-authored-by: Kyle Sutherland-Cash <kyle.sutherlandcash@gmail.com> Co-authored-by: Thomas Linford <linford.t@gmail.com> Co-authored-by: Thomas Linford <tlinford@users.noreply.github.com> * docs(changelog): permission system * feat(sessions): add a session manager to switch between sessions, tabs and panes and create new ones (#2721) * write/read session metadata to disk for all sessions * switch session client side * fix tests * various adjustments * fix full screen focus bug in tiled panes * fix tests * fix permission sorting issue * cleanups * add session manager * fix tests * various cleanups * style(fmt): rustfmt * clear screen before switching sessions * I hate you clippy * truncate controls line to width * version session cache * attempt to fix plugin tests * style(fmt): rustfmt * another attempt to fix the tests in the ci * docs(changelog): session manager * fix(ux): various ui/ux fixes (#2722) * force plugin render on permission request response * clear warnings * Revert "feat(ui): new status bar mode (#2619)" This reverts commit 27763d2. * adjust status bar help * fix colors in session manager and shortcut in status-bar * adjust keybindings * docs(changelog): update ux fixes * feat(plugins): optionally move plugin to focused tab (#2725) * feat(plugins): move_to_focused_tab attribute for LaunchOrFocusPlugin * style(fmt): rustfmt * docs(changelog): move plugin to focused tab * fix(keybinds): add 'floating' and 'name' to the Run command keybinding (#2726) * fix(keybinds): add 'floating' and 'name' to the Run command keybinding * style(fmt): rustfmt * docs(changelog): keybind run floating pane * fix(plugins): make sure configuration is also part of the plugin keys (#2727) * fix(plugins): make sure configuration is also part of the plugin keys * no thanks clippy * docs(changelog): fix plugin configuration uniqueness * fix(plugins): remove protobuf duplications (#2729) * fix(plugins): remove protobuf duplications * style(fmt): rustfmt * Update CHANGELOG.md * fix(plugins): various ui fixes (#2731) * Update CHANGELOG.md * fix(panes): refocus pane properly on tab change (#2734) * fix(panes): stacked panes focus bug * style(fmt): rustfmt * docs(changelog): stacked pane focus glitch * xtask/pipeline: Fix publish task (#2711) * xtask/pipeline: Fix publish task which was previously stuck in an infinite loop after successfully publishing a crate. The error originated in the code only checking for error conditions but not breaking out of the inner infinite loop in case of success. * xtask: Improve publish failure UX by offering the user more actions to choose from when an error occured. * utils/assets: Add generated prost files to assets to make sure they're available at build time and are picked up by all components. It seems we hit some strange bug with the build script where, when running `cargo publish --dry-run` the build script **is not** run before regularly compiling zellij-utils. This shouldn't happen according to the docs, but I cannot explain what's causing it. So we're using this as a workaround for now to make a smooth release. * xtask: Prevent accidental git commit deletion when dry-running a publish. * utils: Add comments to protobuf-related code to explain why these changes were performed. The comments all include a link to an issue comment explaining the situation in greater detail. * xtask: Build protobuf definitions when building any part of the project, similar to how we build the plugins when required. This should ensure that all crates built through `cargo xtask` (which is the officially supported build method) will receive up-to-date protobuf definitions. * chore(release): v0.38.0 * chore(version): bump development version * refactor(server): remove unnecessary mut (#2735) * docs(changelog): refactor server * chore(repo): update build instructions * fix(status-bar): add break tab hints (#2748) * fix(status-bar): add break tab hints * fix(tests): update snapshot to new hints * Update CHANGELOG.md * fix(reconnect): do not clear terminal state when entering alternate screen (#2750) * debug * refactor(reconnect): articular reconnection logic * docs(changelog): fix glitches on windows terminal * fix(grid): memory leak with unfocused tabs (#2745) * use hashset instead of vec for changed lines avoid output buffer growring indefinitely if tab does not get rendered * tidy up - improve hashset -> vec conversion - remove now unnecessary dedup * use copied instead of cloned on iter * docs(changelog): grid memory leak fix * fix(input): block input thread for newtiledpane and newfloatingpane as well (#2757) * docs(changelog): input action new pane fix * chore(version): adjust version for release * chore(release): v0.38.1 * chore(version): bump development version * fix(terminal): wrap lines when adding characters in alternate screen (#2789) * docs(changelog): line wrap bug * chore(version): bump version for patch release * chore(release): v0.38.2 * chore(version): bump development version * fix(utils): validate session name (#2607) * fix(utils): validate session name * cargo fmt * refactor: assign constant values to variables * refactor: move operations unrealted to the condition --------- Co-authored-by: Jae-Heon Ji <atx6419@gmail.com> * docs(changelog): fix validate session name * merge conflict fix * feat(panes): in place run (#2795) * prototype * fix tests * add to all the things except plugins * add in-place to plugin commands * fix launch-or-focus should_float and in place behavior * various cleanups * style(fmt): rustfmt * docs * bring in commands to dumped layout * tidy up data structures * bring in plugins to dumped layout * fix tests * style(fmt): rustfmt * chore: rename file (#2803) Signed-off-by: AlixBernard <alix.bernard9@gmail.com> * bring in floating panes * bring in stacked panes * style(fmt): rustfmt * bring in new_tab_template * bring in swap layouts * bring in edit panes, command panes and cwds * consolidate CWD common prefixes when possible * filter out default shell * style(fmt): rustfmt * handle scrollback editor panes properly * handle in place panes properly * bring in pane names * style(fmt): rustfmt * style(fmt): rustfmt * dump layout action to terminal * log session layout to HD periodically * resurrect dead sessions by attaching to them * delete dead sessions * style(fmt): rustfmt * start command panes as suspended by default * style(fmt): rustfmt * respect tab/pane focus * improve dump performance * hide_floating_panes in layout and resurrection * show resurrectable sessions in zellij ls and include timestamps * style(fmt): rustfmt * allow disabling session serialization in config * style(fmt): rustfmt * fix e2e tests * add e2e test * style(fmt): rustfmt * style(fmt): rustfmt * serialize and restore pane viewport * fix e2e tests and add new one * style(fmt): rustfmt * cleanups * cleanups * more cleanups * refactor: move stuff around * fix e2e tests * style(fmt): rustfmt * style(fmt): handle compilation warnings * add tests for new layout properties * fix current session name indication * style(fmt): rustfmt * adjust default config * some cleanups * go away clippy --------- Signed-off-by: AlixBernard <alix.bernard9@gmail.com> Co-authored-by: alekspickle <aleks.work2222+gh@gmail.com> Co-authored-by: Example Name <example@example.test> Co-authored-by: Oleks Gnatovskyi <22867443+alekspickle@users.noreply.github.com> Co-authored-by: Thomas Linford <tlinford@users.noreply.github.com> Co-authored-by: har7an <99636919+har7an@users.noreply.github.com> Co-authored-by: Kyle Sutherland-Cash <kyle.sutherlandcash@gmail.com> Co-authored-by: Thomas Linford <linford.t@gmail.com> Co-authored-by: Nacho114 <17376073+Nacho114@users.noreply.github.com> Co-authored-by: Jae-Heon Ji <32578710+jaeheonji@users.noreply.github.com> Co-authored-by: Orhun Parmaksız <orhunparmaksiz@gmail.com> Co-authored-by: deepsghimire <70006817+deepsghimire@users.noreply.github.com> Co-authored-by: Jae-Heon Ji <atx6419@gmail.com> Co-authored-by: AlixBernard <56587201+AlixBernard@users.noreply.github.com>
* add necessary actions in server and utils * update * move all logic relevant to local default config directories to utils::home * add debug statements for pane geom * add tests; print resulting kdl * fix dumping custom layouts from setup; start fixing algorithm for simplest layout possible * fix: fixed persistence code and tests to support flexible layouts * fix(tab-bar,compact-bar): tab switching with mouse sometimes not working (zellij-org#2587) * tab-bar: fix clicks sometimes not registering Caching the click position wasn't working across multiple plugin instances. Also a couple of refactors: - move the code with the tab switching logic inside update - avoid rendering when calling switch_tab_to, since it will happen anyway afterwards * same fix for compact-bar * docs(changelog): plugins tab switching with mouse fix * feat(ui): new status bar mode (zellij-org#2619) * supermode prototype * fix integration tests * fix tests * style(fmt): rustfmt * docs(changelog): status-bar supermode * fix(rendering): occasional glitches while resizing (zellij-org#2621) * docs(changelog): resize glitches fix * chore(version): bump development version * Fix colored pane frames in mirrored sessions (zellij-org#2625) * server/panes/tiled: Fix colored frames in mirrored sessions. Colored frames were previously ignored because they were treated like floating panes when rendering tiled panes. * CHANGELOG: Add PR zellij-org#2625 * server/tab/unit: Fix unit tests for server. * fix(sessions): use custom lists of adjectives and nouns for generating session names (zellij-org#2122) * Create custom lists of adjectives and nouns for generating session names * move word lists to const slices * add logic to retry name generation * refactor - reuse the name generator - iterator instead of for loop --------- Co-authored-by: Thomas Linford <linford.t@gmail.com> * docs(changelog): generate session names with custom words list * feat(plugins): make plugins configurable (zellij-org#2646) * work * make every plugin entry point configurable * make integration tests pass * make e2e tests pass * add test for plugin configuration * add test snapshot * add plugin config parsing test * cleanups * style(fmt): rustfmt * style(comment): remove commented code * docs(changelog): configurable plugins * fix(terminal): properly handle resizes in alternate screen (zellij-org#2654) * docs(changelog): focus glitches * feat(plugins): utility functions to find active pane and tab (zellij-org#2652) * docs(changelog): plugin api utility functions * feat(ui): break pane to new tab and move panes between tabs (zellij-org#2664) * prototype * some tests * break out floating pane * break out plugin panes * add keybind and fix some minor issues * remove cli * move pane to left/right tab * update ui * adjust ui * style(fmt): rustfmt * style(comment): remove commented code * update snapshots * docs(changelog): break pane to new tab * fix(performance): plug memory leak (zellij-org#2675) * docs(changelog): plug memory leak * feat(plugins): use protocol buffers for serializing across the wasm boundary (zellij-org#2686) * work * almost done with command protobuffers * done translating command data structures * mid transferring of every command to protobuff command * transferred plugin_command.rs, now moving on to shim.rs * plugin command working with protobufs * protobuffers in update * protobuf event tests * various TODOs and comments * fix zellij-tile * clean up prost deps * remove version mismatch error * fix panic * some cleanups * clean up event protobuffers * clean up command protobuffers * clean up various protobufs * refactor protobufs * update comments * some transformation fixes * use protobufs for workers * style(fmt): rustfmt * style(fmt): rustfmt * chore(build): add protoc * chore(build): authenticate protoc * docs(changelog): protobuffers * feat: add plugin permission system (zellij-org#2624) * WIP: add exaple of permission ui * feat: add request permission ui * feat: add caching permission in memory * feat: add permission check * feat: add file caching * fix: changes request * feat(ui): new status bar mode (zellij-org#2619) * supermode prototype * fix integration tests * fix tests * style(fmt): rustfmt * docs(changelog): status-bar supermode * fix(rendering): occasional glitches while resizing (zellij-org#2621) * docs(changelog): resize glitches fix * chore(version): bump development version * Fix colored pane frames in mirrored sessions (zellij-org#2625) * server/panes/tiled: Fix colored frames in mirrored sessions. Colored frames were previously ignored because they were treated like floating panes when rendering tiled panes. * CHANGELOG: Add PR zellij-org#2625 * server/tab/unit: Fix unit tests for server. * fix(sessions): use custom lists of adjectives and nouns for generating session names (zellij-org#2122) * Create custom lists of adjectives and nouns for generating session names * move word lists to const slices * add logic to retry name generation * refactor - reuse the name generator - iterator instead of for loop --------- Co-authored-by: Thomas Linford <linford.t@gmail.com> * docs(changelog): generate session names with custom words list * feat(plugins): make plugins configurable (zellij-org#2646) * work * make every plugin entry point configurable * make integration tests pass * make e2e tests pass * add test for plugin configuration * add test snapshot * add plugin config parsing test * cleanups * style(fmt): rustfmt * style(comment): remove commented code * docs(changelog): configurable plugins * style(fmt): rustfmt * touch up ui * fix: don't save permission data in memory * feat: load cached permission * test: add example test (WIP) * fix: issue event are always denied * test: update snapshot * apply formatting * refactor: update default cache function * test: add more new test * apply formatting * Revert "apply formatting" This reverts commit a4e9370. * apply format * fix: update cache path * apply format * fix: cache path * fix: update log level * test for github workflow * Revert "test for github workflow" This reverts commit 01eff3b. * refactor: permission cache * fix(test): permission grant/deny race condition * style(fmt): rustfmt * style(fmt): rustfmt * configure permissions * permission denied test * snapshot * add ui for small plugins * style(fmt): rustfmt * some cleanups --------- Co-authored-by: Aram Drevekenin <aram@poor.dev> Co-authored-by: har7an <99636919+har7an@users.noreply.github.com> Co-authored-by: Kyle Sutherland-Cash <kyle.sutherlandcash@gmail.com> Co-authored-by: Thomas Linford <linford.t@gmail.com> Co-authored-by: Thomas Linford <tlinford@users.noreply.github.com> * docs(changelog): permission system * feat(sessions): add a session manager to switch between sessions, tabs and panes and create new ones (zellij-org#2721) * write/read session metadata to disk for all sessions * switch session client side * fix tests * various adjustments * fix full screen focus bug in tiled panes * fix tests * fix permission sorting issue * cleanups * add session manager * fix tests * various cleanups * style(fmt): rustfmt * clear screen before switching sessions * I hate you clippy * truncate controls line to width * version session cache * attempt to fix plugin tests * style(fmt): rustfmt * another attempt to fix the tests in the ci * docs(changelog): session manager * fix(ux): various ui/ux fixes (zellij-org#2722) * force plugin render on permission request response * clear warnings * Revert "feat(ui): new status bar mode (zellij-org#2619)" This reverts commit 27763d2. * adjust status bar help * fix colors in session manager and shortcut in status-bar * adjust keybindings * docs(changelog): update ux fixes * feat(plugins): optionally move plugin to focused tab (zellij-org#2725) * feat(plugins): move_to_focused_tab attribute for LaunchOrFocusPlugin * style(fmt): rustfmt * docs(changelog): move plugin to focused tab * fix(keybinds): add 'floating' and 'name' to the Run command keybinding (zellij-org#2726) * fix(keybinds): add 'floating' and 'name' to the Run command keybinding * style(fmt): rustfmt * docs(changelog): keybind run floating pane * fix(plugins): make sure configuration is also part of the plugin keys (zellij-org#2727) * fix(plugins): make sure configuration is also part of the plugin keys * no thanks clippy * docs(changelog): fix plugin configuration uniqueness * fix(plugins): remove protobuf duplications (zellij-org#2729) * fix(plugins): remove protobuf duplications * style(fmt): rustfmt * Update CHANGELOG.md * fix(plugins): various ui fixes (zellij-org#2731) * Update CHANGELOG.md * fix(panes): refocus pane properly on tab change (zellij-org#2734) * fix(panes): stacked panes focus bug * style(fmt): rustfmt * docs(changelog): stacked pane focus glitch * xtask/pipeline: Fix publish task (zellij-org#2711) * xtask/pipeline: Fix publish task which was previously stuck in an infinite loop after successfully publishing a crate. The error originated in the code only checking for error conditions but not breaking out of the inner infinite loop in case of success. * xtask: Improve publish failure UX by offering the user more actions to choose from when an error occured. * utils/assets: Add generated prost files to assets to make sure they're available at build time and are picked up by all components. It seems we hit some strange bug with the build script where, when running `cargo publish --dry-run` the build script **is not** run before regularly compiling zellij-utils. This shouldn't happen according to the docs, but I cannot explain what's causing it. So we're using this as a workaround for now to make a smooth release. * xtask: Prevent accidental git commit deletion when dry-running a publish. * utils: Add comments to protobuf-related code to explain why these changes were performed. The comments all include a link to an issue comment explaining the situation in greater detail. * xtask: Build protobuf definitions when building any part of the project, similar to how we build the plugins when required. This should ensure that all crates built through `cargo xtask` (which is the officially supported build method) will receive up-to-date protobuf definitions. * chore(release): v0.38.0 * chore(version): bump development version * refactor(server): remove unnecessary mut (zellij-org#2735) * docs(changelog): refactor server * chore(repo): update build instructions * fix(status-bar): add break tab hints (zellij-org#2748) * fix(status-bar): add break tab hints * fix(tests): update snapshot to new hints * Update CHANGELOG.md * fix(reconnect): do not clear terminal state when entering alternate screen (zellij-org#2750) * debug * refactor(reconnect): articular reconnection logic * docs(changelog): fix glitches on windows terminal * fix(grid): memory leak with unfocused tabs (zellij-org#2745) * use hashset instead of vec for changed lines avoid output buffer growring indefinitely if tab does not get rendered * tidy up - improve hashset -> vec conversion - remove now unnecessary dedup * use copied instead of cloned on iter * docs(changelog): grid memory leak fix * fix(input): block input thread for newtiledpane and newfloatingpane as well (zellij-org#2757) * docs(changelog): input action new pane fix * chore(version): adjust version for release * chore(release): v0.38.1 * chore(version): bump development version * fix(terminal): wrap lines when adding characters in alternate screen (zellij-org#2789) * docs(changelog): line wrap bug * chore(version): bump version for patch release * chore(release): v0.38.2 * chore(version): bump development version * fix(utils): validate session name (zellij-org#2607) * fix(utils): validate session name * cargo fmt * refactor: assign constant values to variables * refactor: move operations unrealted to the condition --------- Co-authored-by: Jae-Heon Ji <atx6419@gmail.com> * docs(changelog): fix validate session name * merge conflict fix * feat(panes): in place run (zellij-org#2795) * prototype * fix tests * add to all the things except plugins * add in-place to plugin commands * fix launch-or-focus should_float and in place behavior * various cleanups * style(fmt): rustfmt * docs * bring in commands to dumped layout * tidy up data structures * bring in plugins to dumped layout * fix tests * style(fmt): rustfmt * chore: rename file (zellij-org#2803) Signed-off-by: AlixBernard <alix.bernard9@gmail.com> * bring in floating panes * bring in stacked panes * style(fmt): rustfmt * bring in new_tab_template * bring in swap layouts * bring in edit panes, command panes and cwds * consolidate CWD common prefixes when possible * filter out default shell * style(fmt): rustfmt * handle scrollback editor panes properly * handle in place panes properly * bring in pane names * style(fmt): rustfmt * style(fmt): rustfmt * dump layout action to terminal * log session layout to HD periodically * resurrect dead sessions by attaching to them * delete dead sessions * style(fmt): rustfmt * start command panes as suspended by default * style(fmt): rustfmt * respect tab/pane focus * improve dump performance * hide_floating_panes in layout and resurrection * show resurrectable sessions in zellij ls and include timestamps * style(fmt): rustfmt * allow disabling session serialization in config * style(fmt): rustfmt * fix e2e tests * add e2e test * style(fmt): rustfmt * style(fmt): rustfmt * serialize and restore pane viewport * fix e2e tests and add new one * style(fmt): rustfmt * cleanups * cleanups * more cleanups * refactor: move stuff around * fix e2e tests * style(fmt): rustfmt * style(fmt): handle compilation warnings * add tests for new layout properties * fix current session name indication * style(fmt): rustfmt * adjust default config * some cleanups * go away clippy --------- Signed-off-by: AlixBernard <alix.bernard9@gmail.com> Co-authored-by: alekspickle <aleks.work2222+gh@gmail.com> Co-authored-by: Example Name <example@example.test> Co-authored-by: Oleks Gnatovskyi <22867443+alekspickle@users.noreply.github.com> Co-authored-by: Thomas Linford <tlinford@users.noreply.github.com> Co-authored-by: har7an <99636919+har7an@users.noreply.github.com> Co-authored-by: Kyle Sutherland-Cash <kyle.sutherlandcash@gmail.com> Co-authored-by: Thomas Linford <linford.t@gmail.com> Co-authored-by: Nacho114 <17376073+Nacho114@users.noreply.github.com> Co-authored-by: Jae-Heon Ji <32578710+jaeheonji@users.noreply.github.com> Co-authored-by: Orhun Parmaksız <orhunparmaksiz@gmail.com> Co-authored-by: deepsghimire <70006817+deepsghimire@users.noreply.github.com> Co-authored-by: Jae-Heon Ji <atx6419@gmail.com> Co-authored-by: AlixBernard <56587201+AlixBernard@users.noreply.github.com>
resolve #1395
Tasks
KeyboardInput
)