* Switch to multi-valued mouse buttons and stub for remembering old mouse button state
* Stubs for passing all mouse events from user-facing terminal to server
side terminal(s) in, including protobuf.
Removed "held" mouse actions.
Currently commented out calls to left/middle/right-click/release --
need to fix this though, as selection/copy-paste are broken too.
cargo build/test/run works OK.
cargo xtask build/test/run fails, unable to find crate input::mouse.
* 'cargo xtask build' working using refactored functions.
* fix(plugins): various cwd fixes (#3545)
* fix(plugins): various cwd fixes
* fix tests
* docs(changelog): floating_panes cwd fix
* feat(plugins): rerun_command_pane API (#3546)
* feat(plugins): rerun_command_pane API
* fix tests
* docs(changelog): rerun command pane plugin API
* feat(plugins): command pane re-run event (#3553)
* docs(changelog): CommandPaneReRun plugin event
* feat(ux): first run setup-wizard (#3556)
* separate saved/runtime structure, kind of working
* serializing config
* work
* work
* save config through the configuration screen
* work
* startup wizard
* style(code): cleanups
* fix(session): reload config from disk when switching sessions
* style(fmt): rustfmt
* fix(config): propagate cli config options to screen
* style(fmt): rustfmt
* docs(changelog): first run setup wizard
* feat(ux): reload config at runtime (#3558)
* feat(ux): reload config at runtime
* style(fmt): rustfmt
* docs(changelog): reload config at runtime
* feat(ux): change themes at runtime (#3559)
* docs(changelog): change themes at runtime
* feat(plugins): API to temporarily bind keys to send a message to a specific plugin id (#3561)
* docs(changelog): message to specific plugins API
* feat(ux): reload config options at runtime (#3564)
* change simplified_ui at runtime
* change default_shell at runtime
* change pane_frames (from config) at runtime
* all other options
* some refactoring
* style(fmt): rustfmt
* docs(changelog): reload config options at runtime
* feat(plugins): add plugin APIs to affect other panes (#3576)
* resize_pane_with_id and close_pane_with_id
* focus_pane_with_id and edit_scrollback_for_pane_with_id
* write_to_pane_id and write_chars_to_pane_id
* lots more commands
* style(fmt): rustfmt
* docs(changelog): new plugin apis
* docs(readme): update sponsors
* feat(plugins): APIs to break multiple panes into a new tab or an existing tab (#3610)
* feat(plugins): break multiple panes to a new tab
* fix(layouts): properly ignore run instructions when breaking panes
* feat(plugins): break multiple panes to existing tab
* feat(apis): allow these methods to also specify whether they want focus changed to the tab
* various fixes
* allow specifying name for the new tab when breaking out panes
* style(fmt): rustfmt
* docs(changelog): break multiple panes APIs
* feat(config): allow loading background plugins on startup (#3616)
* remove old partial implementation
* feat(plugins): allow loading background plugins on startup
* add e2e test
* update config
* udpate config merging
* style(fmt): rustfmt
* docs(changelog): background plugins
* feat(ui): built-in plugin manager (#3633)
* add plugin list to session info
* feat(plugins): new_plugin and reload_plugin API commands
* feat(plugins): built-in plugin manager
* style(fmt): rustfmt
* update plugins
* docs(changelog): plugin-manager
* fix(resurrection): various serialization issues (#3636)
* fix(serialization): use kdl-rs for serialization
* style(fmt): remove dead code
* tests(serialization): update snapshots
* style(fmt): rustfmt
* docs(changelog): resurrection fixes
* fix(http): web requests (#3643)
* docs(changelog): http fix
* feat(cli): make --layout idempotent(-ish) (#3650)
* feat(cli): if inside a session, apply --layout to the session
* fix(screen): some focusing races when switching tab focus
* style(fmt): rustfmt
* docs(changelog): improve --layout flag
* fix(plugins): handle race when setting plugin selectable (#3651)
* docs(changelog): plugin selectable race
* feat(cli): show CACHE_DIR in `zellij setup --check` (#3652)
* docs(changelog): add cache dir to setup
* fix(ui): various pane name fixes (#3653)
* docs(changelog): pane name fixes
* fix(ux): only damage the relevant swap layout layer when resizing panes (#3654)
* docs(changelog): swap layout damage fix
* fix(ui): set background color for UI components according to theme (#3658)
* docs(changelog): ui component fix
* fix(tab): recover from crash when resizing panes (#3659)
* chore(git): Add plugin’s issue templates (#3621)
Co-authored-by: Zykino <3809938+Zykino@users.noreply.github.com>
* fix(ux): make sure esc works as expected in unlock-first (#3660)
* fix(ux): make sure esc always drops us back to base mode
* fix(ux): add locked
* fix(plugins): handle concurrent http downloads (#3664)
* docs(changelog): concurrent http plugin downloads
* fix(plugins): various plugin api and other fixes (#3665)
* fix(plugins): do not allow focusing an unselectable pane
* fix(folders): make sure config and cache folders exist on app start
* docs(changelog): plugin fixes
* fix(plugins): force use curl system lib on macOS (#3668)
* docs(changelog): fix http requests for macos
* fix(resurrection): plugin alias resurrection (#3673)
* fix(resurrection): make sure plugin aliases are serialized properly
* style(fmt): rustfmt
* docs(changelog): resurrection alias fix
* fix(plugins): do not allow attaching to the same session (#3674)
* docs(changelog): fix plugins attaching to same session
* fix(plugins): allow switching to a new session with cwd without specifying a layout (#3676)
* docs(changelog): switch_session_with_cwd plugin api
* fix(config): watch/update config given with --config when appropriate (#3678)
* docs(changelog): reload config flag fix
* feat(plugins): rebind keys api (#3680)
* feat(plugins): add API to explicitly unbind/rebind specific keys in specific modes
* style(fmt): rustfmt
* docs(changelog): rebind keys plugin api
* fix(client): repeat retry screen instruction (#3570)
* docs(changelog): sixel fix
* feat(ui): rebind keys UI (#3686)
* rebind action working
* functional ui
* responsive ui
* some refactoring
* properly reset ui state
* minor fixes
* style(fmt): rustfmt
* style(fmt): remove dead code
* chore(deps): update to Wasmtime 21.0.2 (#3685)
This fixes a race condition which causes occasional crashes and may
enable a sandbox escape:
<https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-7qmx-3fpx-r45m>
* docs(changelog): wasmtime patch upgrade
* feat(plugins): add API to list clients, their focused panes and running commands/plugins (#3687)
* fix(list-clients): properly show client info after a tab was closed
* feat(plugins): add API to list clients, their focused panes and running commands/plugins
* style(fmt): rustfmt
* docs(changelog): list-clients plugin api
* docs(changelog): rebind keys UI
* feat(ui): bring back fullscreen indication (#3688)
* feat(ui): bring back fullscreen indication
* fix e2e tests
* docs(changelog): bring back fullscreen indication
* fix(ux): new interface/configuration touch-ups (#3691)
* fix(ui): copy to clipboard in new ui
* fix(ux): allow navigating out of scrolled pane
* style(fmt): rustfmt
* docs(changelog): ui touch-ups
* fix(plugins): rebind insert (#3692)
* fix(tab): recover from closing a pane outside the viewport
* remap insert in plugin manager
* fix(plugins): remap insert key
* style(fmt): rustfmt
* docs(changelog): insert rebind
* fix(plugins): make sure to always render on first resize (#3693)
* fix(plugins): make sure to always render on first resize
* style(fmt): rustfmt
* fix tests
* docs(changelog): plugins first-render fix
* fix(terminal): recover from partial line drop (#3695)
* docs(changelog): grid fix
* fix(configuration): leave notification up when base mode changes (#3696)
* fix(layouts): suspend commands in remote layouts (#3697)
* fix(layouts): suspend commands in remote layouts
* style(fmt): rustfmt
* docs(changelog): suspend commands in remote layouts
* feat(plugins): add configurable black background for ui components (#3681)
* feat(plugins): add transparent background for text and nested_list
* chore: fix formatting issue
* feat: invert flag behaviour
* feat: implement bg_black handling for table cells
* fix: order of selected and bg_black in protocol
* chore: rename from bg_black to opaque
* fix: explicit selected, if opaque and selected for text
* chore: fix formatting issues
* feat: opaque tab-bar
* feat: opaque session-manager bars
* feat: opaque ribbon in plugin manager
* feat: opaque one-line ui
* feat: opaque tab-bar in configuration plugin
* style(fmt): various cleanups (#3698)
* fix(configuration): rounding error in ui
* style(fmt): remove warnings
* style(fmt): rustfmt
* docs(changelog): ui components bg fix
* feat(theme): add theme ao (#3478)
* feat(themes): add atelier sulphurpool theme (#3596)
* feat(themes): added ayu mirage, light, and dark themes (#3567)
Co-authored-by: Evan Lauer <evanlauer@u.boisestate.edu>
* feat(themes): add Vesper theme (#3443)
* feat(themes): add night-owl theme (#3393)
Co-authored-by: Bruno Mesquita <bmesquita@atlassian.com>
* feat: add iceberg dark/light themes (#3323)
* theme: add onedark theme to the available themes (#3313)
Onedark is a popular theme from Atom text editor.
I've used these sources as the reference for implementing the theme in zellij.
https://github.com/joshdick/onedark.vimhttps://www.figma.com/community/file/1137445418485757476/atom-one-dark-color-palette
* feat(themes): add basic ANSI theme (#3308)
* fix(theme): fix for gruvbox light and dark (#3255)
the previous themes do not have the correct colors and aren't great
for the eyes. when selecting e.g. to copy text, it uses
red for light theme and the same bg for dark theme.
the previous light theme is not even a light theme so I also
fixed that as well.
Signed-off-by: Soc Virnyl Estela <contact@uncomfyhalomacro.pl>
* feat(themes): create lucario.kdl (#3030)
* docs(changelog): new themes
* style(fmt): remove warnings (#3701)
* fix: (tabs) move to next tab if moving to next pane from fullscreen pane (#3498)
Co-authored-by: Vasilis Manolopoulos <vmanolop@gmail.comh>
* docs(changelog): MoveFocusOrTab fullscreen awareness
* docs(readme): add https to curl download
* fix(ux): configuration fixes (#3713)
* fix(startup): try create config folder if it doesn't exist
* fix(configuration): tab bar ui
* fix(configuration): rebind ctrl-s to ctrl-a
* fix(configuration): remove extra rebinding leaders screen
* docs(changelog): configuration fixes
* fix(ux): forward keys to pane in locked mode and base mode rather than hard-coded normal mode (#3715)
* fix(keybindings): only forward clear keys in locked mode and default mode
* style(fmt): rustfmt
* docs(changelog): base mode keybindings fix
* chore(release): v0.41.0
* HOTFIX: default plugins generic compilation issue
* HOTFIX: patch version
* chore(release): v0.41.1
* chore(repo): bump development version
* fix(input): remove support for extra modifiers (#3725)
* docs(changelog): kitty input fix
* fix(input): refix ctrl-j (#3746)
* fix(input): refix ctrl-j
* fix e2e tests
* docs(changelog): refix ctrl-j
* fix(plugins): cwd and usability fixes (#3749)
* fix(plugins): maintain cwd between plugin reloads
* fix(plugin-manager): default to loading plugins in the foreground and allow sending space in configuration
* docs(changelog): plugin fixes
* fix(output-buffer): truncate grid height when not rendering it fully (#3750)
* fix(output-buffer): truncate grid height when not rendering it fully
* also fix for cases where the changed lines are not contiguous
* docs(changelog): output-buffer fix
* fix(tabs): maintain event order for MoveTab (#3758)
* fix(tabs): maintain event order for MoveTab
* style(fmt): rustfmt
* docs(changelog): event ordering fix
* fix(plugins): do not open extra instances of aliases (#3759)
* docs(changelog): do not duplicate built-in plugins
* fix(terminal): reset kitty keyboard support when resetting terminal state (#3760)
* docs(changelog): kitty reset fix
* fix(config): crash if unable to watch config folder (#3761)
* docs(changelog): config dir crash fix
* fix(statup): slow startup on some occasions (#3767)
* add debug logs
* add log messages
* some more logs and possible fix?
* remove logs
* style(fmt): rustfmt
* remove comment
* docs(changelog): occasional slow startup fix
* fix(panes): handle various invalid state situations (#3776)
* docs(changelog): invalid state handling
* chore: add vendored_curl feature (#3766)
* docs(changelog): vendored curl option
* fix(ux): change plugin manager shortcut (#3779)
* docs(changelog): shortcut change
* fix(screen): send PaneClosed event to plugins also when closing the whole tab (#3781)
* docs(changelog): pane-closed event
* feat(plugins): add /cache folder (#3787)
* feat(plugins): add /cache folder
* style(fmt): rustfmt
* docs(changelog): plugin cache folder
* docs(changelog): plugin cache folder url
* chore(package): vendor common_path (#3780)
* vendoring common_path
* add original license to common_path
* Clarify license scope
* refactor: remove rand dependency
---------
Co-authored-by: Aram Drevekenin <aram@poor.dev>
* docs(changelog): vendor common_path
* fix(plugins): derive hash and ord for PaneId (#3790)
* docs(changelog): derive hash and ord for paneid
* style(fmt): remove warnings
* chore(version): set patch version
* chore(release): v0.41.2
* chore(repo): bump development version
* chore(repo): fix typo in lock file
* fix(plugins): properly focus pane after tab was closed (#3797)
* fix(plugins): properly focus pane after tab was closed
* style(fmt): rustfmt
* docs(changelog): focus_pane_with_id fix
* fix(plugins): properly pad UI elements when they have a background (#3806)
* fix(plugins): mark selected background up until component width
* style(fmt): rustfmt
* docs(changelog): ui component padding
* feat(plugins): allow changing the plugin's `/host` folder (under a new permission) (#3827)
* working without notifying plugins
* permissions and events
* cleanups and formatting
* style(fmt): rustfmt
* docs(changelog): allow plugins to change host folder
* chore(repo): add funding.json (#3838)
* chore(repo): add funding.json
* update funding json url
* fix(plugins): do not detach if using a slash in a session name (#3839)
* docs(changelog): slash detach fix
* fix(plugins): properly focus plugin after it was hidden (#3841)
* docs(changelog): plugin hidden focus fix
* fix(screen): off by 1 error when focusing layout tab (#3844)
* docs(changelog): layout tab focus fix
* fix(multiuser): properly clear fake cursors (#3845)
* docs(changelog): multiplayer cursor fix
* feat(ux): pin floating panes (#3876)
* working
* ui indication
* add keybinding
* add to plugin panes
* fix with multiple cursors
* toggle with the mouse
* fix e2e tests and add new one
* some cleanups
* add to layouts
* make mouse click more lenient
* allow setting a new floating pane as pinned
* make toggle work throughthe command line
* add to plugin api
* get tests to pass
* style(fmt): rustfmt
* docs(changelog): pin floating panes
* fix(layout-applier): logical index pane sorting (#3893)
* initial draft
* working with floating panes as well
* use the same method for applying an initial layout to tiled panes
* some refactoring
* all code paths working with logical positioning fallback!
* get tests to compile
* get e2e tests to pass
* fix e2e remote runner
* breadth-first layout sorting
* fix some bugs
* style(fmt): rustfmt
* style(fmt): remove comments
* docs(changelog): logical index pane sorting
* fix(terminal): mode 2026 feature detection response (#3884)
The response to the 2026 mode query was missing a `?` character.
The response should be of the format `CSI ? 2026 ; N $ y` where N can
be any value in the range 0-4 inclusive.
References:
https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036https://vt100.net/docs/vt510-rm/DECRPM.html
* docs(changelog): synchronized rendering query response
* fix(terminal): cursor overflow (#3894)
* docs(changelog): cursor overflow fix
* fix(ux): make the Zellij mouse interaction work
* fix(rendering): only render if selection/floating-pane position was changed
* do not clear copied to clipboard message on mouse motion
* various functionality fixes
* fix tests
* fixes and cleanups
* style(fmt): rustfmt
* fix(mouse): only report state to plugins when it changed
* fix(plugins): send mouse clicks to inactive panes
* tests: any event tracking in panes
* style(fmt): rustfmt
* style: remove unused stuff
---------
Signed-off-by: Soc Virnyl Estela <contact@uncomfyhalomacro.pl>
Co-authored-by: Autumn Lamonte <AutumnWalksTheLake@gmail.com>
Co-authored-by: Aram Drevekenin <aram@poor.dev>
Co-authored-by: Zykino <Zykino@users.noreply.github.com>
Co-authored-by: Zykino <3809938+Zykino@users.noreply.github.com>
Co-authored-by: Daniel Jankowski <Daniel.Jankowski@rub.de>
Co-authored-by: Manuel de Prada Corral <6536835+manueldeprada@users.noreply.github.com>
Co-authored-by: bjorn3 <17426603+bjorn3@users.noreply.github.com>
Co-authored-by: Michael Jones <yardquit@pm.me>
Co-authored-by: carl <44021312+achristmascarl@users.noreply.github.com>
Co-authored-by: Evthestrike <62308745+Evthestrike@users.noreply.github.com>
Co-authored-by: Evan Lauer <evanlauer@u.boisestate.edu>
Co-authored-by: Rafael Bardini <rbardini@users.noreply.github.com>
Co-authored-by: Bruno Mesquita <brunocmesquita@gmail.com>
Co-authored-by: Bruno Mesquita <bmesquita@atlassian.com>
Co-authored-by: Chromo-residuum-opec <x@matte.fyi>
Co-authored-by: Shone Binu <62597277+shonebinu@users.noreply.github.com>
Co-authored-by: Mike Greiling <mike@pixelcog.com>
Co-authored-by: Soc Virnyl S. Estela <socvirnyl.estela+github@uncomfyhalomacro.pl>
Co-authored-by: Eric Raio <43896+ericraio@users.noreply.github.com>
Co-authored-by: Vasileios Manolopoulos <44965914+VasilisManol@users.noreply.github.com>
Co-authored-by: Vasilis Manolopoulos <vmanolop@gmail.comh>
Co-authored-by: tranzystorekk <tranzystorek.io@protonmail.com>
Co-authored-by: s1syph0s <34000276+s1syph0s@users.noreply.github.com>
Co-authored-by: Darren Burns <darrenburns@users.noreply.github.com>
* refactor(server): interpret keys on server so they can be rebound
* feat(plugins): allow rebinding keys at runtime
* various cleanups
* add tests
* style(fmt): rustfmt
* fix(tests): address (some) e2e test flakiness
* style(fmt): rustfmt
* parse kitty keys from STDIN
* work
* work
* replace internal Key representation with the new KeyWithModifier in all the places
* work
* work
* allow disabling with config
* adjust ordering
* handle enabling/disabling properly on the client
* support multiple modifiers without kitty too
* normalize uppercase keys
* get tests to pass
* various cleanups
* style(fmt): rustfmt
* feat: add moving tab to other position
* docs(changelog): revert changes
* test: update config snapshots
* refactor: get rid of HorizontalDirection enum
* refactor: cleanup code order
* refactor: use debug! instead of info!
* refactor: use more defensive way to switch tabs
* refactor: revert tip changes
* refactor: code formatting
* refactor: improve invalid input notification
* refactor: inline fns for calculating target index
---------
Co-authored-by: Jae-Heon Ji <atx6419@gmail.com>
* prototype
* fix tests
* add to all the things except plugins
* add in-place to plugin commands
* fix launch-or-focus should_float and in place behavior
* various cleanups
* style(fmt): rustfmt
* write/read session metadata to disk for all sessions
* switch session client side
* fix tests
* various adjustments
* fix full screen focus bug in tiled panes
* fix tests
* fix permission sorting issue
* cleanups
* add session manager
* fix tests
* various cleanups
* style(fmt): rustfmt
* clear screen before switching sessions
* I hate you clippy
* truncate controls line to width
* version session cache
* attempt to fix plugin tests
* style(fmt): rustfmt
* another attempt to fix the tests in the ci
* 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
* 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
* 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
* Let the exit message be different when detaching
This patch changes the exit message printed to the user, so the user
does not get the impression that they fat-fingered an "exit" instead of
what was intended (a detach).
For this, the InputHandler::exit() function was refactored, to get the
reason as a parameter. As this function is not pub, this is considered
okay.
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
* Change detach message
This patch changes the detach message to be more in line with the other
messages zellij displays to the user.
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
* work
* work
* work
* work
* work
* more work
* work
* work
* work
* hack around stdin repeater
* refactor(sixel): rename sixel structs
* feat(sixel): render text above images
* fix(sixel): reap images once they're past the end of the scrollbuffer
* fix(sixel): display images in the middle of the line
* fix(sixel): render crash
* fix(sixel): react to SIGWINCH
* fix(sixel): behave properly in alternate screen mode
* fix(sixel): reap images on terminal reset
* feat(sixel): handle DECSDM
* fix(terminal): properly respond to XTSMGRAPHICS and device attributes with Sixel
* Add comment
* fix(sixel): hack for unknown event overflow until we fix the api
* feat(input): query terminal for all OSC 4 colors and respond to them in a buggy way
* fix(sixel): do not render corrupted image
* feat(input): improve STDIN queries
* fix(client): mistake in clear terminal attributes string
* fix(ansi): report correct number of supported color registers
* fix(sixel): reap images that are completely covered
* style(comment): fix name
* test(sixel): infra
* test(sixel): cases and fixes
* fix(sixel): forward dcs bytes to sixel parser
* refactor(client): ansi stdin parser
* refactor(output): cleanup
* some refactorings
* fix test
* refactor(grid): sixel-grid / sixel-image-store
* refactor(grid): grid debug method
* refactor(grid): move various logic to sixel.rs
* refactor(grid): remove unused methods
* fix(sixel): work with multiple users
* refactor(pane): remove unused z_index
* style(fmt): prepend unused variable
* style(fmt): rustfmt
* fix(tests): various apis
* chore(dependencies): use published version of sixel crates
* style(fmt): rustfmt
* style(fmt): rustfmt
* style(lint): make clippy happy
* style(lint): make clippy happy... again
* style(lint): make clippy happy... again (chapter 2)
* style(comment): remove unused
* fix(colors): export COLORTERM and respond to XTVERSION
* fix(test): color register count
* fix(stdin): adjust STDIN sleep times
* zellij-tile: Move `data` to zellij-utils
The rationale behind this is that all components of zellij access the
data structures defined in this module, as they define some of the most
basic types in the application. However, so far zellij-tile is treated
like a separate crate from the rest of the program in that it is the
only one that doesn't have access to `zellij-utils`, which contains a
lot of other data structures used throughout zellij.
This poses issues as discussed in
https://github.com/zellij-org/zellij/pull/1242 and is one of the reasons
why the keybindings in the status bar default plugin can't be updated
dynamically. It is also the main reason for why the keybindings are
currently passed to the plugin as strings: The plugins only have access
to `zellij-tile`, but since this is a dependency of `zellij-utils`, it
can't import `zellij-utils` to access the keybindings.
Other weird side-effect are that in some places `server` and `client`
have to access the `zellij-tile` contents "through" `zellij-utils`, as
in `use zellij_utils::zellij_tile::prelude::*`.
By moving these central data structures to one common shared crate
(`zellij-utils`), `zellij-tile` will be enabled to import `zellij-utils`
like `screen` and `client` already do. This will, next to other things,
allow dropping a lot of `std::fmt::Fmt` impls needed to convert core
data structures into strings and as a consequence, a lot of string
parsing in the first place.
* utils: Integrate new `data` module, bump rust ver
Integrates the `data` module that was previously part of `zellij-tile`
to allow sharing the contained data structures between all components of
zellij.
This allows `zellij-tile` to use `utils` as a dependency. However, since
`tile` is build against the wasm target, it cannot include all of
`zellij-utils`, since a lot of dependencies there cannot compile with
`wasm` as target (Examples include: termwiz, log4rs, async-std). Thus we
make all the dependencies that cannot compile against `wasm` optional
and introduce a new feature `full` that will compile the crate with all
dependencies. Along with this, modify `lib.rs` to include most of the
data structures only when compiling against the `full` feature.
This makes the compiles of `zellij-tile` lighter, as it doesn't include
all of `utils`. As a side effect, due to the dependency notation for the
optional dependencies (See
https://doc.rust-lang.org/cargo/reference/features.html#optional-dependencies),
we bump the rust toolchain version to 1.60.0.
* tile: Import `data` from zellij-utils
Add `zellij-utils` as a dependency to `zellij-tile` and allow us access
to the `data` module defined there. Update the re-export in the
`prelude` such that from all of the plugins points of view *absolutely
nothing changes*.
* utils: Fix `data` module dependency
Since the `data` module has been migrated from `zellij-tile` to
`zellij-utils`, we import it from `zellij-utils` directly now.
Also unify the imports for the `data` module members: We import all of
the through `data::` now, not through a mixture of `data::` and
`prelude::`.
* client: Fix `data` module dependency
Since the `data` module has been migrated from `zellij-tile` to
`zellij-utils`, we import it from `zellij-utils` directly now.
Also unify the imports for the `data` module members: We import all of
the through `data::` now, not through a mixture of `data::` and
`prelude::`.
Add the "full" feature flag to the `zellij-utils` dependency so it
includes all the components we need.
* server: Fix `data` module dependency
Since the `data` module has been migrated from `zellij-tile` to
`zellij-utils`, we import it from `zellij-utils` directly now.
Also unify the imports for the `data` module members: We import all of
the through `data::` now, not through a mixture of `data::` and
`prelude::`.
Add the "full" feature flag to the `zellij-utils` dependency so it
includes all the components we need.
* tests: Fix `data` module dependency
Since the `data` module has been migrated from `zellij-tile` to
`zellij-utils`, we import it from `zellij-utils` directly now.
* utils: Remove "full" feature
in favor of conditional compilation using `target_family`. Replace the
rust 1.60 method of specifying optional dependencies based on features
and optionally include the dependencies only when not building for wasm
instead. (I.e. `cfg(not(target_family = "wasm"))`)
* cargo: Update module dependencies
since `client`, `server` and `tile` now all depend on `utils` only.
* feat: add capability to dispatch actions from cli
Add capability to dispatch actions from the cli.
Can be invoked through `zellij action [actions]`
Automatically sends the action either to the current session,
or if there is only one session to the single session.
If there are multiple sessions, and no session is specified it will
error out.
Example:
1.
```
zellij action "[NewTab: , NewTab: ]"
```
2.
```
zellij -s fluffy-cat action '[NewPane: , WriteChars: "echo Purrr\n" ]'
```
3.
```
zellij -s fluffy-cat action '[ CloseTab, ]
```
* add: error message on malformed input
Add an error message on malformed input, for the `action`'s dispatch.
Rather than resulting in a panic.
* add: function to query the client id
* add: send specific actions to certain clients
Adds ability to send actions, that don't impact the server state
to all connected clients. For example `MoveFocus`
* add: client_id to non blocking actions
* chore(fmt): `cargo fmt`
* add: pick correct session, if there is exactly one
* add: use correct `client_id` for detach action
* add: make `[ ]` opaque to the user
* add: miette to toplevel to improve error message
* add: fake client reading configuration
Add the fake client reading configuration files,
this allows actions, that rely on configuration work
correctly. This is an intermediate solution, and should ideally not
be needed. It would be better if most of this state would be handled
by the server itself.
* chore(fmt): rustmt
* add: ability to detach multiple clients
Add ability to detach multiple clients at the same time.
* remove: obsolete functionality
* remove: unused functionality
* add: send correct action upon exiting
* chore(update): cargo update
* feat(signals): get pixel info from terminal emulator
* feat(signals): query for pixel info on sigwinch
* feat(signals): reply to csi 14t and csi 16t
* style(fmt): rustfmt
* style(comments): remove outdated
* fix(options): handling ond verwriting cli opts
* previously it was only possible to turn off certain features with a
command line option, now it is possible to also overwrite this
behavior in a sane way, for that some breaking changes happened:
following options got renamed and inverted:
```
disable_mouse_mode -> mouse_mode
no_pane_frames -> pane_frames
```
following cli options got added:
```
mouse-mode [bool]
pane-frames [bool]
simplified-ui [bool]
```
the following cli flag got removed:
```
simplified-ui
```
They can be specified in the following way:
```
zellij options --mouse-mode true
```
in order to enable the mouse mode, even if it is turned off in the
config file:
```
mouse_mode: false
```
The order is now as follows:
1. corresponding flag (`disable-mouse-mode`)
2. corresponding option (`mouse-mode`)
3. corresponding config option (`mouse_mode`)
* add: options and flags for the same value conflict
* example:
```
zellij options --mouse-mode true --disable-mouse-mode`
```
```
$ error: The argument '--mouse-mode <mouse-mode>' cannot be used with '--disable-mouse-mode'
```
add the ability to toggle boolean options with a cli flag:
example:
if the pane frames are turned off in the config file,
then passing in the `--no-pane-frames` flag will toggle the
pane frames on
* feat(sessions): mirrored sessions
* fix(tests): input units
* style(fmt): make rustfmt happy
* fix(tests): make mirrored sessions e2e test more robust
* refactor(sessions): remove force attach
* style(fmt): rustfmtify
* docs(changelog): update change
* fix(e2e): retry on all errors
fixes#603, fixes#349
* The layout has now a unique `tabs` section,
that can be used, like the `parts` section,
everything that is not inside the tabs section
is assumed to be present on every single tab
that is opened.
This is a BREAKING CHANGE for people that use
custom `layouts` already, since the `tabs` section
is not optional - for clarity and intentionality reasons.
The functionality to specify multiple tabs is already there,
but is still gated behind a panic, until #621 is fixed.
So for now one tab can be specified to load on startup.
* The `NewTab` action can optionally be bound to open
a layout that is assumed to be in the new `tabs` section
This is a BREAKING CHANGE for people that have the
`NewTab` action already bound in the config file:
```
- action: [NewTab, ]
key: [F: 5,]
```
must now be specified as:
```
- action: [NewTab: ,]
key: [F: 5,]
```
Optionally a layout that should be opened on the new tab can be
specified:
```
- action: [NewTab: {
direction: Vertical,
parts: [ {direction: Horizontal, split_size: {Percent: 50}}, {direction: Horizontal, run: {command: {cmd: "htop"}}},],
key: [F: 6,]
```
or:
```
- action: [NewTab: {direction: Vertical, run: {command: {cmd: "htop"} }},]
key: [F: 7,]
```
or
```
- action: [NewTab: {
direction: Vertical,
parts: [ {direction: Vertical, split_size: {Percent: 25},run: {plugin: "strider" }}, {direction: Horizontal}],}, MoveFocus: Left,]
key: [F: 8,]
```