feat(plugins): rebind keys at runtime #3422
Merged
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 allows plugins to rebind a user's keys.
Context
This PR builds on #3383 and is intended to solve the colliding keybindings issue that has plagued many Zellij users, forcing them to rebind specific keys that collided for them in the Zellij configuration (or in the relevant apps).
This PR lays down the foundation for the next PR, which will include different sets of keys that could be easily switched to at runtime in some sort of wizard or configuration window. These sets of keys will have "something for everyone", giving users the ability to quickly choose the right set of non-colliding keys that work for them (but of course also by default providing the current "Zellij Classic Keybindings" experience so that users who are happy with the status-quo - which is most users - will not feel any change).
Technical Changes
rebind_keys
plugin API command was added behind a newRebindKeys
permission that the user has to grant plugins so that they can run this command. The command accepts a string that follows the same rules as the keybindings configuration file. Rust example: