Commit Graph

2362 Commits

Author SHA1 Message Date
Cason Adams
ad21f81ac0
add tmux close pane key (#2058)
* add tmux close pane key

* chore: update snapshots for new keybind

Co-authored-by: Jae-Heon Ji <atx6419@gmail.com>
2023-01-03 22:47:39 +09:00
Aram Drevekenin
02e80860a2 style(fmt): rustfmt 2022-12-24 16:29:54 +01:00
Aram Drevekenin
a0b0f0e852 style(clippy): fix clippy lint 2022-12-24 16:06:16 +01:00
Aram Drevekenin
0ffda4e6f9
docs(changelog): floating panes in layouts 2022-12-24 15:48:57 +01:00
Aram Drevekenin
799fa5de8d
Floating panes in layouts (#2047)
* 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-24 15:48:04 +01:00
Aram Drevekenin
17205793e4
docs(changelog): remove nix support 2022-12-20 12:25:01 +01:00
Aram Drevekenin
d1cacc3fa8
chore(repo): remove nix support (#2038) 2022-12-20 12:24:19 +01:00
Aram Drevekenin
6a5e15edf3
docs(changelog): add emeritus 2022-12-20 10:04:34 +01:00
Aram Drevekenin
6347900dd7
docs(changelog): visual error on resize 2022-12-19 12:49:40 +01:00
Aram Drevekenin
1b5f3c52a4
fix(panes): show visual error when failing to resize panes (#2036)
* 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-19 12:48:43 +01:00
har7an
d1f50150f6
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 13:27:18 +00:00
Aram Drevekenin
6e93e8ffce hotfix: update plugins to the latest versions so we can develop 2022-12-15 09:55:27 +01:00
Aram Drevekenin
ffc03ae937
docs(changelog): show visual error on failed horizontal/vertical split 2022-12-14 22:28:29 +01:00
Aram Drevekenin
c3115a428e
fix(panes): show visual error when unable to split panes vertically/horizontally (#2025)
* fix(panes): show visual error when failing to split pane vertically/horizontally

* fix: lockfile
2022-12-14 22:26:48 +01:00
Andreas Hartmann
177cd20bea chore: Bump development version 2022-12-13 17:24:19 +01:00
Andreas Hartmann
5cd412bde0 chore(release): v0.34.4 2022-12-13 15:10:15 +01:00
Andreas Hartmann
962f37e767 chore: Bump development versions 2022-12-13 14:59:49 +01:00
har7an
7c7fb9808e
Add PR #2013 2022-12-13 12:07:19 +00:00
Nuno David
8eb6446b3f
Fix: Remove shell.exists() check from get_default_terminal (#2013)
* Fix: Make sure to get full path from SHELL env

* Feat: Revert to previous get_default_terminal and just remove shell exists check
2022-12-13 12:06:20 +00:00
har7an
685e39bd9b
Hotfix: Resize with plugin panes (#2019)
* server/panes/tiled/grid: Fix area calculation

for debug assertions. Now also considers fixed-size panes correctly.

* server/panes/tiled/grid: Refactor function

to make it more readable and remove some implicitly handled "special"
cases.

* server/panes/tiled/grid: Handle plugins panes

like any other pane type and only check whether they are fixed-size
panes, too.

* changelog: Add PR #2019
2022-12-13 09:49:41 +00:00
a-kenji
bb2b8ddc82 fix(ci): move nix build -> nix-develop
This will trigger the nix build workflow, only on changes in the nix
files.

- This won't generate precompiled artifacts for any person wanting to
  use them from the main branch anymore.

  Also PR's that pass CI won't be able to be run with:
  ```
  nix run github:zellij-org/zellij/pr#
  ```
  without compilation anymore on any linux, or darwin system.
2022-12-12 08:19:46 +01:00
Aram Drevekenin
67ac1190a7 chore(release): v0.34.3 2022-12-09 12:11:03 +01:00
Aram Drevekenin
0598a84e1f chore(version): patch version due to CI difficulties 2022-12-09 12:09:07 +01:00
Aram Drevekenin
934439eb3d chore(release): add plugins 2022-12-09 12:07:19 +01:00
Aram Drevekenin
1e223a06a5 chore(release): v0.34.2 2022-12-09 12:02:56 +01:00
Aram Drevekenin
fba273eebb chore(version): patch version due to CI difficulties 2022-12-09 12:01:20 +01:00
har7an
e19ba4e341
Makefile: Fix CI ordering/dependencies (#2004) 2022-12-09 11:06:11 +00:00
Aram Drevekenin
adab6b8363 chore(version): patch version due to CI difficulties 2022-12-09 11:44:36 +01:00
har7an
1e141aa7fe
HOTFIX: utils: Move plugins into new assets folder (#2003)
that is included in the utils to make builds pass.
2022-12-09 10:49:32 +00:00
har7an
36233439f9
HOTFIX: Feature/ignore asset map (#2002)
* utils: feature-gate asset map

to make publishing on crates.io possible without compile errors.

* setup: Fix asset_map feature
2022-12-09 10:17:28 +01:00
Aram Drevekenin
66593ec41a chore(release): v0.34.0 2022-12-09 09:14:03 +01:00
har7an
62eaea1583
Reimplement resize code (#1990)
* 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-08 12:50:28 +00:00
Aram Drevekenin
420c7c319b
docs(changelog): loading screen 2022-12-07 15:04:42 +01:00
Aram Drevekenin
f8a078c1a9
feat(ux): show loading screen (#1997)
* feat(ux): show loading prompt

* style(fmt): rustfmt
2022-12-07 15:03:58 +01:00
har7an
81287a276f
errors: Maintain caller location in to_log (#1994)
* 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-07 07:51:23 +00:00
Aram Drevekenin
fd7a5398cd
docs(changelog): reduce extraneous cross-thread messaging 2022-12-06 22:31:11 +01:00
Aram Drevekenin
b1ab4eac10
refactor(messaging): reduce extraneous cross-thread messaging (#1996)
* refactor(messaging): reduce extraneous cross-thread messaging

* style(fmt): rustfmt
2022-12-06 22:29:57 +01:00
Aram Drevekenin
a6f7756296
docs(changelog): plugin loading data flow 2022-12-06 15:35:41 +01:00
Aram Drevekenin
b7adfcc581
refactor(plugins): fix plugin loading data flow (#1995) 2022-12-06 15:34:43 +01:00
dependabot[bot]
c2a6156a6b
build(deps): bump DeterminateSystems/update-flake-lock from 14 to 15 (#1982)
Bumps [DeterminateSystems/update-flake-lock](https://github.com/DeterminateSystems/update-flake-lock) from 14 to 15.
- [Release notes](https://github.com/DeterminateSystems/update-flake-lock/releases)
- [Commits](https://github.com/DeterminateSystems/update-flake-lock/compare/v14...v15)

---
updated-dependencies:
- dependency-name: DeterminateSystems/update-flake-lock
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-12-01 11:47:22 +01:00
a-kenji
31ca5b4731
[create-pull-request] automated change (#1980)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-12-01 09:40:36 +01:00
a-kenji
cb3e77aca9
flake.lock: Update (#1981)
Flake lock file updates:

• Updated input 'crate2nix':
    'github:kolloch/crate2nix/3e6fbcc8ecd384018196223023cdd7868bbce4e6' (2022-10-31)
  → 'github:kolloch/crate2nix/e4414cc2579d6ab11e9542f49eeb302b451bf0e2' (2022-11-21)
• Updated input 'flake-compat':
    'github:edolstra/flake-compat/b4a34015c698c7793d592d66adbab377907a2be8' (2022-04-19)
  → 'github:edolstra/flake-compat/009399224d5e398d03b22badca40a37ac85412a1' (2022-11-17)
• Updated input 'flake-utils':
    'github:numtide/flake-utils/6ee9ebb6b1ee695d2cacc4faa053a7b9baa76817' (2022-10-29)
  → 'github:numtide/flake-utils/5aed5285a952e0b949eb3ba02c12fa4fcfef535f' (2022-11-02)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/412b9917cea092f3d39f9cd5dead4effd5bc4053' (2022-10-30)
  → 'github:nixos/nixpkgs/a115bb9bd56831941be3776c8a94005867f316a7' (2022-11-27)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/8f81faec35508647ced65c44fd3e8648a5518afb' (2022-10-31)
  → 'github:oxalica/rust-overlay/3158e47f6b85a288d12948aeb9a048e0ed4434d6' (2022-11-30)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-12-01 09:03:19 +01:00
Jae-Heon Ji
7fc3901bf2
docs(changelog): fix missing theme contents 2022-11-30 21:53:03 +09:00
Jae-Heon Ji
924488de6f
fix(themes): missing tokyo-night-dark theme (#1972) 2022-11-30 21:51:21 +09:00
Aram Drevekenin
2641cccafc
docs(changelog): pane focus fix 2022-11-23 18:16:16 +01:00
Aram Drevekenin
f8fbd8a138
fix(panes): focus change when closing and between tabs (#1966)
* fix(panes): do not forget pane focus when switching tabs or closing panes

* style(fmt): rustfmt

* fix(tests): e2e snapshots
2022-11-23 18:14:24 +01:00
Aram Drevekenin
00fedafa38
docs(changelog): server/client crash fix 2022-11-23 10:13:28 +01:00
Aram Drevekenin
b0218f4d50
fix(router): handle client empty message (#1965)
* fix(router): handle client empty message

* style(fmt): rustfmt
2022-11-23 10:10:42 +01:00
har7an
11b0210de5
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 20:06:02 +00:00
Jae-Heon Ji
4921fa7cae
docs(changelog): fix empty session name 2022-11-22 21:38:10 +09:00