* Implement initial structs from spec
* kdl configuration unmarshalling
* typo text styling
* remove is_selected toggle
* incorporate new status bar ui into theming
* improve test coverage of config behavior
* tab bar correction
* correct also compact bar
* remove spacing between table columns
* refactor table styling
* use text_unselected.emphasis_1 for keygroup sep
* fix tab bar more text
* repair field flattening for theme
* remove extra styling KDL node
* update tests
* updated selected text conversion
* padding for header bar
* minor corrections for existing themes
* background handling
* compact bar corrections
* properly handle opaque method to activate background
* update newer plugins to use styling struct
* correct omission of selected state
* fix: bold typeface for text elements
* fix: fg -> white for list_unselected conversion
* fix: emphasis and opacity handling for nested_list
* correct stylings in the session-manager
* fix emphases translation for table component
* correct emphasis for run instructions
* correct frame_highlight translation for old themes
* provide missing implementation of frame_highlight
* fencepost emphasis color names
* Set a pseudo-None for frame_unselected in old theme conversion
* correct alternating bg for simplified-ui
* update snapshots
* fix inner text padding and errorneous snapshots
* suppress warning about deprecated usage of palette
* remove unused import
* feat(plugins): API to change floating pane coordinates (#3958)
* basic functionality through the cli
* added to plugin api
* add display area and viewport size to TabInfo
* fix tests and add new one
* some cleanups
* refactor: extract pane_id parsing logic
* style(fmt): rustfmt
* docs(changelog): floating pane coordinate chagne API
* fix(tiled-panes): opening panes from the cli (#3963)
* feat(plugins): add `PastedText` Event (#3962)
* working with text paste
* handle utf8 conversion error
* feat(plugins): add PastedText Event
* docs(changelog): plugins pasted text event
* black for table opaque background
* properly apply opacity to table
* correct padding for explicit width ribbons
* feat(plugins): Allow opening panes near plugin (#3966)
* added command + terminal variants
* added editor variant
* style(fmt): rustfmt
* docs(changelog): plugin apis to open panes near plugin
* feat(plugins): send info about $EDITOR and $SHELL (#3971)
* feat(plugins): send info about $EDITOR and $SHELL
* fix(e2e): snapshot update
* docs(changelog): plugin editor and shell info
* fix(floating-panes): when changing coordinates, if a pane is not floating - make it floating (#3972)
* fix(panes): when changing floating pane coordinates, if the pane is not floating, float it
* style(fmt): rustfmt
* docs(changelog): floating pane coordinate fix
* fix(break-pane): strip logical position when inserting pane to new tab (#3973)
* docs(changelog): logical position fix
* Optional frame_unselected theme
* fixture with correct width to account for arrow padding
* update snapshot and rustfmt
---------
Co-authored-by: Aram Drevekenin <aram@poor.dev>
* work
* tests and initial notes for refactoring
* refactor(stacked-panes): break out pane
* vertical functionality working with a single stack
* refactor: break out pane from stack
* fix: properly support multiple stacks in tab
* combining multiple stacks vertically
* vertical resizing working for all cases
* base functionality and tests
* some UX tweaking
* final functionality for directionless stacked increase
* some cleanups
* moar cleanups
* refactor: stacked resize
* fix: issue where resizing stacked geoms to 0 would cause them to overflow afterwards
* fix: handle uneven stacking
* functionality with tombstones
* new open new pane functionality
* match decrease increment behavior to increase one and fix some issues
* set fullscreen if maxed out
* allow splitting stacks
* fix tests mostly by parameterizing stacked_resize
* add tests
* some cleanups
* style(fmt): rustfmt
* add to config
* disable ci cache
* is_stacked => stacked
* docs(config): remove duplication
* 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
* refactor: Simplify transfer_rows_from_viewport_to_lines_above
next_lines is always consolidated to a single Row, which immediately
gets removed - we can remove some dead code as a result
* perf: Batch remove rows from the viewport for performance
Given a 1MB line catted into the terminal, a toggle-fullscreen +
toggle-fullscreen + close-pane + `run true` goes from ~9s to ~3s
* perf: Optimize Row::drain_until by splitting chars in one step
Given a 10MB line catted into the terminal, a toggle-fullscreen +
toggle-fullscreen + close-pane + `run true` goes from ~23s to ~20s
* refactor: Simplify `if let` into a `.map`
* refactor: There are only new saved coordinates when there were old ones
* refactor: Unify viewport transfer: use common variable names
* fix: Use same saved cursor logic in height resize as width
See #2182 for original introduction that only added it in one branch,
this fixes an issue where the saved cursor was incorrectly reset when
the real cursor was
* fix: Correct saved+real cursor calculations when reflowing long lines
* fix: Don't create canonical lines if cursor ends on EOL after resize
Previously if a 20 character line were split into two 10 character
lines, the cursor would be placed on the line after the two lines.
New characters would then be treated as a new canonical line. This
commit fixes this by biasing cursors to the end of the previous line.
* fix: for cursor index calculation in lines that are already wrapped
* chore: test for real/saved cursor position being handled separately
* chore: Apply cargo format
* refactor: Unify viewport transfer: transfer + cursor update together
* perf: Reduce size of TerminalCharacter from 72 to 60 bytes
With a 10MB single line catted into a fresh terminal, VmRSS goes from
964092 kB to 874020 kB (as reported by /proc/<pid>/status) before/after
this patch
Given a 10MB line catted into the terminal, a toggle-fullscreen +
toggle-fullscreen + close-pane + `run true` goes from ~15s to ~12.5s
* fix(build): Don't unconditionally rebuild zellij-utils
* refactor: Remove Copy impl on TerminalCharacter
* perf: Rc styles to reduce TerminalCharacter from 60 to 24 bytes
With a 10MB single line catted into a fresh terminal, VmRSS goes from
845156 kB to 478396 kB (as reported by /proc/<pid>/status) before/after
this patch
Given a 10MB line catted into the terminal, a toggle-fullscreen +
toggle-fullscreen + close-pane + `run true` goes from ~12.5s to ~7s
* perf: Remove RcCharacterStyles::Default, allow enum niche optimisation
This reduces TerminalCharacter from 24 to 16 bytes
With a 10MB single line catted into a fresh terminal, VmRSS goes from
478396 kB to 398108 kB (as reported by /proc/<pid>/status) before/after
this patch
Given a 10MB line catted into the terminal, a toggle-fullscreen +
toggle-fullscreen + close-pane + `run true` goes from ~7s to ~4.75s
* docs: link anchor omission from reset_all is deliberate
reset_all is only used from ansi params, and ansi params don't control
link anchor
* fix: Remove no-op on variable that gets immediately dropped
* refactor: Simplify replace_character_at logic
The original condition checked absolute_x_index was in bounds, then
used the index to manipulate it. This is equivalent to getting a
ref to the character at that position and manipulating directly
* chore: Run xtask format
* chore(repo): update issue templates
* Bump rust version to 1.75.0 (#3039)
* rust-toolchain: Bump toolchain version to 1.69.0
which, compared to the previous 1.67.0, has the following impacts on
`zellij`:
- [Turn off debuginfo for build deps][2]: Increases build time (on my
machine) from ~230 s in 1.67.0 to ~250 s now, *which is unexpected*
This version also changes [handling of the `default-features` flag][3]
when specifying dependencies in `Cargo.toml`. If a dependent crate
requires `default-features = true` on a crate that is required as
`default-features = false` further up the dependency tree, the `true`
setting "wins". We only specify `default-features = false` for three
crates total:
- `names`: This is used only by us
- `surf`: This is used only by us
- `vte`: This is also required by `strip-ansi-escapes`, but that has
`default-features = false` as well
How this affects our transitive dependencies is unknown at this point.
[2]: https://github.com/rust-lang/cargo/pull/11252/
[3]: https://github.com/rust-lang/cargo/pull/11409/
* rust-toolchain: Bump toolchain version to 1.70.0
which, compared to the previous 1.69.0, as the following impacts on
`zellij`:
1. [Enable sparse registry checkout for crates.io by default][1]
This drastically increases the time to first build on a fresh rust
installation/a rust installation with a clean cargo registry cache.
Previously it took about 75s to populate the deps/cache (with `cargo
fetch --locked` and ~100 MBit/s network), whereas now the same process
takes ~10 s.
2. [The `OnceCell` type is now part of std][2]
In theory, this would allow us to cut a dependency from `zellij-utils`,
but the `once_cell` crate is pulled in by another 16 deps, so there's no
point in attempting it right now.
Build times and binary sizes are unaffected by this change compared to
the previous 1.69.0 toolchain.
[1]: https://github.com/rust-lang/cargo/pull/11791/
[2]: https://doc.rust-lang.org/stable/std/cell/struct.OnceCell.html
* rust-toolchain: Bump toolchain version to 1.75.0
which, compared to the previous 1.70.0, has the following impacts on
`zellij`:
1. [cross-crate inlining][8]
This should increase application performance, as functions can now be
inlined across crates.
2. [`async fn` in traits][9]
This would allow us to drop the `async_trait` dependency, but it is
currently still required by 3 other dependencies.
Build time in debug mode (on my own PC) is cut down from 256s to 189s
(for a clean build). Build time in release mode is cut down from 473s to
391s (for a clean build). Binary sizes only change minimally (825 MB ->
807 MB in debug, 29 MB -> 30 MB in release).
[8]: https://github.com/rust-lang/rust/pull/116505
[9]: https://github.com/rust-lang/rust/pull/115822/
* chore: Apply rustfmt.
* CHANGELOG: Add PR #3039.
* feat(plugins): introduce 'pipes', allowing users to pipe data to and control plugins from the command line (#3066)
* prototype - working with message from the cli
* prototype - pipe from the CLI to plugins
* prototype - pipe from the CLI to plugins and back again
* prototype - working with better cli interface
* prototype - working after removing unused stuff
* prototype - working with launching plugin if it is not launched, also fixed event ordering
* refactor: change message to cli-message
* prototype - allow plugins to send messages to each other
* fix: allow cli messages to send plugin parameters (and implement backpressure)
* fix: use input_pipe_id to identify cli pipes instead of their message name
* fix: come cleanups and add skip_cache parameter
* fix: pipe/client-server communication robustness
* fix: leaking messages between plugins while loading
* feat: allow plugins to specify how a new plugin instance is launched when sending messages
* fix: add permissions
* refactor: adjust cli api
* fix: improve cli plugin loading error messages
* docs: cli pipe
* fix: take plugin configuration into account when messaging between plugins
* refactor: pipe message protobuf interface
* refactor: update(event) -> pipe
* refactor - rename CliMessage to CliPipe
* fix: add is_private to pipes and change some naming
* refactor - cli client
* refactor: various cleanups
* style(fmt): rustfmt
* fix(pipes): backpressure across multiple plugins
* style: some cleanups
* style(fmt): rustfmt
* style: fix merge conflict mistake
* style(wording): clarify pipe permission
* docs(changelog): introduce pipes
* xtask: Disable pusing during publish (#3040)
* xtask: Add `--no-push` flag to `publish`
which can be used when simulating releases to work without a writable
git fork of the zellij code.
* xtask: Fix borrow issues
* xtask/pipe: Require lockfile in publish
to avoid errors from invalid dependency versions.
* CHANGELOG: Add PR #3040.
* fix(terminal): some real/saved cursor bugs during resize (#3032)
* refactor: Simplify transfer_rows_from_viewport_to_lines_above
next_lines is always consolidated to a single Row, which immediately
gets removed - we can remove some dead code as a result
* perf: Batch remove rows from the viewport for performance
Given a 1MB line catted into the terminal, a toggle-fullscreen +
toggle-fullscreen + close-pane + `run true` goes from ~9s to ~3s
* perf: Optimize Row::drain_until by splitting chars in one step
Given a 10MB line catted into the terminal, a toggle-fullscreen +
toggle-fullscreen + close-pane + `run true` goes from ~23s to ~20s
* refactor: Simplify `if let` into a `.map`
* refactor: There are only new saved coordinates when there were old ones
* refactor: Unify viewport transfer: use common variable names
* fix: Use same saved cursor logic in height resize as width
See #2182 for original introduction that only added it in one branch,
this fixes an issue where the saved cursor was incorrectly reset when
the real cursor was
* fix: Correct saved+real cursor calculations when reflowing long lines
* fix: Don't create canonical lines if cursor ends on EOL after resize
Previously if a 20 character line were split into two 10 character
lines, the cursor would be placed on the line after the two lines.
New characters would then be treated as a new canonical line. This
commit fixes this by biasing cursors to the end of the previous line.
* fix: for cursor index calculation in lines that are already wrapped
* chore: test for real/saved cursor position being handled separately
* chore: Apply cargo format
* chore(repo): update issue templates
* Bump rust version to 1.75.0 (#3039)
* rust-toolchain: Bump toolchain version to 1.69.0
which, compared to the previous 1.67.0, has the following impacts on
`zellij`:
- [Turn off debuginfo for build deps][2]: Increases build time (on my
machine) from ~230 s in 1.67.0 to ~250 s now, *which is unexpected*
This version also changes [handling of the `default-features` flag][3]
when specifying dependencies in `Cargo.toml`. If a dependent crate
requires `default-features = true` on a crate that is required as
`default-features = false` further up the dependency tree, the `true`
setting "wins". We only specify `default-features = false` for three
crates total:
- `names`: This is used only by us
- `surf`: This is used only by us
- `vte`: This is also required by `strip-ansi-escapes`, but that has
`default-features = false` as well
How this affects our transitive dependencies is unknown at this point.
[2]: https://github.com/rust-lang/cargo/pull/11252/
[3]: https://github.com/rust-lang/cargo/pull/11409/
* rust-toolchain: Bump toolchain version to 1.70.0
which, compared to the previous 1.69.0, as the following impacts on
`zellij`:
1. [Enable sparse registry checkout for crates.io by default][1]
This drastically increases the time to first build on a fresh rust
installation/a rust installation with a clean cargo registry cache.
Previously it took about 75s to populate the deps/cache (with `cargo
fetch --locked` and ~100 MBit/s network), whereas now the same process
takes ~10 s.
2. [The `OnceCell` type is now part of std][2]
In theory, this would allow us to cut a dependency from `zellij-utils`,
but the `once_cell` crate is pulled in by another 16 deps, so there's no
point in attempting it right now.
Build times and binary sizes are unaffected by this change compared to
the previous 1.69.0 toolchain.
[1]: https://github.com/rust-lang/cargo/pull/11791/
[2]: https://doc.rust-lang.org/stable/std/cell/struct.OnceCell.html
* rust-toolchain: Bump toolchain version to 1.75.0
which, compared to the previous 1.70.0, has the following impacts on
`zellij`:
1. [cross-crate inlining][8]
This should increase application performance, as functions can now be
inlined across crates.
2. [`async fn` in traits][9]
This would allow us to drop the `async_trait` dependency, but it is
currently still required by 3 other dependencies.
Build time in debug mode (on my own PC) is cut down from 256s to 189s
(for a clean build). Build time in release mode is cut down from 473s to
391s (for a clean build). Binary sizes only change minimally (825 MB ->
807 MB in debug, 29 MB -> 30 MB in release).
[8]: https://github.com/rust-lang/rust/pull/116505
[9]: https://github.com/rust-lang/rust/pull/115822/
* chore: Apply rustfmt.
* CHANGELOG: Add PR #3039.
* feat(plugins): introduce 'pipes', allowing users to pipe data to and control plugins from the command line (#3066)
* prototype - working with message from the cli
* prototype - pipe from the CLI to plugins
* prototype - pipe from the CLI to plugins and back again
* prototype - working with better cli interface
* prototype - working after removing unused stuff
* prototype - working with launching plugin if it is not launched, also fixed event ordering
* refactor: change message to cli-message
* prototype - allow plugins to send messages to each other
* fix: allow cli messages to send plugin parameters (and implement backpressure)
* fix: use input_pipe_id to identify cli pipes instead of their message name
* fix: come cleanups and add skip_cache parameter
* fix: pipe/client-server communication robustness
* fix: leaking messages between plugins while loading
* feat: allow plugins to specify how a new plugin instance is launched when sending messages
* fix: add permissions
* refactor: adjust cli api
* fix: improve cli plugin loading error messages
* docs: cli pipe
* fix: take plugin configuration into account when messaging between plugins
* refactor: pipe message protobuf interface
* refactor: update(event) -> pipe
* refactor - rename CliMessage to CliPipe
* fix: add is_private to pipes and change some naming
* refactor - cli client
* refactor: various cleanups
* style(fmt): rustfmt
* fix(pipes): backpressure across multiple plugins
* style: some cleanups
* style(fmt): rustfmt
* style: fix merge conflict mistake
* style(wording): clarify pipe permission
* docs(changelog): introduce pipes
* fix: add some robustness and future proofing
* fix e2e tests
---------
Co-authored-by: Aram Drevekenin <aram@poor.dev>
Co-authored-by: har7an <99636919+har7an@users.noreply.github.com>
* fix integer overflow again (oops)
---------
Co-authored-by: Aram Drevekenin <aram@poor.dev>
Co-authored-by: har7an <99636919+har7an@users.noreply.github.com>
* parsing rendering private osc table
* move components to DCS and add tests
* refactor: move components to their own thing
* ribbon and selected-ribbon ui components
* nested list ui component
* selected and indices for nested list
* coordinates and size for ui components
* use Text with ribbon
* add tests for components
* refactor: ui components
* refactor: ui components api
* style(fmt): rustfmt
* style(fmt): cleanups
* fix(layout): error on nodes outside layout node
* fix(layout): move stacked property to pane
* fix(layout): various stack exceptions
* fix(ui): non-flexible stacked pane titles now take up their full length
* fix(ui): stack titles with no-pane-frames take up their proper length
* style(fmt): rustfmt
* relayout working with hard coded layout
* work
* refactor(layout): PaneLayout => TiledPaneLayout
* tests passing
* tests passing
* tests passing
* stacked panes and passing tests
* tests for stacked panes
* refactor(panes): stacked panes
* fix: focusing into stacked panes from the left/right
* fix(layouts): handle stacked layouts in the middle of the screen
* fix(pane-stack): focus correctly when coming to stack from above/below
* fix(stacked-panes): resize stack
* fix(stacked-panes): focus with mouse
* fix(stacked-panes): focus next pane
* fix(layout-applier): sane focus order
* fix(stacked-panes): better titles for one-liners
* fix(stacked-panes): handle moving pane location in stack
* fix(relayout): properly calculate display area
* fix(relayout): properly calculate rounding errors
* fix(stacked-panes): properly handle closing a pane near a stack
* fix(swap-layouts): adjust swap layout sort order
* feat(swap-layouts): ui + ux
* fix(swap-layouts): include base layout
* refactor(layout): remove unused method
* fix(swap-layouts): respect pane contents and focus
* work
* fix(swap-layouts): load swap layouts from external file
* fix(swap-layouts): properly truncate layout children
* fix(stacked-panes): allow stacked panes to become fullscreen
* fix(swap-layouts): work with multiple tabs
* fix(swap-layouts): embed/eject panes properly with auto-layout
* fix(stacked-panes): close last pane in stack
* fix(stacked-panes): move focus for all clients in stack
* fix(floating-panes): set layout damaged when moving panes
* fix(relayout): move out of unfitting layout when resizing whole tab
* fix(ui): background color for swap layout indicator
* fix(keybinds): add switch next layout in tmux
* fix(ui): swap layout indication in compact layout
* fix(compact): correct swap constraint
* fix(tests): tmux swap config shortcut
* fix(resizes): cache resizes so as not to confuse panes (eg. vim) with multiple resizes that it debounces weirdly
* feat(cli): dump swap layouts
* fix(ui): stacked panes without pane frames
* fix(ux): move pane forward/backwards also with floating panes
* refactor(lint): remove unused stuff
* refactor(tab): move swap layouts to separate file
* style(fmt): rustfmt
* style(fmt): rustfmt
* refactor(panes): various cleanups
* chore(deps): upgrade termwiz to get alt left-bracket
* fix(assets): merge conflicts of binary files
* style(fmt): rustfmt
* style(clippy): no thank you!
* chore(repo): remove garbage file
* server/tab: Don't panic in `Pane::render`
and do not crash the application on failure to receive a render update
from plugins any longer. Instead, will print a simple string with a hint
to check the application logs, where a more thorough error indication
can be found.
* utils/errors: re-export `anyhow::Error`
to create ad-hoc errors with custom error types, without having to wrap
them into a `context()` before to turn the into anyhow errors.
* plugins: Check plugin version on startup
and terminate execution with a descriptive error message in case the
plugin version is incompatible with the version of zellij being run.
* server/wasm_vm: Add plugin path in version error
so the user knows which plugin to look at in case they're using custom
plugins.
* server/wasm_vm: Check plugin version for equality
Previously we would accept cases where the plugin version was newer than
the zellij version, which doesn't make a lot of sense.
* server/wasm_vm: Prettier error handling
in call to `wasmer::Function::call` in case a plugin version mismatch
can occur.
* tile: Install custom panic handler
that will print the panic message to a plugins stdout and then call a
panic handler on the host that turns it into a real application-level
panic.
* tile: Catch errors in event deserialization
and turn them into proper panics. These errors are symptomatic of an
uncaught plugin version mismatch, for example when developing from main
and compiling zellij/the plugins from source. Normal users should never
get to see this error.
* utils/errors: Improve output in `to_stdout`
for anyhow errors. The default anyhow error formatting of `{:?}` is
already very good, and we just made it worse by trying to invent our own
formatting.
* tile: Reword plugin mismatch error message
* zellij: Apply rustfmt
* changelog: Add PR #1838
Improve error handling on plugin version mismatch.
* server/wasm_vm: Rephrase error in passive voice
* 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!
* 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(ui): round frame corners
* Allow rounded_corners to be set without a palette
* Revert "Allow rounded_corners to be set without a palette"
This reverts commit 9271a4b5452f2e59e0ebd55136343f0fbfabaa13.
* fix(style): remove redundant code
* fix(style): clippy lints that somehow got missed
* feat(config): add ui config section
* refactor: move resizing methods to pane resizer
* refactor: move focus and close methods to pane grid
* refactor(tab): move move methods positioning to pane grid
* refactor(tab): separate pane resizer from pane grid
* style(fmt): make rustfmt happy
* style(fmt): make clippy happy
* Read pane name from layout
* Update pane name at runtime
* Fix tests
* prefer and render pane name over pane title
* fix clippy errors
* fix after rebase
* work
* fix(frame): properly handle widechars in frame titles
* style(fmt): make rustfmt happy
* fix(truncate): do not reverse second part of string (oops)
* docs(changelog): document change
* refactor(panes): move to parametric pane sizes
* Fixed the simpler errors by casting to usize
* The least I can do is pass the formatting check...
* Move to stable toolchain
* Well, it compiles?
* And now it doesn't! ;)
* Baseline functionality with the new Dimension type
* Working POC for percent-based resizing
* REVERT THIS COMMIT – DELETES TESTS
* Perfected the discrete resize algorithm
* Fixed fixed-size panes
* Basic bidirectional resize
* feat(resize): finalised parametric resize algorithm
* Reduce the logging level a bit
* Fixed nested layouts using percents
* Bug squishing for implicit sizing
* Here is a funky (read: rubbish) rounding approach
* And now it's gone again!
* Improve discretisation algorithm to fix rounding errors
* Fix the last layout bug (maybe?)
* Mixed explicit and implied percents work now
* Let's pretend that didn't happen...
* Make things a bit less crashy
* Crash slightly more for now (to find bugs)
* Manaually splitting of panes works now
* Start moving to percent-based resizes
* Everything but fullscreen seems to be working
* Fix compilatation errors
* Culled a massive amount of border code
* Why not pause to please rustfmt?
* Turns out I was still missing a few tests...
* Bringing back even more tests!
* Fix tests and pane boarders
* Fix the resize system without gaps
* Fix content offset
* Fixed a bug with pane closing
* Add a hack to fix setting of the viewport
* Fix toggling between shared borders and frames
* fix(tests): make e2e properly use PaneGeom
* style(fmt): make rustfmt happy
* Revert unintentional rounding of borders
* Purge some old borderless stuff
* Fix busted tab-bar shrinking
* Update E2E tests
* Finish implementing fullscreen!
* Don't crash anymore?
* Fix (almost) all tests
* Fix a lack of tab-stops
* All tests passing
* I really can't be bothered to debug a CI issue
* Tie up loose ends
* Knock out some lingering FIXMEs
* Continue to clean things up
* Change some naming and address FIXMEs
* Cull more code + FIXMEs
* Refactor of the resize system + polish
* Only draw frames when absolutely necessary
* Fix the tab-bar crash
* Fix rendering of boarders on reattach
* Fix resizing at small pane sizes
* Deduplicate code in the layout system
* Update tab-bar WASM
* Fixed the pinching of panes during resize
* Unexpose needlessly public type
* Add back a lost test
* Re-add tab tests and get them to compile
* All tabs need layouts
* Start fixing tests + bug in main
* Stabilize the resize algorithm rounding
* All tests from main are now passing
* Cull more dead code