| Commit message (Collapse) | Author | Age |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* initial implementation
* fix mouse cpu spam
* prevent excess metadata write and prune sessions on startup
* consolidate CommandChanged and PaneCommandChanged
* tests
* rustfmt
* add pr
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
platform-split PTY backend (#4722)
* refactor: replace RawFd with i32 in debug_to_file
Replace the Unix-specific RawFd type with plain i32 in the debug_to_file
infrastructure. This removes the last RawFd usage from the cross-crate
debug logging API, making it platform-independent.
* refactor: cross-platform PTY abstraction with AsyncFd
Replace portable-pty with native openpty and introduce a platform-split
architecture for PTY operations:
- os_input_output_unix.rs: UnixPtyBackend with native openpty, AsyncFd-based
epoll reader (no spawn_blocking per pane), signal handling via nix
- os_input_output_windows.rs: WindowsPtyBackend stubs (unimplemented)
- os_input_output.rs: shared ServerOsApi trait, ServerOsInputOutput composes
PtyBackendImpl, build_command() extracts TerminalAction→RunCommand logic
Key changes:
- AsyncFd<File> replaces both tokio::fs::File (upstream) and spawn_blocking
SyncReadAsyncReader (previous port) for zero-overhead epoll PTY reads
- orig_termios restored: openpty(None, &orig_termios) passes parent's VERASE
- ServerOsApi returns Box<dyn AsyncReader> instead of Box<dyn Read + Send>
- TerminalBytes::new takes Box<dyn AsyncReader> directly
- NullAsyncReader replaces std::io::empty() for held panes
- Platform modules gated with #[cfg(not(windows))] / #[cfg(windows)]
- Removed portable-pty dependency, restored close_fds
- Added tokio "net" feature for AsyncFd
---------
Co-authored-by: divens <divens.dev@gmail.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* build(utils): Replace `async_std` with `tokio`
removing an entire async runtime from the dependency tree. `tokio` has
previously been required by `wasmtime` in any case, and the version of
async_std we used was ancient (1.3) and relied on unstable features.
* build(server): Remove `async_std` from the codebase
and replace it with `tokio` instead, which is already used by
`zellij-utils` and `wasmtime`.
* build(server): Remove dead dependency.
* fix: Don't keep an async runtime in the `zellij-utils` subcrate
but prefer to reuse an existing runtime from a caller instead. If no
such runtime exists, create an ephemeral runtime on the current thread
to run async tasks instead. Ideally, the functions needing the async
task would be async themselves, but these are called by the `Layout`
code based on a `ClientMsg`, and the code handling this currently lives
in `zellij-utils` and is sync itself. So, for the time being, there is
no way around this runtime requirement without a huge refactoring.
* refactor(server): Unclutter async tasks
in a few cases where either blocking code was called in an (unnecessary)
async task or an entire thread was spawned to block on the result of an
async task.
* docs(CHANGELOG): Mention PR 4672
* fix(server): Don't terminate when killing a panes children fails
but log the error and continue instead.
* feat: Add config option for number of async tasks to spawn
so users on machines with few resources can configure a task limit
without requiring recompilation.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and introducing repaint_delay (#4100)
* initial draft
* style(comment): add explanation to async render
* remove timeouts from terminal_bytes
* some cleanups
* cleanups
* chore(docs): update pr
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* build(utils): Don't use reexported dependency
for internal code, but use the dependency directly.
* build(client): Don't use re-exports from `utils`
but turn `zellij-utils` dependencies into shared workspace dependencies
instead and specify those in `Cargo.toml` explicitly. This gives a much
better overview of what component in zellij uses which crates. The
previous approach hides a lot of this information since it looks like
crates are used in a single place where this isn't actually true.
* deps(tile): Don't use re-exports from zellij-utils.
* build(zellij): Don't use re-exports from zellij-utils.
* build(server): Don't use re-exports from zellij-utils.
* build(utils): Don't re-export foreign crates.
* docs: Update Changelog with PR #4087.
* style: Apply rustfmt.
* style: Apply rustfmt.
* build(e2e): Don't use re-export from zellij-utils.
* test: Restore e2e tests.
* style: Apply more formatting.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* chore(cargo): Update dependencies
for xtask subcommand to remove warnings about unknown compiler
attributes.
* deps(xtask): Remove `lazy_static`
as dependency, since the code we need can now be expressed using rusts
`std` builtin types.
* fix(xtask): Hide deprecated args
so the compiler doesn't complain about dead code any more.
* fix(xtask): Remove needless borrow.
* fix: Remove dead code
across the codebase, as discovered by the rust compiler.
* fix(server): Log previously ignored errors.
* fix(xtask): Remove needless `format!` calls.
* fix(xtask): Remove superfluous return statement.
* fix(client): Remove unused enum variant
from `ClientInstruction` and all code attached to it.
* fix(server): Restore functions needed in tests.
* chore: Apply rustfmt.
* fix(server): Add missing code.
* fix: Remove leftover warnings.
* CHANGELOG: Add MR #4026.
* fix(xtask): Pin `xshell` to version 0.2.2
because release 0.2.3 changed the way stdin is handled, breaking
interactive command invocations (such as we use).
|
| |
|
| |
This reverts commit 9f900a7325304a06d9e0913a8e661d7bbc86ad04.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* chore(cargo): Update dependencies
for xtask subcommand to remove warnings about unknown compiler
attributes.
* deps(xtask): Remove `lazy_static`
as dependency, since the code we need can now be expressed using rusts
`std` builtin types.
* fix(xtask): Hide deprecated args
so the compiler doesn't complain about dead code any more.
* fix(xtask): Remove needless borrow.
* fix: Remove dead code
across the codebase, as discovered by the rust compiler.
* fix(server): Log previously ignored errors.
* fix(xtask): Remove needless `format!` calls.
* fix(xtask): Remove superfluous return statement.
* fix(client): Remove unused enum variant
from `ClientInstruction` and all code attached to it.
* fix(server): Restore functions needed in tests.
* chore: Apply rustfmt.
* fix(server): Add missing code.
* fix: Remove leftover warnings.
* CHANGELOG: Add MR #4026.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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
|
| |
|
|
|
|
|
|
|
| |
* server/terminal_bytes: Don't unwrap
and return `Result`s instead, where appropriate.
* changelog: Add PR #1876
Don't unwrap in `zellij_server::terminal_bytes`.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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!
|
| |
|
|
|
| |
* performance(pty): update last render time on non-backed-up render
* performance(pty): ignore deadline if not backed up
|
|
|
* performance(pty): only buffer terminal bytes when screen thread is backed up
* style(fmt): rustfmt
|