summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2022-10-18style(fmt): rustfmtchange-floating-window-positionsAram Drevekenin
2022-10-18feat(panes): group floating panesAram Drevekenin
2022-10-18docs: Describe how to handle Options as errors (#1805)har7an
* docs: Describe how to handle Options as errors * CONTRIBUTING: Add tips for code contributions which will be home to condensed tips and best-practices around the zellij code. Currently explains to prefer returning `Result` types instead of `unwrap`ing on them. The tips in here are meant to be short, concise guides that allow the user to get started without a lot of reading. The individual tips can (and should) be supplemented with links to "further reading" where the topic at hand is explained in greater detail.
2022-10-17docs(changelog): zellij run improvementsAram Drevekenin
2022-10-17feat(cli): zellij run improvements (#1804)Aram Drevekenin
* feat(cli): move command to the end of the cli arguments * feat(cli): allow naming panes from the command line * fix(cli): adjust actions after pane rename * feat(cli): zellij run completions for fish * feat(cli): zellij run completions for bash and zsh * style(fmt): rustfmt * fix(e2e): fix run test and snapshot * style(fmt): rustfmt
2022-10-17changelog: Add PR #1800har7an
for logging of IPC messages in `thread_bus` only when the `--debug` flag is specified.
2022-10-17Log `thread_bus` IPC messages only in debug mode (#1800)har7an
* zellij: Add global `DEBUG_MODE` variable that tells us whether zellij was started with the `--debug` CLI flag. * utils/errors: Only log thread_bus message in debug mode, and discard the message otherwise. * utils/logging: Increase logsize to 16 MiB per logfile, totaling 32 MiB of logs at most (in two files). * zellij: Set global `DEBUG` variable in server thread and make sure the value of the `--debug` CLI flag is propagated to the server, too. This means that to enable debug mode, the server must be started with the `--debug` flag. This happens when the first client that starts the zellij session has the `--debug` flag set, because it will be forwarded to the server. Subsequent clients attaching to the same session with the `--debug` flag specified **do not** override the value of the `DEBUG` variable. Hence, if the server wasn't started in debug mode, this cannot be changed.
2022-10-14docs(changelog): edit panes in layoutsAram Drevekenin
2022-10-14feat(layouts): edit panes (#1799)Aram Drevekenin
* feat(layouts): edit panes * style(fmt): rustfmt
2022-10-14docs(changelog): global cwdAram Drevekenin
2022-10-14feat(layouts): global cwd (#1798)Aram Drevekenin
* feat(layouts): allow defining a global cwd * feat(layouts): allow passing global cwd from cli * style(fmt): rustfmt * fix(layouts): error on mixed cwd and pane children
2022-10-13docs(changelog): layout fixesAram Drevekenin
2022-10-13fix(layouts): various kdl layout issues and features (#1797)Aram Drevekenin
* fix(layouts): error on non-bare children node * refactor(layout): consolidate split direction parsing * refactor(layout): remove unused import * fix(layouts): log error when there is no room for layout * fix(layout): error on size 0 * feat(layouts): allow pane templates to override template command attributes * style(fmt): rustfmt
2022-10-13zellij/commands: Prevent recursive sessions (#1766)har7an
* zellij/commands: Prevent recursive sessions with session names specified in layout files. A "recursive session" is created when, while running inside some zellij session, a user attempts to spawn zellij and make it attach to that same session. When attaching via CLI (`zellij attach`) we explicitly check for this condition and error out when needed. However, besides `zellij attach` it is also possible to declare the session to attach to in layout files like so: ```yaml session: name: "foo" ``` This takes a different codepath when starting zellij, and hence bypases the checks we already have in place to avoid recursive sessions. Hence, we implement the check in the other codepath, too, and prevent recursive sessions from happening for good. Fixes: #1735 * changelog: fix recursive zellij sessions
2022-10-12docs(changelog): session-name cli fixAram Drevekenin
2022-10-12fix(cli): use provided session-name (#1793)Aram Drevekenin
2022-10-12docs(changelog): duplicate layout errorsAram Drevekenin
2022-10-12fix(layouts): duplicate layout definition error (#1792)Aram Drevekenin
* fix(layouts): error on duplicate definitions * style(fmt): rustfmt
2022-10-12docs(changelog): move item to the right placeAram Drevekenin
2022-10-12docs(changelog): mixed nodes layout errorAram Drevekenin
2022-10-12fix(layouts): error on mixed nodes (#1791)Aram Drevekenin
* fix(layouts): error on mixed nodes * style(fmt): rustfmt * style(clippy): make clippy happy
2022-10-12fix(tab): frameless pane size wrong after closing other panes (#1776)Thomas Linford
always recompute pane frames after closing a pane
2022-10-12docs(changelog): escapes when converting configsAram Drevekenin
2022-10-12fix(converter): escape quotes (#1790)Aram Drevekenin
2022-10-11docs(changelog): command paneAram Drevekenin
2022-10-11feat(ux): rerun command pane (#1787)Aram Drevekenin
* 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 * get command panes not to exit on command exit * separate terminal pane_ids from raw_fds * render frame according to exit status * re-run command on enter and close pane on ctrl-c * proper error when command is not found * make ui nicer * initial pane title for command panes * fix pane override bug * reap terminal_ids from os_input_output on pane close * bool floating flag * some ui tweaks * fix tests * make rustfmt happy * e2e test for command pane * fix various concurrency issues * rename command to run in the cli * rustfmt * style(fmt): rustfmt * fix(e2e): command => run * fix(e2e): command => run in snapshot too!
2022-10-07changelog: Add PR 1775har7an
which improves error formatting in `server/thread_bus` and removes calls to `unwrap`, too.
2022-10-07zellij-server: improve thread_bus error handling (#1775)Bohdan Ivashko
* zellij-server: improve thread_bus error handling * zellij-server/thread_bus: get rid of option.unwrap * zellij-utils/errors.rs: generic error in to_anyhow
2022-10-06changelog: Add pull 1748har7an
which removes calls to `unwrap` in `zellij_server::tab`.
2022-10-06Server: Remove `panic`s in `tab` module (#1748)har7an
* utils/errors: Add `ToAnyhow` trait for converting `Result` types that don't satisfy `anyhow`s trait constraints (`Display + Send + Sync + 'static`) conveniently. An example of such a Result is the `SendError` returned from `send_to_plugins`, which sends `PluginInstruction`s as message type. One of the enum variants can contain a `mpsc::Sender`, which is `!Sync` and hence makes the whole `SendError` be `!Sync` in this case. Add an implementation for this case that takes the message and converts it into an error containing the message formatted as string, with the additional `ErrorContext` as anyhow context. * server/tab: Remove calls to `unwrap()` and apply error reporting via `anyhow` instead. Make all relevant functions return `Result`s where previously a panic could occur and attach error context. * server/screen: Modify `update_tab!` to accept an optional 4th parameter, a literal "?". If present, this will append a `?` to the given closure verbatim to handle/propagate errors from within the generated macro code. * server/screen: Handle new `Result`s from `Tab` and apply appropriate error context and propagate errors further up. * server/tab/unit: `unwrap` on new `Result`s * server/unit: Unwrap `Results` in screen tests * server/tab: Better message for ad-hoc errors created with `anyhow!`. Since these errors don't have an underlying cause, we describe the cause in the macro instead and then attach the error context as usual before `?`ing the error back up. * utils/cargo: Activate `anyhow`s "backtrace" feature to capture error backtraces at the error origins (i.e. where we first receive an error and convert it to a `anyhow::Error`). Since we propagate error back up the call stack now, the place where we `unwrap` on errors doesn't match the place where the error originated. Hence, the callstack, too, is quite misleading since it contains barely any references of the functions that triggered the error. As a consequence, we have 2 backtraces now when zellij crashes: One from `anyhow` (that is implicitly attached to anyhows error reports), and one from the custom panic handler (which is displayed through `miette`). * utils/errors: Separate stack traces in the output of miette. Since we record backtraces with `anyhow` now, we end up having two backtraces in the output: One from the `anyhow` error and one from the actual call to `panic`. Adds a comment explaining the situation and another "section" to the error output of miette: We print the backtrace from anyhow as "Stack backtrace", and the output from the panic handler as "Panic backtrace". We keep both for the (hopefully unlikely) case that the anyhow backtrace isn't existent, so we still have at least something to work with. * server/screen: Remove calls to `fatal` and leave the `panic`ing to the calling function instead. * server/screen: Remove needless macro which extended `active_tab!` by passing the client IDs to the closure. However, this isn't necessary because closures capture their environment already, and the client_id needn't be mutable. * server/screen: Handle unused result * server/screen: Reintroduce arcane macro that defaults to some default client_id if it isn't valid (e.g. when the ScreenInstruction is sent via CLI). * server/tab/unit: Unwrap new results
2022-10-05docs(changelog): switch config/layout/theme language to KDLAram Drevekenin
2022-10-05feat(config): switch to kdl (#1759)Aram Drevekenin
* 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-04docs(changelog): add darwin dependenciesa-kenji
2022-10-04fix(nix) missing frameworks on darwin (#1724)Mayeul d'Avezac
2022-10-04changelog: mention PR 1770har7an
to improve error handling in screen thread private functions
2022-10-04zellij-server/src/screen: improve error handling (#1770)Bohdan Ivashko
* zellij-server/src/screen: improve error handling * cleanup context vs with_context usage * update error handling docs * zellij-server/src/screen.rs: fix formatting
2022-10-01update: update-rust-toolchain v1 -> v1.1a-kenji
2022-10-01flake.lock: Update (#1761)a-kenji
Flake lock file updates: • Updated input 'crate2nix': 'github:kolloch/crate2nix/198de9f237cb97ad32e0da7fb914b8e8d9fd87b7' (2022-08-29) → 'github:kolloch/crate2nix/17e34c0cf12baaa61abcd00dfecdbde96cef252f' (2022-09-28) • Updated input 'nixpkgs': 'github:nixos/nixpkgs/97747d3209efde533f7b1b28f1be11619f556a06' (2022-08-31) → 'github:nixos/nixpkgs/854fdc68881791812eddd33b2fed94b954979a8e' (2022-09-28) • Updated input 'rust-overlay': 'github:oxalica/rust-overlay/790cf08a011248a881a516cadf125bbc47f1a420' (2022-08-31) → 'github:oxalica/rust-overlay/fa6d41ac91f44ce9a90ca08e7a3ff5abf88e77a1' (2022-09-30) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-10-01build(deps): bump DeterminateSystems/update-flake-lock from 13 to 14 (#1762)dependabot[bot]
Bumps [DeterminateSystems/update-flake-lock](https://github.com/DeterminateSystems/update-flake-lock) from 13 to 14. - [Release notes](https://github.com/DeterminateSystems/update-flake-lock/releases) - [Commits](https://github.com/DeterminateSystems/update-flake-lock/compare/v13...v14) --- 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-09-27Add docs about error handling (#1745)har7an
* docs: Add ERROR_HANDLING that explains how we plan to change error handling in zellij and invites new contributors to join the fun. Details the currently existent error handling capabilities and gives a bunch of examples taken from #1670. * utils/errors: Shorten docblock by moving previous content under "Help Wanted" to the new `docs/ERROR_HANDLING` document and link to the document instead.
2022-09-23Fix: issue 1734 (#1749)har7an
* server/tab: Check suppressed panes when writing to a pane by ID. Previously only the tiled and floating panes would be searched for a pane of a given ID. Fixes: #1734 * server/tab/unit: Test writing to suppressed panes * docs: fix server panics when writing to suppressed panes
2022-09-15test: simplify tab integration tests (#1728)Thomas Linford
* wip * refactor existing tests * rename methods
2022-09-14Don't send the server an exit signal when client panics (#1731)raphCode
* Don't send the server an exit signal when client crashes * Update changelog
2022-09-09docs(changelog): error handling in screenhar7an
2022-09-09Feature: Better error handling/reporting (#1670)har7an
* utils: re-export "anyhow" unconditionally even for wasm targets. * utils/errors: Share wasm-compatible code and move everything that can't run in wasm into a separate submodule. * utils: Share "errors" module unconditionally The module is now structured such that all code incompatible with wasm targets lives in its own submodule that isn't included when compiling for wasm targets. * utils/errors: Add "Help wanted" doc section that informs the reader about the endeavour to improve error handling throughout the zellij code base. * plugins: Handle errors returned by `zellij_tile` now that the panic calls have been removed. * utils/errors: Extend `anyhow::Result` with traits that allow for easy/concise logging of `anyhow::Result` types and panicking the application when they are fatal or non-fatal. * utils/errors: Fix doctest * utils/errors: Add prelude that applications can import to conveniently access the error handling functionality part of the module. Re-exports some parts and macros from anyhow and the `LoggableError` and `FatalError` traits. * server/screen: Adopt error handling and make all fallible functions from the public API return a `Result`. Append error contexts in all functions that can come across error types to allow tracing where an error originates and what lead there. * server/lib: Catch errors from `screen` and make them `fatal`. This will log the errors first, before unwrapping on the error type and panicking the application. * server/unit/screen: Fix unit tests and unwrap on the `Result` types introduced from the new error handling. * utils/errors: Track error source in calls to `fatal`, so we keep track of the location where the panic really originates. Otherwise, any call to `fatal` will show the code in `errors` as source, which of course isn't true. Also change the error formatting and do not call `to_log` for fatal errors anymore, because the panic is already logged and contains much more information. * utils/errors: Update `FatalError` docs * plugins: Undo accidental modifications * utils/errors: Improve module docs explain some error handling facilities and the motivation behind using them. * server/screen: Remove `Result` from Infallible functions that are part of the public API.
2022-09-09chore(version): bump development versionAram Drevekenin
2022-09-09chore(release): v0.31.4v0.31.4Aram Drevekenin
2022-09-09docs(changelog): multiple users ui-cursor fixAram Drevekenin
2022-09-09fix(ui): sort multiple ui cursors (#1719)Aram Drevekenin
* fix(ui): stable-sort multiple ui cursors * style(clippy): make clippy happy
2022-09-09docs(changelog): tab-bar mouseclick fixAram Drevekenin