summaryrefslogtreecommitdiffstats
path: root/zellij-utils/src
AgeCommit message (Collapse)Author
2023-06-13fix(plugins): only listen to hd if a plugin is subscribed to hd events (#2529)Aram Drevekenin
* fix(plugins): only listen to hd if a plugin is subscribed to hd events * style(fmt): rustfmt * fix(tests): give time for fs watcher to do its thing * fix(tests): increase timeout
2023-06-09feat(plugins): extensive plugin api (#2516)Aram Drevekenin
* feat(plugins): add our entire API * style(fmt): rustfmt * fix(detach): make it work again
2023-06-07feat(wasm-plugin-system): major overhaul and some goodies (#2510)Aram Drevekenin
* strider resiliency * worker channel prototype * finalized ui * show hide plugin * fs events to plugins * tests for events and new screen instructions * various refactoringz * report plugin errors instead of crashing zellij * fix plugin loading with workers * refactor: move watch filesystem * some fixes and refactoring * refactor(panes): combine pane insertion logic * refactor(screen): launch or focus * refactor(pty): consolidate default shell fetching * refactor: various cleanups * initial refactoring * more initial refactoring * refactor(strider): search * style(fmt): rustfmt * style(pty): cleanup * style(clippy): ok clippy * style(fmt): rustfmt
2023-05-16feat(plugins): Plugin workers and strider (#2449)Aram Drevekenin
* mvp of strider fuzzy find * improve search ui * various refactoringz * moar refactoring * even more refactoring * tests and more refactoring * refactor: remove unused stuff * style(fmt): rustfmt * debug ci * debug ci * correct path for plugin system tests * fix plugin system ci tests * remove debugging statements from test * fix plugin worker persistence * add test for plugin worker persistence * style(fmt): rustfmt * final cleanups * remove outdated comments
2023-05-15Fix issue 2421 - Update config file output (#2443)Kangaxx-0
* Update config file output * add more information in config error
2023-05-09Use rust 1.67 (#2375)har7an
* rust: Update toolchain version to 1.67 * xtask/pipeline/publish: Drop manual "wait" for crates.io to catch up, which is obsolete with rust 1.66 and up. Cargo does that on its own now. See https://github.com/rust-lang/cargo/pull/11062 * xtask: Add function to obtain asset_dir instead of assembling it on demand throughout the codebase. * xtask/run: Add '--quick-run' flag as a convenient shorthand for `cargo xtask run --data-dir $PROJECT_ROOT/zellij-utils/assets`. * cargo: Add 'q' command alias as a shorthand for 'cargo xtask run --quick-run' * cargo: Update thiserror to 1.0.40 * cargo: Update anyhow to 1.0.70 and specify dependency only once inside `zellij-utils`, not inside the zellij root crate. * cargo: Update names to 0.14.0 * cargo: Update miette to 5.7.0 and re-export the dependency from zellij-utils, to avoid duplicate (incompatible) includes from inside zellij-utils and the root crate. * cargo: Update dialoguer to 0.10.4 * fix formatting * changelog: Add PR #2375
2023-05-02Fix error loading non-existant themes directory and use default themes as ↵Imbris
the base when merging (#2411) * Fix error loading non-existant themes directory If the themes directory is derived from the config directory (rather than being specified explicitly in the config_options), we will avoid trying to load from it if it doesn't exist. * Use default themes as the base when merging with the themes specified in the config. This avoids the default themes overriding themes specified in the config. * If `setup --clean` is used, avoid loading from the user's theme directory.
2023-04-28fix(errors): add file path context to all IO errors in ConfigError (#2412)Imbris
2023-04-28feat(layout): Support environment variables in cwd (#2288) (#2291)Ran Shaham
* feat(layout): Support environment variables in cwd (#2288) * add `shellexpand` as dependency * expand environment variable in kdl parser's `parse_cwd()` * Fix and enhance environment variable expansion. * Return a proper `ConfigError` on failures. * Replace raw cwd parsing with `parse_cwd()`. * Add tests that verify correct expansions. * Perform env var expansion in more contexts. * feat(layout): Rewrite env var tests as snapshots. * Update layout env var expansion test snapshot.
2023-04-27feat: provide default themes (#2307)Jae-Heon Ji
* refactor: move themes to zellij-assets * feat: add theme to the binary * chore: move new theme from example to assets
2023-04-19feat(plugins): reload plugin at runtime (#2372)Aram Drevekenin
* fix(plugins): proper error when wasm file does not exist * reload working * race condition handling * refactor(plugins): start plugin * refactor(plugins): plugin-loader * refactor(plugins): load/reload plugin * refactor(plugins): apply cached events * fix(plugins): gittery loading * chore(plugins): rename reload-plugin to start-or-reload-plugin * chore(styling): small cleanups * style(fmt): rustfmt * style(fmt): cleanups * style(fmt): cleanups * test(e2e): update snapshots * test(e2e): update snapshots * chore(repo): comment plugin optimization because it doubles the CI time
2023-04-18feat: support default cwd (#2290)Kangaxx-0
* init commit * add default config to kdl file * change the field from `default_cwd` to `override_cwd` * change back to default_cwd * fix test * default cwd works without `default_shell`
2023-04-18feat: Add layout configuration to exclude panes from tab sync (#2314)Theo Salzmann
2023-04-03feat(panes): allow defining an expanded stacked pane (#2343)Aram Drevekenin
* feat(panes): allow defining an expanded stacked pane * style(fmt): rustfmt
2023-03-30fix(layouts): nested attribute truncating (#2337)Aram Drevekenin
2023-03-30fix(layouts): do not default to default swap layouts when opening a new tab ↵Aram Drevekenin
without swap layouts (#2336)
2023-03-30Add option to hide session name in tab-bar (deriving from #2172) (#2301)Marcel Baur
* feat(tab-bar): add option to hide prefix (#2172) * feat(tab-bar): only hide session_name * fix(snapshots): update snapshots with new config-var naming --------- Co-authored-by: Marcel Baur <marcel@baur.gg>
2023-03-29feat(terminal): cli and bindable action to clear all buffers for a specific ↵Oleks Gnatovskyi
pane (#2239) * fix typo * Add clear screen action * add proper test * added bindable action; remove pointless default impl * add default binding * use imsnif's variant * remove commented example config * remove log line --------- Co-authored-by: Aram Drevekenin <aram@poor.dev>
2023-03-27feat(plugins): async plugin loading (#2327)Aram Drevekenin
* work * refactor(plugins): break down start plugin async function * work * loading messages * nice ui * floating panes and error handling * cleanups and conflicting plugin/direction * find exact pane when relayouting * fix plugin pane titles * kill loading tasks on exit * refactor: move stuff around * style(fmt): rustfmt * various fixes and refactors
2023-03-06chore(repo): revert theme pr (#2229)Aram Drevekenin
* Revert "feat: add self-provided themes (#2224)" This reverts commit 63bfe9c5e495481da97c7c566a727216de75c8a7. * Revert "docs(changelog): add self-provided themes" This reverts commit 364f0e7c44921c23eef69c0f2d5fa4ff31aeb336.
2023-03-06feat: add self-provided themes (#2224)Jae-Heon Ji
* chore: move themes to default assets * feat: add self-provided themes * fix: embed themes into binary
2023-03-06fix(cli): make auto_layout work through the cli (#2227)Aram Drevekenin
2023-03-01feat(cli): `QueryTabNames` cli action to list all tab names (#2145)哇呜哇呜呀咦耶
* extend display char in tab * Add action to list all tab names * print tab names and remove logs * change msg name, and handle Log in normal client * fix log * resolve code conflict * change var name * add snapshot test * fix failed test case * restore snapshot * Revert "restore snapshot" This reverts commit b97a9512ab106615a1a1e5882392a03a17cdf1a3. * restore snapshot * revert snapshot * fix(layout): various parser and ui fixes (#2191) * fix(layout): error on nodes outside layout node * fix(layout): move stacked property to pane * fix(layout): various stack exceptions * fix(ui): non-flexible stacked pane titles now take up their full length * fix(ui): stack titles with no-pane-frames take up their proper length * style(fmt): rustfmt * docs(changelog): layout fixes * fix(messaging): cache hold pane messages by their tab_id if the tab is not ready (#2196) * fix(messaging): cache hold pane messages by their tab_id if the tab is not ready * style(fmt): rustfmt * docs(changelog): open panes fix * fix(layout): tab focus (#2197) * fix(layout): tab focus * style(fmt): rustfmt * docs(changel0g): tab focus fix * fix(cli): new-tab now also looks in layout_dir for layouts (#2198) * fix(cli): the new-tab action now also searches for layouts in the layout dir * style(fmt): rustfmt * fix(tests): add missing parameter to cli action * docs(changelog): new-tab cli layout folder fix * fix(kdl): new-tab keybind looks in layout_dir for layouts (#2200) * fix(themes): missing tokyo-night-dark theme * fix(kdl): new-tab keybind also looks in layout_dir for layouts * docs(changelog): new-tab keybind layout folder fix * fix(cli): edit cwd (#2201) * fix(cli): properly set cwd for edit panes * fix(layouts): properly set cwd for edit panes * style(fmt): rustfmt * docs(changelog0 * fix(layouts): do not relayout twice on auto_layout (#2202) * fix(layouts): do not relayout twice on auto_layout * style(fmt): rustfmt * fix(new-tab): get config parameters from config file (#2203) * fix(cli): take default shell from config if it exists when opening new tab * fix(cli): take layout dir from config when opening new tab if it exists * style(fmt): rustfmt * docs(changelog): new-tab config parameters * fix(grid): only use background pending styling when deleting characters (#2204) * docs(changelog): neovim underline fix * feat(layouts): exact panes constraint (#2206) * style(fmt): remove warnings * fix(swap-layouts): introduce exact panes constraint * fix(swap-layouts): improve floating pane swap layout ux * style(fmt): rustfmt * docs(changelog): exact panes constraint * fix(pty): report no-cwd for empty path returned from sysinfo (#2213) * fix(sixel): report pixel size in winsize change ioctl (#2212) * fix(sixel): report pixel size in winsize change ioctl * style(fmt): rustfmt * docs(changelog): various fixes * style(code): naming * test(log): adjust query tab names test to look at the log message * style(fmt): rustfmt --------- Co-authored-by: Aram Drevekenin <aram@poor.dev> Co-authored-by: Jae-Heon Ji <32578710+jaeheonji@users.noreply.github.com>
2023-03-01fix(plugins): location path decoding from Url (#2190)Cory Forsstrom
* Add unit test for plugin run location parsing * Fix file plugin parsing for relative paths * Update test to check for path with spaces * Add a couple more tests
2023-02-28feat(layouts): exact panes constraint (#2206)Aram Drevekenin
* style(fmt): remove warnings * fix(swap-layouts): introduce exact panes constraint * fix(swap-layouts): improve floating pane swap layout ux * style(fmt): rustfmt
2023-02-28fix(new-tab): get config parameters from config file (#2203)Aram Drevekenin
* fix(cli): take default shell from config if it exists when opening new tab * fix(cli): take layout dir from config when opening new tab if it exists * style(fmt): rustfmt
2023-02-27fix(cli): edit cwd (#2201)Aram Drevekenin
* fix(cli): properly set cwd for edit panes * fix(layouts): properly set cwd for edit panes * style(fmt): rustfmt
2023-02-27fix(kdl): new-tab keybind looks in layout_dir for layouts (#2200)Jae-Heon Ji
* fix(themes): missing tokyo-night-dark theme * fix(kdl): new-tab keybind also looks in layout_dir for layouts
2023-02-26fix(cli): new-tab now also looks in layout_dir for layouts (#2198)Aram Drevekenin
* fix(cli): the new-tab action now also searches for layouts in the layout dir * style(fmt): rustfmt * fix(tests): add missing parameter to cli action
2023-02-25fix(layout): various parser and ui fixes (#2191)Aram Drevekenin
* fix(layout): error on nodes outside layout node * fix(layout): move stacked property to pane * fix(layout): various stack exceptions * fix(ui): non-flexible stacked pane titles now take up their full length * fix(ui): stack titles with no-pane-frames take up their proper length * style(fmt): rustfmt
2023-02-17feat(ui): swap layouts and stacked panes (#2167)Aram Drevekenin
* relayout working with hard coded layout * work * refactor(layout): PaneLayout => TiledPaneLayout * tests passing * tests passing * tests passing * stacked panes and passing tests * tests for stacked panes * refactor(panes): stacked panes * fix: focusing into stacked panes from the left/right * fix(layouts): handle stacked layouts in the middle of the screen * fix(pane-stack): focus correctly when coming to stack from above/below * fix(stacked-panes): resize stack * fix(stacked-panes): focus with mouse * fix(stacked-panes): focus next pane * fix(layout-applier): sane focus order * fix(stacked-panes): better titles for one-liners * fix(stacked-panes): handle moving pane location in stack * fix(relayout): properly calculate display area * fix(relayout): properly calculate rounding errors * fix(stacked-panes): properly handle closing a pane near a stack * fix(swap-layouts): adjust swap layout sort order * feat(swap-layouts): ui + ux * fix(swap-layouts): include base layout * refactor(layout): remove unused method * fix(swap-layouts): respect pane contents and focus * work * fix(swap-layouts): load swap layouts from external file * fix(swap-layouts): properly truncate layout children * fix(stacked-panes): allow stacked panes to become fullscreen * fix(swap-layouts): work with multiple tabs * fix(swap-layouts): embed/eject panes properly with auto-layout * fix(stacked-panes): close last pane in stack * fix(stacked-panes): move focus for all clients in stack * fix(floating-panes): set layout damaged when moving panes * fix(relayout): move out of unfitting layout when resizing whole tab * fix(ui): background color for swap layout indicator * fix(keybinds): add switch next layout in tmux * fix(ui): swap layout indication in compact layout * fix(compact): correct swap constraint * fix(tests): tmux swap config shortcut * fix(resizes): cache resizes so as not to confuse panes (eg. vim) with multiple resizes that it debounces weirdly * feat(cli): dump swap layouts * fix(ui): stacked panes without pane frames * fix(ux): move pane forward/backwards also with floating panes * refactor(lint): remove unused stuff * refactor(tab): move swap layouts to separate file * style(fmt): rustfmt * style(fmt): rustfmt * refactor(panes): various cleanups * chore(deps): upgrade termwiz to get alt left-bracket * fix(assets): merge conflicts of binary files * style(fmt): rustfmt * style(clippy): no thank you! * chore(repo): remove garbage file
2023-02-16feat: add args to new-tab action (#2072)Jae-Heon Ji
* fix(themes): missing tokyo-night-dark theme * feat: add args to new-tab action * fix: name can be set without layout * feat: pass config options to action parser * chore: remove unnecessary default values * chore: update snapshots * fix(status-bar): add exception for NewTab * fix: update code review * feat: add shallow_eq for action
2023-02-09cleanups around "buffer full" error (#2136)har7an
* server/os_i_o: Add fixme to IPC queue between server and client, explaining why the queue has its current length. * utils/ipc: Don't advertise terminal emulators and use a more generic phrasing instead. zellij as application isn't the place to recommend specific terminals to use it with. * style(comment): redraw-on-backpressure comment --------- Co-authored-by: Aram Drevekenin <aram@poor.dev>
2023-02-07feat(cli): add `GoToTabName` action to switch tab by name (#2120)哇呜哇呜呀咦耶
* Add `GoToTabName` action to switch tab by name * rm blank file * add --create option * format * add some doc * add test case * format * add test case * change variable name
2023-01-24feat: add ScrollToTop action (#2110)Yves Biener
2023-01-22Improve client disconnect handling (#2068)har7an
* xtask/run: Use varargs when run with `-data-dir` Previously any additional arguments passed on the command line were ignored. Now they are appended to `cargo run ...` as documented. * server/os_i_o: Improve error message when IPC dies and display the last send/recv error to the user instead of a generic "Buffer full" message. * server/lib: Log error in `send_to_client!` so we will know when an error occured while trying to send a message to the client. The most likely cause for this is that the client buffer filled up and hence we cannot send any new messages. While we still disconnect the client as before, now we also write a log message that explains the situation. * utils/channel: Apply rustfmt * server/lib: Detect when client responds too slow and log a message before disconnecting it. * server/os_i_o: Add retry queue to client senders that is dynamically allocated on-demand and stores `ServerToClientMsg` in case the regular IPC channel is currently full. This acts as a dynamic buffer to hold and buffer messages for a while until the client hopefully catches up. Also write a message to the log to indicate when the client is recognized to be too slow in handling server messages. * server: apply rustfmt * utils/ipc: Add session name to "Disconnect" error * utils/ipc: Fix error message indent * server/os_i_o: Undo IPC channel extension via `Vec` and drastically increase the IPC message queue size instead. Measurements didn't discover a drastic increase in RAM caused by this, and it is a much easier fix for the problem at hand. * CHANGELOG: Add PR #2068
2023-01-19errors: handle missing plugin caches (#2093)har7an
* server/plugins: Always recreate plugin folders in case they aren't existent and don't mark errors to do so as non-fatal. The latter masks the underlying cause when e.g. the `.cache` folder is, for some reason, not writable by zellij (See #2092), whereas the former fixes problems arising from the user having purged their .cache/zellij folder entirely. * utils/errors: Rewrite panic message * changelog: Add PR #2093
2023-01-03add tmux close pane key (#2058)Cason Adams
* add tmux close pane key * chore: update snapshots for new keybind Co-authored-by: Jae-Heon Ji <atx6419@gmail.com>
2022-12-24style(fmt): rustfmtAram Drevekenin
2022-12-24style(clippy): fix clippy lintAram Drevekenin
2022-12-24Floating panes in layouts (#2047)Aram Drevekenin
* work * tests passing * tests: floating panes in layouts * panes(plugins): floating plugins working * refactor(tab): layout applier * style(comment): remove outdated * style(fmt): rustfmt
2022-12-19fix(panes): show visual error when failing to resize panes (#2036)Aram Drevekenin
* fix(panes): show visual error when failing to resize pane vertically/horizontally * fix(resize): retry pane resize on rounding errors * fix(resize): proper error when resizing other panes into fixed panes * style(fmt): rustfmt
2022-12-17WIP: Use `xtask` as build system (#2012)har7an
* 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-14fix(panes): show visual error when unable to split panes ↵Aram Drevekenin
vertically/horizontally (#2025) * fix(panes): show visual error when failing to split pane vertically/horizontally * fix: lockfile
2022-12-09HOTFIX: utils: Move plugins into new assets folder (#2003)har7an
that is included in the utils to make builds pass.
2022-12-09HOTFIX: Feature/ignore asset map (#2002)har7an
* utils: feature-gate asset map to make publishing on crates.io possible without compile errors. * setup: Fix asset_map feature
2022-12-08Reimplement resize code (#1990)har7an
* server/floating_panes: Start removing `unwrap`s * server/panes: Remove more `unwrap`s in floating panes code. * utils/data: Unify `Direction` type which was previously present in multiple locations. Also start working on a new Resize Method (type `ResizeStrategy`), to remove code duplication in the resize code. * server: Implement new resize handling with the `ResizeStrategy` type. Add a new action with the ability to invoke it from the CLI. Take care to maintain backwards-compatibility in terms of configuring the new resize mode. * utils/layout: Add conversion for SplitDirection from `data::Direction`. * utils/data: Add impl for `Direction` * server/panes: Rework tiled pane resizing but it's currently still broken in a few regards and misses ability to perform "regular" increase/decrease. * server/panes/tiled_panes: Add debug assertion to catch if the total area of all panes (in percent) is different from 100.0 at some point. * server/panes/tiled/grid: Fix resize bug caused by the fact that neighboring plugin panes previously weren't filtered from resize operations, even though they cannot be resized at all. * utils/data: Add `invert` for `Resize` * utils/data: Add member to `ResizeStrategy` that controls whether we invert resize behavior when increasing size towards a bounadry. This maintains current behavior. * server/screen: Handle new attribute in `ResizeStrategy` * server/panes/resizer: Return `anyhow::Error` * server/panes/tiled: Implement resize increase/decrease without specifying a direction (towards all possible directions). Currently broken in some cases. * server/pane/tiled/grid: Don't return early to preserve resize debug assertions. * server/pane/tiled/grid: Fix resize bug caused by checking for the wrong alignments in some cases. Also refactor the code for looking up aligned panes. * server/panes/tiled/grid: Cleanup code and remove log statements and unused functions. * server/panes/float/grid: Invert resize if the floating pane is hitting a boundary already. * plugins/status-bar: Add hints for new resize * server: Use new resize method * server: Fix tests with new functions and result types. * apply rustfmt * utils: Apply rustfmt * server/panes/floating: Fix resize increase behavior which would previously, upon hitting a boundary, cause the pane to invert the resize operation, which is wrong. Instead, it now does not resize floating panes on an undirected resize "increase" in directions where it hits boundaries. * server/panes/tiled: Use correct resize increments The values for the resize increments were previously wrong, causing many of the tests to fail. * server/panes/tiled: Fix resize checks to correctly consider fixed-size panes. * utils/assets/config: Update default config with new keybindings for resize mode. * server/panes/tiled: Fix resize check * server/panes/tiled: Use shortener for `Direction` type in `change_pane_size` function. * server/panes/tiled: Restore resize behavior for undirected resizes, to the way it was before this PR. * server/panes/floating: Fix resize increment for undirected resizes * utils/data: Fix doctest * utils: Fix test snapshots for tests working with the default config * changelog: Add PR #1990
2022-12-07feat(ux): show loading screen (#1997)Aram Drevekenin
* feat(ux): show loading prompt * style(fmt): rustfmt
2022-12-07errors: Maintain caller location in `to_log` (#1994)har7an
* utils/errors: Add caller location to `to_log` by building the log record manually and filling in the callers file and line manually. It is currently not possible to determine a callers module, hence the module is now set to "???" in all log entries logged this way. Nonetheless, the file and line number are sufficient to find the logs source. * utils/errors: Reimplement `to_log` default implementation in the `LoggableError` trait. * changelog: Add PR #1994 errors: Maintain caller location in `to_log`
2022-12-06refactor(plugins): fix plugin loading data flow (#1995)Aram Drevekenin