Commit Graph

532 Commits

Author SHA1 Message Date
Aram Drevekenin
ffc03ae937
docs(changelog): show visual error on failed horizontal/vertical split 2022-12-14 22:28:29 +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
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
Aram Drevekenin
0598a84e1f chore(version): patch version due to CI difficulties 2022-12-09 12:09:07 +01:00
Aram Drevekenin
fba273eebb chore(version): patch version due to CI difficulties 2022-12-09 12:01:20 +01:00
Aram Drevekenin
adab6b8363 chore(version): patch version due to CI difficulties 2022-12-09 11:44:36 +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
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
a6f7756296
docs(changelog): plugin loading data flow 2022-12-06 15:35:41 +01:00
Jae-Heon Ji
7fc3901bf2
docs(changelog): fix missing theme contents 2022-11-30 21:53:03 +09:00
Aram Drevekenin
2641cccafc
docs(changelog): pane focus fix 2022-11-23 18:16:16 +01:00
Aram Drevekenin
00fedafa38
docs(changelog): server/client crash fix 2022-11-23 10:13:28 +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
Aram Drevekenin
8b50ef96f3
docs(changelog): improve render performance 2022-11-21 20:08:59 +01:00
Aram Drevekenin
5ad0429adc
docs(changelog): client buffer overflow fix 2022-11-18 10:23:21 +01:00
Jae-Heon Ji
84a931ad82
docs(changelog): fix catppuccin themes 2022-11-17 23:17:53 +09:00
Jae-Heon Ji
249830afe8
docs(changelog): fix mouse-click in simplified-ui 2022-11-17 22:55:24 +09:00
Aram Drevekenin
6c15292667
docs(changelog): pane frame fix 2022-11-16 18:00:54 +01:00
Aram Drevekenin
aa2adda475
docs(changelog): cli cwd fix 2022-11-16 16:27:21 +01:00
Jae-Heon Ji
ed64cff9b5
docs(changelog): add catppuccin themes 2022-11-16 21:48:15 +09:00
har7an
dc922907eb
changelog: Add PR #1769
which falls back to `/bin/sh` if `$SHELL` doesn't exist.
2022-11-15 15:26:33 +00:00
Aram Drevekenin
c66a8c0629
docs(changelog): plugin data flow 2022-11-15 12:25:09 +01:00
Jae-Heon Ji
b2b5bdc564
docs(changelog): update log path 2022-11-13 23:27:18 +09:00
har7an
342d1629d0
Errors: Ignore errors from async when quitting (#1918)
* utils/errors: Fix function order in `to_anyhow`

impl for `SendError`. Previously we attached the context to `anyhow!`,
which is wrong (because it doesn't create an `Err` type itself) and
leads to strange behavior where the error seemingly is immediately
panicked upon.

Instead, Wrap `anyhow!` into an `Err()` and then attach the context to
that. This achieves the intended goal and doesn't lead to premature
termination.

* server/terminal_bytes: Ignore error in `listen`

which occurs when quitting zellij with the `Ctrl+q` keybinding. At the
end of the `listen` function we break out of a loop and send a final
`Render` instruction to the Screen. However, when quitting zellij as
mentioned above, the Screen thread is likely dead already and hence we
cannot send it any Instructions. This causes an error in the async tasks
of the panes that handle reading the PTY input.

If we leave the error unhandled, we will have error messages in the log
whenever we quit zellij, even though the application exited normally.
Hence, we now send the final `Render` instruction but do not care
whether it is sent successfully or not.

This is a "workaround" for the fact that we cannot tell whether the
application is quitting or not.

* server/terminal_bytes: Add FIXME note

* changelog: Add PR #1918

don't log errors from async pane threads when quitting zellij
2022-11-12 10:18:15 +00:00
Jae-Heon Ji
b52ca5d13f
docs(changelog): support text input from clipboard 2022-11-12 11:48:20 +09:00
Aram Drevekenin
c086e33ed3 chore(release): v0.33.0 2022-11-10 09:50:57 +01:00
Aram Drevekenin
d4beabfeb2
docs(changelog): termwiz bump 2022-11-09 17:25:44 +01:00
har7an
5975af6e42
cargo: Don't strip release binary (#1916)
* cargo: Don't strip release binary

because the lack of debug symbols makes the panic backtrace completely
useless. It will show a long list of unknown locations then.

Except for a minor space saving of 3-4 MB, debug symbols don't have any
negative side-effects for our application that we're aware of.

* changelog: Add PR #1916

Don't strip debug symbols from release binaries so the backtraces
contain the function names involved.

* cargo: Explicitly keep debug symbols

and add a comment explaining why.
2022-11-09 08:40:02 +00:00
Aram Drevekenin
0cbb08317f
docs(changelog): temp_dir lib 2022-11-08 16:40:44 +01:00
Aram Drevekenin
1bb12e720e
docs(changelog): kanagawa theme 2022-11-08 16:31:11 +01:00
raphCode
0477d93444
Do not advertise 24 bit color support unchecked (#1900)
* Fix bat syntax colors when using mosh

Original reason for this line according to Aram:
I set this variable as part of the Sixel support to get notcurses to
work properly. I tried communicating with the notcurses maintainers
about a workaround for this, but to no avail.

* Changelog

* Improve changelog message

* Remove empty function
2022-11-08 13:33:35 +01:00
har7an
453142775c
errors: Remove log::error in server (#1881)
* server/wasm_vm: Replace `log::error!`

with better error logging by means of `non_fatal`. This preserves the
original error and allows adding context information on top. Also makes
error formatting more uniform across the application.

* server/tab: Replace `log::error!`

with better error logging by means of `non_fatal`. This preserves the
original error and allows adding context information on top. Also makes
error formatting more uniform across the application.

* server/route: Replace `log::error!`

and propagate the error to the caller instead.

* server/pty: Replace `log::error!`

with better error logging by means of `non_fatal`. This preserves the
original error and allows adding context information on top. Also makes
error formatting more uniform across the application.

Also add per-instruction error context to make it clear what we tried to
accomplish when an error occured.

* server/panes/tiled_panes: Merge dependencies

and sort them into a better order.

* server/panes/tiled_panes: Replace `log::error!`

with better error logging by means of `non_fatal`. This preserves the
original error and allows adding context information on top. Also makes
error formatting more uniform across the application.

* server/os_input_output: Merge depndencies

and sort them into a better order.

* server/logging_pipe: Replace `log::error!`

with better error logging by means of `non_fatal`. This preserves the
original error and allows adding context information on top. Also makes
error formatting more uniform across the application.

* server/os_io: Remove uses of `log::error`

* changelog: Add PR #1881

* server/os_io: Gracefully handle failing resize

for terminals IDs that don't exist, instead of propagating the error to
the user.

* server/lib: Remove leftover log message

* server/pty: Log error cause

rather than providing a hard-coded error reason which is plain wrong in
this context.

* server/screen: Remove calls to `log::error!`

and change `get_active_tab(_mut)?` to return a `Result` instead of an
`Option`. This already makes many places in the code obsolete where
previously "failed to get active tab..." was logged manually.

Rather than logging, use the `anyhow::Error`s we have, along with all
their context information, and log these instead.
2022-11-08 10:56:23 +00:00
Aram Drevekenin
39c8d97054
docs(changelog): various no-frame bugs 2022-11-05 14:46:42 +01:00
Aram Drevekenin
dde6ecf09a
docs(changelog): focus in/out event 2022-11-04 17:30:29 +01:00
Aram Drevekenin
c34853adac
docs(changelog): cli action tty fix 2022-11-03 11:38:58 +01:00
Aram Drevekenin
98b66109a6
docs(changelog): zellij edit fix 2022-11-03 11:07:48 +01:00
Aram Drevekenin
4905ae65b8
docs(changelog): bold/dim reset fix 2022-11-02 19:25:50 +01:00
Aram Drevekenin
897038638d
docs(changelog): clear floating panes indication 2022-11-02 18:12:37 +01:00
Aram Drevekenin
97131fd7f8
docs(changelog): backslash config convert fix 2022-11-02 16:45:20 +01:00
Aram Drevekenin
4ab04c59a2
docs(changelog): terminating char in search 2022-11-02 14:36:29 +01:00
Jae-Heon Ji
8f293f584f
docs(changelog): remove space from shared_except 2022-11-02 20:17:23 +09:00
har7an
e45a3e5826
errors: Don't unwrap in server::os_input_output (#1895)
* server/os_io: Redefine `ServerOsApi` result types

to use `anyhow::Result` instead. This mostly makes the need of custom
`SpawnTerminalError` obsolete (tbd in subsequent commits) and unifies
error handling across the application.

* utils/errors: Implement new `ZellijError` type

to replace any previously defined, isolated custom error types
throughout the application. Currently implements all error variants
found in `SpawnTerminalError`.

In the long term, this will allow zellij to fall back to a single error
type for all application-specific errors, instead of having different
error types per module.

* server/unit/screen: Impl new `ServerOsApi`

with updated `Result`-types.

* server/tab/unit: Impl new `ServerOsApi`

with updated `Result`-types.

* server/os_io: Impl new `ServerOsApi`

with updated `Result`-types.

* utils/ipc: Return `anyhow::Error` in `send`

rather than a `&'static str`, which isn't compatible with
`anyhow::Context`.

* server/tab: Handle `Result` in `resize_pty!`

which is returned due to the changed return types in `ServerOsApi`.

* server/tab: Handle new `Result`s

originating in the change to the `ServerOsApi` trait definition.

* server/screen: Handle new `Result`s

originating in the change to the `ServerOsApi` trait definition.

* server/panes/tiled: Handle new `Result`s

originating in the change to the `ServerOsApi` trait definition.

* server/panes/floating: Handle new `Result`s

originating in the change to the `ServerOsApi` trait definition.

* server/lib: Unwrap on new `Result`s

originating in the change to the `ServerOsApi` trait definition. The
functions here don't return a `Result` yet, this is better left to a
follow-up PR.

* server: Remove `SpawnTerminalError`

and make use of the new `ZellijError` instead. Make use of `anyhow`s
downcast capabilities to restore the underlying original errors where
necessary, as was done previously. This gives us the flexibility to
attach context information to all errors while still allowing us to
handle specific errors in greater detail.

* server/pty: Fix vars broken in rebase

* server/os_io: Remove last `SpawnTerminalError`

* changelog: Add PR #1895
2022-11-02 05:29:50 +00:00
Aram Drevekenin
cd2f5c2e7d
docs(changelog): suspended command panes 2022-11-01 09:08:17 +01:00
Aram Drevekenin
6d29c6951e
docs(changelog): status bar fix 2022-10-31 19:41:36 +01:00
Thomas Linford
1704d11698
docs(changelog): mouse mode runtime toggle 2022-10-31 17:06:14 +01:00