-
-
Notifications
You must be signed in to change notification settings - Fork 651
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(plugins): Plugin workers and strider #2449
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
renovate bot
referenced
this pull request
in scottames/dots
Jun 19, 2023
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [aquaproj/aqua-registry](https://github.com/aquaproj/aqua-registry) | minor | `v4.19.0` -> `v4.20.0` | | [zellij-org/zellij](https://github.com/zellij-org/zellij) | minor | `v0.36.0` -> `v0.37.0` | --- ### Release Notes <details> <summary>aquaproj/aqua-registry</summary> ### [`v4.20.0`](https://github.com/aquaproj/aqua-registry/releases/tag/v4.20.0) [Compare Source](https://github.com/aquaproj/aqua-registry/compare/v4.19.0...v4.20.0) [Issues](https://github.com/aquaproj/aqua-registry/issues?q=is%3Aissue+milestone%3Av4.20.0) | [Pull Requests](https://github.com/aquaproj/aqua-registry/pulls?q=is%3Apr+milestone%3Av4.20.0) | aquaproj/aqua-registry@v4.19.0...v4.20.0 #### 🎉 New Packages [#​13132](https://github.com/aquaproj/aqua-registry/issues/13132) [segmentio/golines](https://github.com/segmentio/golines): A golang formatter that fixes long lines [@​iwata](https://github.com/iwata) #### Fixes [#​13143](https://github.com/aquaproj/aqua-registry/issues/13143) [terraform-linters/tflint](https://github.com/terraform-linters/tflint): Support old versions </details> <details> <summary>zellij-org/zellij</summary> ### [`v0.37.0`](https://github.com/zellij-org/zellij/releases/tag/v0.37.0) [Compare Source](https://github.com/zellij-org/zellij/compare/v0.36.0...v0.37.0) In this release we've done a lot of work on our WebAssembly / WASI plugin system and are very excited to invite adventurous Rust developers to come pioneer our plugin system with us. To read more, please see the official [Plugin Documentation](https://zellij.dev/documentation/plugins.html). Please also drop by our Discord or Matrix and show us the plugins you're working on! #### Other Highlights - Some basic themes are now included with the release, give it a try by starting Zellij with `zellij options --theme catppuccin-mocha` - Layouts now support environment variables and tilde expansions - We can now provide a `--cwd` option when starting Zellij #### All changes - fix(plugin): respect hide session option on compact-bar by [@​pedromfedricci](https://github.com/pedromfedricci) in [https://github.com/zellij-org/zellij/pull/2368](https://github.com/zellij-org/zellij/pull/2368) - feat: Add layout configuration to exclude panes from tab sync by [@​on3iro](https://github.com/on3iro) in [https://github.com/zellij-org/zellij/pull/2314](https://github.com/zellij-org/zellij/pull/2314) - Fix 2205 - Support cwd by [@​Kangaxx-0](https://github.com/Kangaxx-0) in [https://github.com/zellij-org/zellij/pull/2290](https://github.com/zellij-org/zellij/pull/2290) - feat(plugins): reload plugin at runtime by [@​imsnif](https://github.com/imsnif) in [https://github.com/zellij-org/zellij/pull/2372](https://github.com/zellij-org/zellij/pull/2372) - Update architecture doc by [@​Kangaxx-0](https://github.com/Kangaxx-0) in [https://github.com/zellij-org/zellij/pull/2371](https://github.com/zellij-org/zellij/pull/2371) - feat(themes): add nightfox themes by [@​EdenEast](https://github.com/EdenEast) in [https://github.com/zellij-org/zellij/pull/2384](https://github.com/zellij-org/zellij/pull/2384) - feat: provide default themes by [@​jaeheonji](https://github.com/jaeheonji) in [https://github.com/zellij-org/zellij/pull/2307](https://github.com/zellij-org/zellij/pull/2307) - feat(plugins): update and render plugins asynchronously by [@​imsnif](https://github.com/imsnif) in [https://github.com/zellij-org/zellij/pull/2410](https://github.com/zellij-org/zellij/pull/2410) - feat(layout): Support environment variables in cwd ([#​2288](https://github.com/zellij-org/zellij/issues/2288)) by [@​shahamran](https://github.com/shahamran) in [https://github.com/zellij-org/zellij/pull/2291](https://github.com/zellij-org/zellij/pull/2291) - Add file path context to all IO errors in ConfigError by [@​Imberflur](https://github.com/Imberflur) in [https://github.com/zellij-org/zellij/pull/2412](https://github.com/zellij-org/zellij/pull/2412) - fix(e2e): fix flaky locked mode test by [@​imsnif](https://github.com/imsnif) in [https://github.com/zellij-org/zellij/pull/2413](https://github.com/zellij-org/zellij/pull/2413) - Fix error loading non-existant themes directory and use default themes as the base when merging by [@​Imberflur](https://github.com/Imberflur) in [https://github.com/zellij-org/zellij/pull/2411](https://github.com/zellij-org/zellij/pull/2411) - improve build/ci times by [@​tlinford](https://github.com/tlinford) in [https://github.com/zellij-org/zellij/pull/2396](https://github.com/zellij-org/zellij/pull/2396) - Do not unwrap() the sticky bit setting! by [@​valpackett](https://github.com/valpackett) in [https://github.com/zellij-org/zellij/pull/2424](https://github.com/zellij-org/zellij/pull/2424) - Use rust 1.67 by [@​har7an](https://github.com/har7an) in [https://github.com/zellij-org/zellij/pull/2375](https://github.com/zellij-org/zellij/pull/2375) - Fix issue 2421 - Update config file output by [@​Kangaxx-0](https://github.com/Kangaxx-0) in [https://github.com/zellij-org/zellij/pull/2443](https://github.com/zellij-org/zellij/pull/2443) - feat(plugins): Plugin workers and strider by [@​imsnif](https://github.com/imsnif) in [https://github.com/zellij-org/zellij/pull/2449](https://github.com/zellij-org/zellij/pull/2449) - fix: cwd of newtab action by [@​onichandame](https://github.com/onichandame) in [https://github.com/zellij-org/zellij/pull/2455](https://github.com/zellij-org/zellij/pull/2455) - feat(wasm-plugin-system): major overhaul and some goodies by [@​imsnif](https://github.com/imsnif) in [https://github.com/zellij-org/zellij/pull/2510](https://github.com/zellij-org/zellij/pull/2510) - feat(plugins): extensive plugin api by [@​imsnif](https://github.com/imsnif) in [https://github.com/zellij-org/zellij/pull/2516](https://github.com/zellij-org/zellij/pull/2516) - fix: runtime panic because of local cache by [@​jaeheonji](https://github.com/jaeheonji) in [https://github.com/zellij-org/zellij/pull/2522](https://github.com/zellij-org/zellij/pull/2522) - fix(output): do not hide cursor on a render that does not include visual assets by [@​imsnif](https://github.com/imsnif) in [https://github.com/zellij-org/zellij/pull/2528](https://github.com/zellij-org/zellij/pull/2528) - fix(screen): focus tab as well as pane when launching existing plugin by [@​imsnif](https://github.com/imsnif) in [https://github.com/zellij-org/zellij/pull/2530](https://github.com/zellij-org/zellij/pull/2530) - fix(strider): clear search term on ESC by [@​imsnif](https://github.com/imsnif) in [https://github.com/zellij-org/zellij/pull/2531](https://github.com/zellij-org/zellij/pull/2531) - fix(plugins): only listen to hd if a plugin is subscribed to hd events by [@​imsnif](https://github.com/imsnif) in [https://github.com/zellij-org/zellij/pull/2529](https://github.com/zellij-org/zellij/pull/2529) - fix(logs): suppress debug logs when not debugging by [@​imsnif](https://github.com/imsnif) in [https://github.com/zellij-org/zellij/pull/2532](https://github.com/zellij-org/zellij/pull/2532) - fix(plugins): allow loading relative urls by [@​imsnif](https://github.com/imsnif) in [https://github.com/zellij-org/zellij/pull/2539](https://github.com/zellij-org/zellij/pull/2539) - feat(plugins): plugin pane state events by [@​imsnif](https://github.com/imsnif) in [https://github.com/zellij-org/zellij/pull/2545](https://github.com/zellij-org/zellij/pull/2545) - performance(plugins): use a debounced fs watcher by [@​imsnif](https://github.com/imsnif) in [https://github.com/zellij-org/zellij/pull/2546](https://github.com/zellij-org/zellij/pull/2546) - feat(plugins): more plugin api methods by [@​imsnif](https://github.com/imsnif) in [https://github.com/zellij-org/zellij/pull/2550](https://github.com/zellij-org/zellij/pull/2550) - refactor(plugins): improve api by [@​imsnif](https://github.com/imsnif) in [https://github.com/zellij-org/zellij/pull/2552](https://github.com/zellij-org/zellij/pull/2552) - feat(plugins): strider improvements by [@​imsnif](https://github.com/imsnif) in [https://github.com/zellij-org/zellij/pull/2551](https://github.com/zellij-org/zellij/pull/2551) - docs(plugins): document the zellij-tile events and commands api by [@​imsnif](https://github.com/imsnif) in [https://github.com/zellij-org/zellij/pull/2554](https://github.com/zellij-org/zellij/pull/2554) - docs(plugins): better zellij-tile-docs by [@​imsnif](https://github.com/imsnif) in [https://github.com/zellij-org/zellij/pull/2560](https://github.com/zellij-org/zellij/pull/2560) #### New Contributors - [@​on3iro](https://github.com/on3iro) made their first contribution in [https://github.com/zellij-org/zellij/pull/2314](https://github.com/zellij-org/zellij/pull/2314) - [@​Kangaxx-0](https://github.com/Kangaxx-0) made their first contribution in [https://github.com/zellij-org/zellij/pull/2290](https://github.com/zellij-org/zellij/pull/2290) - [@​EdenEast](https://github.com/EdenEast) made their first contribution in [https://github.com/zellij-org/zellij/pull/2384](https://github.com/zellij-org/zellij/pull/2384) - [@​shahamran](https://github.com/shahamran) made their first contribution in [https://github.com/zellij-org/zellij/pull/2291](https://github.com/zellij-org/zellij/pull/2291) - [@​Imberflur](https://github.com/Imberflur) made their first contribution in [https://github.com/zellij-org/zellij/pull/2412](https://github.com/zellij-org/zellij/pull/2412) - [@​valpackett](https://github.com/valpackett) made their first contribution in [https://github.com/zellij-org/zellij/pull/2424](https://github.com/zellij-org/zellij/pull/2424) - [@​onichandame](https://github.com/onichandame) made their first contribution in [https://github.com/zellij-org/zellij/pull/2455](https://github.com/zellij-org/zellij/pull/2455) **Full Changelog**: zellij-org/zellij@v0.36.0...v0.37.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/scottames/dots). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMjYuMCIsInVwZGF0ZWRJblZlciI6IjM1LjEyNi4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR implements plugin workers, allowing plugins to perform background tasks. This PR also includes a draft of a worker implementation for the Strider plugin (searching through files in the background) which will be fleshed out in an upcoming change before the next release.
Worker API
For Rust plugins, in
zellij-tile
we now provide aZellijWorker
trait. While this API might change a little bit before this feature is released in the next version, this is the general idea:The
on_message
function will be triggered whenever a message is sent to this worker from the main plugin. Both themessage
andpayload
arguments to the function are arbitraryString
types, there to allow plugin authors to define their own serializable message types and payloads.The trait itself requires whatever implements it to also be serializable/deserializable - this is to allow the worker to keep an internal state between runs. The state will be saved on the HD in a temporary folder and used to construct the worker on every run. It is thus advisable to be cognizant of the amount of data placed on the worker state for reasons of performance.
Registering Workers
For Rust plugins, registering workers can be done with the
register_worker
macro. This macro accepts a struct implementing the aboveZellijWorker
trait, as well as a namespaced name for the worker with_worker
appended to the end. The latter is very important because this is how Zellij recognizes this exported function as a background worker. This namespace is also used to send messages to the worker, see below.Sending messages to workers and back to the main plugin
For Rust plugins, messages can be sent to workers using the
post_message_to
method:The
worker_name
argument is used to refer to the namespaced worker we included above. To send a message to the worker we defined above, we would use thecool
argument (cool_worker
minus the_worker
part we use to indicate this is a worker when registering it).Both
message
andpayload
are arbitrary Strings we can use to serialize/deserialize our own private messages. These will be sent as is to theon_message
message of the worker.When a worker wishes to send messages back to the plugin, it can do so using the
post_message_to_plugin
method:This method is similar to
post_message_to
except it does not accept aworker_name
and instead will send the message directly to the plugin. The message will arrive at the plugin'supdate
method with anEvent::CustomMessage(message, payload)
update event. If you wish to use this functionality, it's important tha the pluginsubscribe
to these events using thesubscribe
method, just as it does to all other events.