zellij/zellij-utils/Cargo.toml

78 lines
2.2 KiB
TOML
Raw Normal View History

[package]
name = "zellij-utils"
version = "0.40.0"
authors = ["Kunal Mohan <kunalmohan99@gmail.com>"]
edition = "2021"
description = "A utility library for Zellij client and server"
license = "MIT"
include = ["src/**/*", "assets/"]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
anyhow = { version = "1.0.70", features = ["backtrace"] }
backtrace = "0.3.55"
fix(status-bar): reflect actual current keybindings (#1242) * status-bar: first_line: Use more generic var names Rename all `CtrlKey...` to the equivalent `Key...` to make the name less specific. It implies that all key bindings use Ctrl as modifier key, which needn't necessarily be the case. * status-bar: first_line: Refactor `ctrl_keys` Removes lots of code duplication by `Unselect`ing all keys by default and only `Select`ing what is actually required for a given Input mode. * utils: conditionally compile unix-specific code In `zellij_utils`, the following modules each contained code that was previously targeting only the unix platform: - consts: Works with unix-specific filesystem attributes to set e.g. special file permissions. Also relies on having a UID. - shared: Uses unix-specific filesystem attributes to set file permissions These will never work when targeting wasm. Hence the concerning code passages have been moved into private submodules that are only compiled and re-exported when the target isn't `#[cfg(unix)]`. The re-export makes sure that crates from the outside that use `zellij_utils` work as before, since from their point of view nothing has changed. * utils: Share more modules with wasm that work on both wasm and unix natively. This requires factoring out bits of code in the `setup` and `input` modules into a private submodule that is re-exported when the compilation target is *not* "wasm". The following modules are now available to the wasm target: - cli - consts - data - envs - input (partial) - actions - command - configs - keybinds - layout - options - plugins - theme - pane_size - position - setup (partial) - shared The remaining modules unavailable to wasm have dependencies on crates that cannot compile against wasm, such as `async_std` or `termwiz`. * utils/input/keybinds_test: Fix import of the `CharOrArrow` struct which is now part of the `data` submodule. * utils/layout: Use global serde crate Previously the code was decorated with `#[serde(crate = "self::serde")]` statements which cannot be shared with wasm. Use the regular serde without specifying which serde is meant. * utils/data: Implement `fmt::Display` for `Key` so the Keybindings can be displayed via `format!` and friends in e.g. the status bar. * tile/prelude: Re-export `actions` submodule of `zellij_utils` so the plugins can access the `ModeKeybinds` struct with all of its members. * utils/data: Fix `ModeInfo::keybinds` type and transfer a vector of `(Key, Vec<Action>)` to the plugins so they can parse it themselves, instead of passing strings around. Due to the requirement of the `Eq` trait derive on `ModeInfo` this requires deriving `Eq` on all the types included by `Key` and `Action` as well. Note that `Action` includes the `layout::SplitSize` structure as a member. We cannot derive `Eq` here since `SplitSize::Percent(f64)` cannot satisfy `Eq` because `f64` doesn't implement this. So we add a new type to hack around this limitation by storing the percentage as `u64` internally, scaled by a factor of 10 000 and transforming it to f64 when needed. Refer to the documentation of `layout::Percent` for further information. * utils/data: Make `Key` sortable so the keybindings can be sorted after their keys. * WIP: utils/input: Make keybinds accessible when generating `ModeInfo` structs. * utils/data: Handle unprintable chars in `Key` when displaying via the `fmt::Display` trait. Handles `\t` and `\n` and represents them as UTF-8 arrow glyphs. * HACK: utils/layout: Use u64 for SplitSize::Percent The previous workaround using a custom `Percent` type fails at the absolute latest when confronted with user layouts, since these do not know about the scaling factor and will thus break. It still breaks currently because `Percent` now expects a u64 (i.e. `50`, not `50.0`) but this is more easily explained and understood. * status-bar: Add helper macros that retrieve the key bound to execute a sequence of `Action` given a specific Keybinding, and a shorthand that expands to `Action::SwitchToMode(InputMode::Normal)` used for pattern matching with the `matches!` macro. * status-bar/first_line: Get shared superkey if any from the `ModeKeybindings` in the current `ModeInfo` struct. If the configured keybindings for switching the modes don't have a superkey in common, do not print a common prefix. * status-bar/first_line: Add key to KeyShortcut which is the key that must be pressed in the current mode to execute the given shortcut (i.e. switch to the given mode). * status-bar/first_line: Dynamically set mode binds Read the keybindings for switching the modes to print in the first line from the actually configured keybindings for the current mode. Add some logic to the code that: - Prints only the "single letter" of the keybinding if all mode-switch shortcuts *share the same modifier key*, - Or prints the whole keybinding (with modified) into each segment if there is no common modifier key. * status-bar/second_line: Display configured binds Instead of showing some hard-coded default values. For each mode, reads the keybindings from the configured keybindings based on some sequence of action. For example, the keybinding for `New` in the `Pane` menu is now determined by looking into the configured keybindings and finding what key is bound to the `Action::NewPane(None)` action. If no keybinding is found for a given sequence of actions, it will not show up in the segments either. * WIP: utils/keybinds: Make key order deterministic by using a BTreeMap which by default has all of its elements in sorted order internally. As of currently this doesn't seem to impress the order in which the keybindings are sent to the plugins, though. * utils/data: Reorder `Key` variants to have the Arrow keys sorted as "left", "down", "up", "right" in accordance with the display in e.g. the status bar. * status-bar/first_line: Fix inverted `matches!` when trying to obtain the keybindings to switch between the input modes. Its initial purpose was to filter out all ' ', '\n' and 'Esc' keybindings for switching modes (As these are the default and not of interest for the status bar display), but it was not negated and thus only filtered out the aforementioned keys. * status-bar: Don't get all modeswitch keybinds but only those that are displayed in the status bar. This currently excludes the keybindings for Entering the Pane/TabRename mode, Tmux mode and Prompt mode. We must explicitly exclude these since they aren't bound to the same Modifiers as the regular keys. Thus, if we e.g. enter Pane or Tab mode, it will pick up the `SwitchToMode(InputMode::TabRename)` action as being bound to `c`, hence the `superkey` function cannot find a common modifier, etc. But we don't display the `TabRename` input mode in the first line anyway, so we must ignore it. Therefore, we additionally add the keybinding to call the `Action::Quit` action to terminate zellij to the vector we return. Also remove the `(Key, InputMode)` tuple and convert the return type to a plain `Vec<Key>`, since the never worked with the `InputMode` in the first place. * status-bar/first_line: Fix output for tight screen Implement the "Squeezed" display variant where we do not display which of the modes each keybinding switches to, but only the keybinding itself. * status-bar/second_line: Remove trailing " / " * status-bar/second-line: Refactor key hints Instead of determining the appropriate key hints for every case separately (i.e. enough space to show all, show shortened, shot best-effort), create a central function that returns for the current `InputMode` a Vector with tuples of: - A String to show in full-length mode - A String to show in shortened/best-effort mode - The vector of keys that goes with this key hint This allows all functions that need the hints to iterate over the vector and pick whatever hint suits them along with the Keys to display. * status-bar/second-line: Implement shortened hints * utils/data: Fix display for `Key::Alt` which previously printed only the internal char but not the modifier. * status-bar/first-line: Add hidden Tmux tile that is only shown when in Tmux mode. Note that with the default config this "breaks" the shared superkey display, because it correctly identifies that one can switch to Scroll mode via `[`. * status-bar: Print superkey as part of first line Instead of first obtaining the superkey and then the rest of the first line to display. This way we don't need to split up individual data structures and carry a boolean flag around multiple functions. It also has the advantage that when the available space is really tight, the first line is entirely empty and doesn't display a stale superkey without any other keybinding hints. * status-bar: Rework keybinding theming Previously there were individual functions to create the tiles in the first line depending on whether: - A tile was selected, unselected, unselected alternate (for theming) or disabled, and - Tiles had full length or were displayed shortened In the first case, the functions that previously handled the theming only differed in what theme they apply to the otherwise identical content. Since the theming information was drawn from a flat structure that simulated hierarchy by giving hierarchical names to its theme "members", this couldn't be handled in code. In the second case, some of the theming information needed for the full-length shortcuts was replicated for the shortened shortcuts. Instead, rewrite the general Theming structure into a hierarchical one: Adds a new structure `SegmentStyle` that contains the style for a single segment depending on whether it is selected, unselected (alternate) or disabled. Refactor the `first-line` module to use a single function to generate either full-length or shortened tiles, that does functionally the same but switches themes based on the selection status of the tile it themes. * status-bar/second-line: Return new `LinePart`s from the `add_shortcut` function instead of modifying the input parameters. * status-bar/second-line: Implement adaptive behavior and make the keyhints adapt when the screen runs out of space. The hints first become shortened and when necessary partially disappear to display a "..." hint instead. * status-bar/second-line: Show float pane binding based on the keycombination that's really bound to switching into the "Pane" input mode. * status-bar/get_keys_and_hints: Add more modes for the keybindings in Tmux and the Pane/TabRename input modes. * status-bar/second-line: Unify mode handling and don't do extra shortcut handling for Tmux and the Pane/TabRename modes any longer. Instead, assemble this like for all other modes from the keybinding and hints vector. * status-bar/first-line: Refactor common modifier to a separate function so it can be used by other modules, too. * status-bar/second-line: Display modifier in hints when available. For example, for bindings to move between panes when in PaneRename mode, now displays "Alt + <hjkl>" instead of "<Alt+hAlt+j...>". * utils/ipc: Remove `Copy` from `ClientAttributes` as preparation to add `Keybinds` as a member to the `ClientAttributes` struct. `Keybinds` contains a `HashMap`, for which the `std` doesn't derive `Copy` but only `Clone`. * utils/input/keybinds: Fix import path Import `Key` and `InputMode` directly from `data`. * utils/ipc: Add `Keybinds` to `ClientAttributes` so we can keep track, pre-client, of the configured key bindings and pass them around further in the code. * server/lib: Store `ClientAttributes` over `Style` in `SessionMetadata` to be able to pass Keybindings to other places in the code, too. Since `Style` is also a member of `ClientAttributes`, this works with minimal modifications. * utils/input: Change `get_mode_info` parameters to take a `ClientAttributes` struct instead of merely the `Style` information. This way we can get the `Style` from the `ClientAttributes`, and also have access to the `keybinds` member that stores the keybinding configuration. * utils/ipc: Use `rmp` for serde of IPC messages instead of `bincode`, which seemingly has issues (de)serializing `HashMap`s and `BTreeMap`s since `deserialize_any` isn't implemented for these types. * fix(nix): remove `assets` from `gitignore` Remove `assets` from the gitignore of the plugins themselves, since every single plugin now depends on the asset being accessible in its source directory. * tests/e2e: Fix status bar in snapshots to reflect the current state of the dynamic keybindings. * status_bar/first_line: Don't show unbound modes If switching to a specific mode isn't bound to a key, don't show a tile/ribbon for it either. E.g. in `LOCKED` mode, this will only show the tile for the `LOCK` mode and ignore all others. * utils/data: Make 'Key::Char(' ') visible as "␣" so the user doesn't only see a blank char but has an idea that the space key is meant. * status_bar/second_line: Remove extra hints generated by the `hint_producing_function` that would tell the user in every input mode how to get back to normal mode. Instead, add this as keybinding to the general keybindings vector. This removes some lines of duplicated code but most of all now applies the correct theming to this keybinding. Additionally, previously the `RenameTab` and `RenamePane` input modes would show the keybinding to get back to normal mode twice and both of them were hardcoded. This binding is now dynamically displayed based on what the user configured as keybinding. * utils/data: format unprintable chars as words instead of unicode symbols. E.g. write "SPACE" instead of "␣". * utils/data: Fix display for `Ctrl`/`Alt` keys previously their "inner" chars would be displayed with a regular `fmt::Display` for the `&str` type they are. This doesn't match what we want to output. So instead we wrap the inner chars into `Key::Char` before printing them. * utils/data: Change order of `Key`s so that e.g. for the default bindings in `Scroll` mode we prefer to show `PgDn|PgUp` rather than the arrow keys these actions are bound to as well. * status_bar/first_line: Don't ignore default char bindings by default. These include the '\n', ' ' and 'Esc' bindings that by default lead back to `Normal` input mode from all the modes. Previously we would unconditionally ignore them and consequently not print the tile when in fact the user may have bound this particular action to either of the keys. Instead now we first ignore the keys mentioned and if we turn up with an undefined binding, we consider these default keys as well so we get *something* to display in any case. * status_bar/first_line: Add space when no modifier is shared between the keybindings. This way there isn't a stray arrow at the very border of the screen, but it is spaced just like the tab-bar and the second line is. * status_bar/second_line: Print separators between consecutive keys bound to specific actions. This allows the user to visually differ between different keys. * status_bar/main: Don't return modifier if empty * status_bar/first_line: Don't suppress Disabled tiles Disabled is a special state that the keybindings only assume in locked mode. It turns the respective tiles grey to signal to the user that these are currently inactive. With respect to users new to zellij, it may appear confusing that when entering locked mode all the other tiles disappear (which they do because they have no valid keybinding assigned). Since we have no keybinding for them, we still display them but without any associated key (i.e. as `<>` for the binding). * status_bar/first_line: Don't print leading triangle on first tile, when there is no shared superkey. * status_bar/second_line: Add exceptions for inter-key separators. Keeps groups of `hjkl` and arrow keys intact (doesn't add separators between the keys) but separates all others. * status_bar/main: Refactor `action_key` to a regular function instead of a macro. It turns out that while being able to match patterns is a nice feature, we completely rely on the keys that drop out of the pattern found this way to be sorted in a sensible way. Since we sort the key vectors in the necessary places after the keys, and not the actions, this of course doesn't apply when the user changes "hjkl" to "zjkl", which would then become "jklz". Now this is of course wrong, because "z" still means "Move focus left", and not "Move focus right". With the function we now assume a slice of Actions that we match the action vectors from the keybindings against to obtain the necessary keys. In order to avoid ugly `into_iter().chain(...)` constructs we had before we also add a new function `action_key_group` that takes a sliced array of slices to get a whole group of keys to display. * status_bar/first_line: Fix "triangle" for short tiles since we do not want to display a colored triangle at the start of the line when in sortened mode (just as we do for the long tiles now). Also fix a bug that would make the triangle reappear when the first keybinding to be displayed didn't have a key assigned and thus wouldn't be displayed at all. * status_bar/second_line: Fix typo that would cause single `Ctrl+?` bindings for actions in the second line to be displayed as `Ctrl + <Ctrl+?>`. * status_bar/second_line: Fix char count when displaying groups of keys in a binding with or without a separator. * status_bar: Use new `action_key` fn instead of the previous macro to obtain the keys to display in the status bar in a fixed given order. Also fix the display "bug" where tab switching would be shows as "ArrowLeft/ArrowDown" instead of "ArrowLeft/ArrowRight". * status_bar/second_line: Fix floating pane hint that tells the user what keybinding to press to suppress the currently active floating panes. This was previously hardcoded. * utils: Send full keybinds in `ModeInfo` instead of the currently active `ModeKeybinds` for the active input mode. Some of the UI issues cannot be solved without having access to *all* keybindings. * utils: Refactor keybinds vec into type to make clippy happy. * status_bar/first_line: Remove needless borrows * status_bar: Factor out printing keybindings into a separate function that takes a vector of keys and a palette and returns the painted key groups, with correct inter-character separation where necessary and factoring out common modifier keys. * status_bar/tip: Use real keybindings instead of printing hard-coded messages to the user. * status_bar: abort early when keyvector is empty in `style_key_with_modifier`. * status_bar/tip: Fix all keybindings and make them dynamic given the keybindings really active in the current session. Also display **UNBOUND** is some keybinding is missing from the users config. * status_bar: Go clippy! * status_bar: Add documentation and add a new exception group to `action_key_group` that ensures that `hl` and `jk` won't be separated with `|`. * status_bar/tip: Detect when key aren't bound correctly and show "UNBOUND" as keyhint instead, then. Previously we would only check the length of the whole keybinding segment, but that isn't a good indicator since most of the bindings require changing modes first, which already adds a variable number of letters to the segment. However, there is not point in showing how to get to a certain mode, if the binding needed in that mode doesn't exist. * status_bar/first_line: Show bindings when locked if the user has any configured. * status_bar: Don't consider 'hl', 'jk' groups that don't need a separator in between the letters. * status_bar/second_line: Add "search" keybindings for the new Search functionality. * tests/e2e: Fix snapshots with what the status bar now really displays. * status_bar: Remove old comments * status_bar/first_line: Rename 'long_tile' to the more descriptive name 'mode_shortcut', which better describes what this function does. * status_bar/first_line: Fix spacing in simple UI where the modifier would be shows as `Ctrl +`, without a trailing space. This isn't an issue in regular mode, where we have the spacing from the arrow gaps (`>>`) that "simulates" this effect. * status_bar: Refactor and rename `ctrl_keys` so it doesn't rely on some "external" index for operation any more. * status_bar: Add unit tests to shared functions and fix a bug in the process where certain `Ctrl` keybindings would be displayed wrong. * status_bar/first_line: Rename functions responsible for printing the long and short shortcut keyhint tiles. Also add some documentation that explains their purpose and the arguments they accept. * status_bar/tips: Remove stray "/" in quicknav tip * utils/layout: Remove old comments introduced when rewriting `SplitSize::Percent` to not hold an `f64` type. * status_bar: Add "regex" as test dependency We use regular expressions to strip all ANSI escape sequences in the strings that are produced by the plugin functions during testing. We do not test for the style information, but merely for the raw text. * status_bar: Implement unit tests * Makefile: Always run tests on host triple This allows the unit tests for all plugins to be run on the host as well (because their default compilation target is wasm32-wasi). * tests/e2e: Add test for custom bindings in the status bar. Makes sure that the modified bindings from a custom configuration file are read and applied to the UI. Co-authored-by: a-kenji <aks.kenji@protonmail.com>
2022-07-27 17:48:35 +03:00
rmp-serde = "1.1.0"
clap = { version = "3.2.2", features = ["derive", "env"] }
clap_complete = "3.2.1"
colored = "2.0.0"
colorsys = "0.6.5"
crossbeam = "0.8.1"
directories = "5.0"
lazy_static = "1.4.0"
libc = "0.2"
nix = "0.23.1"
once_cell = "1.8.0"
percent-encoding = "2.1.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
strip-ansi-escapes = "0.1.0"
strum = "0.20.0"
refactor(crates): move shared contents from zellij tile to zellij utils (#1541) * zellij-tile: Move `data` to zellij-utils The rationale behind this is that all components of zellij access the data structures defined in this module, as they define some of the most basic types in the application. However, so far zellij-tile is treated like a separate crate from the rest of the program in that it is the only one that doesn't have access to `zellij-utils`, which contains a lot of other data structures used throughout zellij. This poses issues as discussed in https://github.com/zellij-org/zellij/pull/1242 and is one of the reasons why the keybindings in the status bar default plugin can't be updated dynamically. It is also the main reason for why the keybindings are currently passed to the plugin as strings: The plugins only have access to `zellij-tile`, but since this is a dependency of `zellij-utils`, it can't import `zellij-utils` to access the keybindings. Other weird side-effect are that in some places `server` and `client` have to access the `zellij-tile` contents "through" `zellij-utils`, as in `use zellij_utils::zellij_tile::prelude::*`. By moving these central data structures to one common shared crate (`zellij-utils`), `zellij-tile` will be enabled to import `zellij-utils` like `screen` and `client` already do. This will, next to other things, allow dropping a lot of `std::fmt::Fmt` impls needed to convert core data structures into strings and as a consequence, a lot of string parsing in the first place. * utils: Integrate new `data` module, bump rust ver Integrates the `data` module that was previously part of `zellij-tile` to allow sharing the contained data structures between all components of zellij. This allows `zellij-tile` to use `utils` as a dependency. However, since `tile` is build against the wasm target, it cannot include all of `zellij-utils`, since a lot of dependencies there cannot compile with `wasm` as target (Examples include: termwiz, log4rs, async-std). Thus we make all the dependencies that cannot compile against `wasm` optional and introduce a new feature `full` that will compile the crate with all dependencies. Along with this, modify `lib.rs` to include most of the data structures only when compiling against the `full` feature. This makes the compiles of `zellij-tile` lighter, as it doesn't include all of `utils`. As a side effect, due to the dependency notation for the optional dependencies (See https://doc.rust-lang.org/cargo/reference/features.html#optional-dependencies), we bump the rust toolchain version to 1.60.0. * tile: Import `data` from zellij-utils Add `zellij-utils` as a dependency to `zellij-tile` and allow us access to the `data` module defined there. Update the re-export in the `prelude` such that from all of the plugins points of view *absolutely nothing changes*. * utils: Fix `data` module dependency Since the `data` module has been migrated from `zellij-tile` to `zellij-utils`, we import it from `zellij-utils` directly now. Also unify the imports for the `data` module members: We import all of the through `data::` now, not through a mixture of `data::` and `prelude::`. * client: Fix `data` module dependency Since the `data` module has been migrated from `zellij-tile` to `zellij-utils`, we import it from `zellij-utils` directly now. Also unify the imports for the `data` module members: We import all of the through `data::` now, not through a mixture of `data::` and `prelude::`. Add the "full" feature flag to the `zellij-utils` dependency so it includes all the components we need. * server: Fix `data` module dependency Since the `data` module has been migrated from `zellij-tile` to `zellij-utils`, we import it from `zellij-utils` directly now. Also unify the imports for the `data` module members: We import all of the through `data::` now, not through a mixture of `data::` and `prelude::`. Add the "full" feature flag to the `zellij-utils` dependency so it includes all the components we need. * tests: Fix `data` module dependency Since the `data` module has been migrated from `zellij-tile` to `zellij-utils`, we import it from `zellij-utils` directly now. * utils: Remove "full" feature in favor of conditional compilation using `target_family`. Replace the rust 1.60 method of specifying optional dependencies based on features and optionally include the dependencies only when not building for wasm instead. (I.e. `cfg(not(target_family = "wasm"))`) * cargo: Update module dependencies since `client`, `server` and `tile` now all depend on `utils` only.
2022-07-06 17:06:56 +03:00
strum_macros = "0.20.1"
thiserror = "1.0.30"
url = { version = "2.2.2", features = ["serde"] }
vte = { version = "0.11.0", default-features = false }
log = "0.4.17"
unicode-width = "0.1.8"
miette = { version = "5.7.0", features = ["fancy"] }
regex = "1.5.5"
tempfile = "3.2.0"
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 08:44:00 +03:00
kdl = { version = "4.5.0", features = ["span"] }
shellexpand = "3.0.0"
uuid = { version = "1.4.1", features = ["serde", "v4"] }
async-channel = "1.8.0"
include_dir = "0.7.3"
prost = "0.11.9"
feat(sessions): session resurrection (#2801) * 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 a4e93703fbfdb6865131daa1c8b90fc5c36ab25e. * 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 01eff3bc5d1627a4e60bc6dac8ebe5500bc5b56e. * 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 27763d26ab83dd9f81c69c75601cbf6075f13790. * 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>
2023-10-12 17:05:45 +03:00
common-path = "1.0.0"
refactor(crates): move shared contents from zellij tile to zellij utils (#1541) * zellij-tile: Move `data` to zellij-utils The rationale behind this is that all components of zellij access the data structures defined in this module, as they define some of the most basic types in the application. However, so far zellij-tile is treated like a separate crate from the rest of the program in that it is the only one that doesn't have access to `zellij-utils`, which contains a lot of other data structures used throughout zellij. This poses issues as discussed in https://github.com/zellij-org/zellij/pull/1242 and is one of the reasons why the keybindings in the status bar default plugin can't be updated dynamically. It is also the main reason for why the keybindings are currently passed to the plugin as strings: The plugins only have access to `zellij-tile`, but since this is a dependency of `zellij-utils`, it can't import `zellij-utils` to access the keybindings. Other weird side-effect are that in some places `server` and `client` have to access the `zellij-tile` contents "through" `zellij-utils`, as in `use zellij_utils::zellij_tile::prelude::*`. By moving these central data structures to one common shared crate (`zellij-utils`), `zellij-tile` will be enabled to import `zellij-utils` like `screen` and `client` already do. This will, next to other things, allow dropping a lot of `std::fmt::Fmt` impls needed to convert core data structures into strings and as a consequence, a lot of string parsing in the first place. * utils: Integrate new `data` module, bump rust ver Integrates the `data` module that was previously part of `zellij-tile` to allow sharing the contained data structures between all components of zellij. This allows `zellij-tile` to use `utils` as a dependency. However, since `tile` is build against the wasm target, it cannot include all of `zellij-utils`, since a lot of dependencies there cannot compile with `wasm` as target (Examples include: termwiz, log4rs, async-std). Thus we make all the dependencies that cannot compile against `wasm` optional and introduce a new feature `full` that will compile the crate with all dependencies. Along with this, modify `lib.rs` to include most of the data structures only when compiling against the `full` feature. This makes the compiles of `zellij-tile` lighter, as it doesn't include all of `utils`. As a side effect, due to the dependency notation for the optional dependencies (See https://doc.rust-lang.org/cargo/reference/features.html#optional-dependencies), we bump the rust toolchain version to 1.60.0. * tile: Import `data` from zellij-utils Add `zellij-utils` as a dependency to `zellij-tile` and allow us access to the `data` module defined there. Update the re-export in the `prelude` such that from all of the plugins points of view *absolutely nothing changes*. * utils: Fix `data` module dependency Since the `data` module has been migrated from `zellij-tile` to `zellij-utils`, we import it from `zellij-utils` directly now. Also unify the imports for the `data` module members: We import all of the through `data::` now, not through a mixture of `data::` and `prelude::`. * client: Fix `data` module dependency Since the `data` module has been migrated from `zellij-tile` to `zellij-utils`, we import it from `zellij-utils` directly now. Also unify the imports for the `data` module members: We import all of the through `data::` now, not through a mixture of `data::` and `prelude::`. Add the "full" feature flag to the `zellij-utils` dependency so it includes all the components we need. * server: Fix `data` module dependency Since the `data` module has been migrated from `zellij-tile` to `zellij-utils`, we import it from `zellij-utils` directly now. Also unify the imports for the `data` module members: We import all of the through `data::` now, not through a mixture of `data::` and `prelude::`. Add the "full" feature flag to the `zellij-utils` dependency so it includes all the components we need. * tests: Fix `data` module dependency Since the `data` module has been migrated from `zellij-tile` to `zellij-utils`, we import it from `zellij-utils` directly now. * utils: Remove "full" feature in favor of conditional compilation using `target_family`. Replace the rust 1.60 method of specifying optional dependencies based on features and optionally include the dependencies only when not building for wasm instead. (I.e. `cfg(not(target_family = "wasm"))`) * cargo: Update module dependencies since `client`, `server` and `tile` now all depend on `utils` only.
2022-07-06 17:06:56 +03:00
#[cfg(not(target_family = "wasm"))]
[target.'cfg(not(target_family = "wasm"))'.dependencies]
termwiz = "0.20.0"
2022-10-19 10:23:56 +03:00
log4rs = "1.2.0"
refactor(crates): move shared contents from zellij tile to zellij utils (#1541) * zellij-tile: Move `data` to zellij-utils The rationale behind this is that all components of zellij access the data structures defined in this module, as they define some of the most basic types in the application. However, so far zellij-tile is treated like a separate crate from the rest of the program in that it is the only one that doesn't have access to `zellij-utils`, which contains a lot of other data structures used throughout zellij. This poses issues as discussed in https://github.com/zellij-org/zellij/pull/1242 and is one of the reasons why the keybindings in the status bar default plugin can't be updated dynamically. It is also the main reason for why the keybindings are currently passed to the plugin as strings: The plugins only have access to `zellij-tile`, but since this is a dependency of `zellij-utils`, it can't import `zellij-utils` to access the keybindings. Other weird side-effect are that in some places `server` and `client` have to access the `zellij-tile` contents "through" `zellij-utils`, as in `use zellij_utils::zellij_tile::prelude::*`. By moving these central data structures to one common shared crate (`zellij-utils`), `zellij-tile` will be enabled to import `zellij-utils` like `screen` and `client` already do. This will, next to other things, allow dropping a lot of `std::fmt::Fmt` impls needed to convert core data structures into strings and as a consequence, a lot of string parsing in the first place. * utils: Integrate new `data` module, bump rust ver Integrates the `data` module that was previously part of `zellij-tile` to allow sharing the contained data structures between all components of zellij. This allows `zellij-tile` to use `utils` as a dependency. However, since `tile` is build against the wasm target, it cannot include all of `zellij-utils`, since a lot of dependencies there cannot compile with `wasm` as target (Examples include: termwiz, log4rs, async-std). Thus we make all the dependencies that cannot compile against `wasm` optional and introduce a new feature `full` that will compile the crate with all dependencies. Along with this, modify `lib.rs` to include most of the data structures only when compiling against the `full` feature. This makes the compiles of `zellij-tile` lighter, as it doesn't include all of `utils`. As a side effect, due to the dependency notation for the optional dependencies (See https://doc.rust-lang.org/cargo/reference/features.html#optional-dependencies), we bump the rust toolchain version to 1.60.0. * tile: Import `data` from zellij-utils Add `zellij-utils` as a dependency to `zellij-tile` and allow us access to the `data` module defined there. Update the re-export in the `prelude` such that from all of the plugins points of view *absolutely nothing changes*. * utils: Fix `data` module dependency Since the `data` module has been migrated from `zellij-tile` to `zellij-utils`, we import it from `zellij-utils` directly now. Also unify the imports for the `data` module members: We import all of the through `data::` now, not through a mixture of `data::` and `prelude::`. * client: Fix `data` module dependency Since the `data` module has been migrated from `zellij-tile` to `zellij-utils`, we import it from `zellij-utils` directly now. Also unify the imports for the `data` module members: We import all of the through `data::` now, not through a mixture of `data::` and `prelude::`. Add the "full" feature flag to the `zellij-utils` dependency so it includes all the components we need. * server: Fix `data` module dependency Since the `data` module has been migrated from `zellij-tile` to `zellij-utils`, we import it from `zellij-utils` directly now. Also unify the imports for the `data` module members: We import all of the through `data::` now, not through a mixture of `data::` and `prelude::`. Add the "full" feature flag to the `zellij-utils` dependency so it includes all the components we need. * tests: Fix `data` module dependency Since the `data` module has been migrated from `zellij-tile` to `zellij-utils`, we import it from `zellij-utils` directly now. * utils: Remove "full" feature in favor of conditional compilation using `target_family`. Replace the rust 1.60 method of specifying optional dependencies based on features and optionally include the dependencies only when not building for wasm instead. (I.e. `cfg(not(target_family = "wasm"))`) * cargo: Update module dependencies since `client`, `server` and `tile` now all depend on `utils` only.
2022-07-06 17:06:56 +03:00
signal-hook = "0.3"
interprocess = "1.2.1"
async-std = { version = "1.3.0", features = ["unstable", "attributes"] }
notify-debouncer-full = "0.1.0"
feat(sessions): session resurrection (#2801) * 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 a4e93703fbfdb6865131daa1c8b90fc5c36ab25e. * 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 01eff3bc5d1627a4e60bc6dac8ebe5500bc5b56e. * 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 27763d26ab83dd9f81c69c75601cbf6075f13790. * 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>
2023-10-12 17:05:45 +03:00
humantime = "2.1.0"
futures = "0.3.28"
surf = { version = "2.3.2", default-features = false, features = [
"curl-client",
] }
openssl-sys = { version = "0.9.93", features = ["vendored"] }
[dev-dependencies]
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 08:44:00 +03:00
insta = { version = "1.6.0", features = ["backtrace"] }
feat(sessions): session resurrection (#2801) * 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 a4e93703fbfdb6865131daa1c8b90fc5c36ab25e. * 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 01eff3bc5d1627a4e60bc6dac8ebe5500bc5b56e. * 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 27763d26ab83dd9f81c69c75601cbf6075f13790. * 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>
2023-10-12 17:05:45 +03:00
expect-test = "1.4.1"
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 08:44:00 +03:00
[build-dependencies]
prost-build = "0.11.9"
[features]
plugins: rework plugin loading (#1924) * zellij: Move "populate_data_dir" to utils and rewrite it to take a second, optional parameter. This allows controlling whether only a specific asset should be installed. We do this as preparation for being able to recover from a plugin version mismatch error, where we will need to repopulate the data dir for offending plugins. * server/wasm_vm: Recover from PluginVersionMismatch Adds a global plugin cache that stores, per plugin config, the wasmer module associated with it. Make `start_plugin` take the pre-populated module and create only the necessary modifications to the wasm env etc. * utils: Fix formatting * zellij: Delete non-existent module * utils/shared: fix missing "set_permissions" function when not on unix systems. * server/wasm_vm: Don't populate cachedir with serialized versions of the WASM plugins. * utils/input/plugins: load wasm bytes from assets for builtin plugin specifications. This foregoes any need to: - Dump the plugin bytes to disk at all and - subsequently read the plugin bytes from disk * zellij: Disable default asset installation which previously installed only the builtin plugins to disk. This is no longer necessary because now we can load the builtin plugins directly from the application binary. * utils/input/plugins: Update docs * utils/input/plugins: Add 'is_builtin' method to `PluginConfig` that returns true if the plugin configuration refers to a builtin plugin. * wasm_vm: Remove plugin version mismatch handling because a version mismatch in an internal plugin is now unfixable, with the plugins being loaded from the running binary, and we have no control over external plugins in the first place. * cargo: Reintroduce feature flag for `disable_automatic_asset_installation` * utils/consts: Add `ASSET_MAP` which currently contains the compiled WASM plugins. * utils/shared: Fix clippy lint * utils/errors: Add more `ZellijError` variants * zellij: Make loading internal plugins optional by reenabling the `disable_automatic_asset_installation` flag and utilizing it for this purpose. Changes plugin search behavior to throw better errors in case the builtin plugins cannot be found, depending on the state of this feature. * utils/errors: Apply rustfmt * utils/setup: Allow dumping builtin plugins to a specified folder on disk. This is meant to be an "escape hatch" for users that have accidentally deleted the builtin plugins from disk (in cases where the plugins aren't loaded from inside the zellij binary). * utils/input/plugins: Update docs * utils/setup: Add hint to `setup --check` output when zellij was built without the `disable_automatic_asset_installation` flag and will thus not read builtin plugins from the "PLUGIN DIR". * utils/setup: Refine `setup --dump-plugins` to dump to: - The default "DATA DIR" when no option is provided with the argument, or - The provided option, if existent Also print a message to stdout with the destination folder that the plugins are dumped to. * server/wasm_vm: Ignore "NotFound" errors when attempting to delete the non-existent plugin data directories. This silences an error message that otherwise ends up in the logs when quitting zellij. * utils/errors: Extend "BuiltinPluginMissing" msg to hint the user to the `zellij setup --dump-plugins` command to fix their issues for them! * utils/errors: Track caller in calls to `non_fatal` which will hopefully, once closures can be annotated, allow us to display the location of the call to `non_fatal` in log messages. * utils/input/plugins: Fix plugin lookup to prefer internal assets if available. It was previously broken because sorting the paths vector before deduping it would bring the paths into a wrong order, looking up in the plugin folder first. Also print a log message when a plugin is being loaded from the internal assets but exists on disk, too. * Apply rustfmt * make: build-e2e depends on wasm-opt-plugins so it updates the assets when building the binary * server/qwasm_vm: Remove var * utils/consts: Add plugins from target folder and include them in the asset map from there, too. Include plugins from debug or release builds, depending on the build type. * utils/consts: Take release plugins from assets instead of the target/release folder. The latter will break installations from crates.io, because we currently rely on including the plugins we pre-compiled and distribute along with the binary. * server/wasm_vm: Reintroduce .cache folder to speedup subsequent application launches. * cargo: Reorder workspace members to improve behavior with `cargo make` with respect to compilation order. * Makefile: restructure plugin tasks * Makefile: Fix CI errors * Makefile: More CI diagnosis * github: Install wasm-opt in e2e test workflow * Makefile: Build plugins for e2e-test target * server/Wasm_vm: Reorder plugin folder creation so no folders are created in the plugin cache when loading a plugin fails due to not being present or similar. * update plugins testcommit * makefile: Change job order * changelog: Add PR #1924
2022-11-22 23:06:02 +03:00
# If this feature is NOT set (default):
# - builtin plugins (status-bar, tab-bar, ...) are loaded directly from the application binary
# If this feature is set:
# - builtin plugins MUST be available from whatever is configured as `PLUGIN_DIR`
disable_automatic_asset_installation = []
unstable = []
WIP: Use `xtask` as build system (#2012) * xtask: Implement a new build system xtask is a cargo alias that is used to extend the cargo build system with custom commands. For an introduction to xtask, see here: https://github.com/matklad/cargo-xtask/ The idea is that instead of writing makefiles, xtask requires no additional dependencies except `cargo` and `rustc`, which must be available to build the project anyway. This commit provides a basic implementation of the `build` and `test` subcommands. * xtask/deps: Add 'which' * xtask/test: Handle error when cargo not found * xtask/flags: Add more commands to perform different useful tasks. Includes: - clippy - format - "make" (composite) - "install" (composite) Also add more options to `build` to selectively compile plugins or leave them out entirely. * xtask/main: Return error when cargo not found * xtask/build: Add more subtasks - `wasm_opt_plugins` and - `manpage` that perform other build commands. Add thorough documentation on what each of these does and also handle the new `build` cli flags appropriately. * xtask/clippy: Add job to run clippy * xtask/format: Add job to run rustfmt * xtask/pipeline: Add composite commands that perform multiple atomic xtask commands sequentially in a pipeline sort of fashion. * xtask/deps: Pin dependencies * xtask/main: Integrate new jobs and add documentation. * xtask: Implement 'dist' which performs an 'install' and copies the resulting zellij binary along with some other assets to a `target/dist` folder. * cargo: Update xflags version * xtask: Measure task time, update tty title * xtask: Update various tasks * xtask: wasm-opt plugins in release builds automatically. * xtask/build: Copy debug plugins to assets folder * xtask: Add 'run' subcommand * xtask: Add arbitrary args to test and run * xtask: Rearrange CLI commands in help * xtask: Add deprecation notice * docs: Replace `cargo make` with `xtask` * github: Use `xtask` in workflows. * xtask: Add support for CI commands * xtask: Streamline error handling * github: Use new xtask commands in CI * xtask: Add 'publish' job * xtask/publish: Add retry when publish fails * xtask: Apply rustfmt * xtask: Refine 'make' deprecation warning * xtask: add task to build manpage * contributing: Fix e2e commands * xtask/run: Add missing `--` to pass all arguments following `xtask run` directly to the zellij binary being run. * xtask: Stay in invocation dir and make all tasks that need it change to the project root dir themselves. * xtask/run: Add `--data-dir` flag which will allow very quick iterations when not changing the plugins between builds. * xtask/ci: Install dependencies without asking * utils: Allow including plugins from target folder * utils/assets: Reduce asset map complexity * utils/consts: Update asset map docs * xtask: Fix plugin includes * xtask/test: Build plugins first because the zellij binary needs to include the plugins. * xtask/test: Fix formatting * xtask: Add notice on how to disable it
2022-12-17 16:27:18 +03:00
plugins_from_target = []