* feat(ui): change from non-working alt-brackets to alt-arrows
* style(fmt): rustfmt
* fix: improve parsing of `alt` combination keys
The binding of the keys can now be specified with:
- Alt: 'c'
- Alt: Up
- Alt: Down
- Alt: Left
- Alt: Right
* chore(fmt): rustfmt
Co-authored-by: a-kenji <aks.kenji@protonmail.com>
* 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
* launch zellij with --data-dir flag in e2e tests, to avoid using prebuilt
plugins from assets dir, and instead use the ones from the docker
mount.
* make the tests use plugins built in release mode to avoid some test
failures due to timing issues.
* format Makefile.toml.
* set uid 1001 to in e2e action (thanks to https://github.com/francisfuzz/actions-uid-gid)
avoid moving lines to lines_above when in alternate screen.
adjust resizing when in alternate screen:
* remove extra lines instead of sending to lines_above
* truncate excess characters
* feat(layout): add focus attribute in layout
* feat: add state of focus to tab
* chore: i love clippy
* test(layout): update focus options
* feat: add focus pane
* feat: apply focus-pane when layout is only loaded
* change the instruction name for focus-on-tab
* chore: apply cargo-fmt
* test: add e2e testcase
* ensure clippy runs on all targets
* use 'AtomicBool' instead of 'Mutex<bool>'
* remove unused import
* remove 'mem::drop' no-ops
* remove loop that never loops
* 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
* refactor(screen): support multiple mirrored clients
* style(fmt): make rustfmt happy
* style(clippy): make clippy happy
* whitespace
* github, y u no update CI?!
* is this a cache issue?
* is it the checkout cache?
* no cache at all?
* Debug
* fix gototab
* decoment
* gototab none in wasm_vm
* gototab none in wasm_vm
* the fun never ends
* tests(e2e): update infra and add multiple user mirroring test
* refactor(tab): change structs in tabs and terminal panes to support multiple users
* style(fmt): make rustfmt happy
* style(fmt): make clippy happy
* Half-page scroll actions #794
* fix(performance): do not hang when resizing large line wraps (#814)
* fix(performance): do not hang when resizing large line wraps
* style(fmt): make rustfmt happy
* style(clippy): make clippy happy
* docs(changelog): scroll fix
* fix(compatibility): home and end key fix (#815)
* fix(compatibility): handle home/end keys properly from terminfo
* style(fmt): make rustfmt happy
* style(fmt): remove unused import
* docs(changelog): home end key fix
* docs(changelog): fix link
* fix(typo): Correct typo from `occured` to `occurred` (#821)
* docs(changelog): fix a typo
* fix(docs): fix wrong arguments for `cargo make run` given in CONTRIBUTING.md (#819)
* docs(changelog): update `cargo-make` for `v0.35.3`
* fix(warning): Fix an unused import warning of std::fs on macos (#820)
* docs(changelog): fix unused import on darwin
* add: `WriteChars` action (#825)
* Behaves like the `Write` action, but one can specify
strings themselves instead of their bytecodes.
Usage:
WriteChars: "cargo make test",
* docs(changelog): Add `WriteChars` action
* fix(docs): Fix a typo and some grammatical errors in bug_report.md (#826)
* docs(changelog): fix typo bug_report template
* add: `rust-version` (msrv) field to `Cargo.toml` (#828)
* specifies the minimum version the package can be compiled with,
may be ignored with `--ignore-rust-version` option
ref: https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-rust-version-field
* docs(changelog): add `rust-version` to `Cargo.toml`
* fix(unix): forkpty => openpty (#830)
* fix(unix): forkpty => openpty
* style(fmt): make rustfmt happy
* docs(changelog): forkpty => openpty
* Fix: move `colors_transform` to `colorsys` (#832)
* `colors_transform` is deprecated and superceded by `colorsys`
ref: https://crates.io/crates/colors-transform
* docs(changelog): `colors_transform` to `colorsys`
* feat(ui): add right-click support to plugins
* chore(docs): update changelog
* chore(warnings): remove unused imports (#833)
* rename var sroll_rows and review snapshots
* style(fmt): make rustfmt happy
Co-authored-by: Aram Drevekenin <aram@poor.dev>
Co-authored-by: Ken Matsui <26405363+ken-matsui@users.noreply.github.com>
Co-authored-by: a-kenji <aks.kenji@protonmail.com>
Co-authored-by: Tw <tw19881113@gmail.com>
Co-authored-by: Brooks Rady <b.j.rady@gmail.com>
* fix(compatibility): handle wide characters inserted in line middle
* fix(compatibility): more wide char handling
* style(fmt): make rustfmt happy
* style(fmt): make clippy happy
* style(fmt): make clippyt happy
* style(fmt): make rustfmt happy... again
* 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
* 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
* fix(compatibility): support changing index colors with osc
* style(fmt): make rustfmt happy
* style(fmt): make clippy happy
* style(fmt): make rustfmt happy
* docs(changelog): document fix
* work
* resize working
* move focus working
* close pane working
* selection and fullscreen working
* pane title line
* titles and conditional scroll title
* whole tab resize working
* plugin frames working
* plugin splitting working
* truncate pane frame titles
* cleanup
* panes always draw their own borders - also fix gap
* toggle pane frames
* move toggle to screen and fix some bugs
* fix plugin frame toggle
* fix terminal window resize
* fix scrolling and fullscreen bugs
* unit tests passing
* e2e tests passing and new test for new frames added
* refactor: TerminalPane and PluginPane
* refactor: Tab
* refactor: moar Tab
* refactor: Boundaries
* only render and calculate boundaries when there are no pane frames
* refactor: Layout
* fix(grid): properly resize when coming back from alternative viewport
* style: remove commented code
* style: fmt
* style: fmt
* style: fmt + clippy
* docs(changelog): update change
* Initial mouse support
* enable mouse support (termion MouseTerminal)
* handle scroll up and down events
* Allow enabling/disabling of mouse reporting
Store the mouse terminal on OsInputOutput
* WIP: switch pane focus with mouse
* testing to get mouse character selection
* wip mouse selection
* wip: mouse selection
- initial handling of mouse events for
text selection within a pane
- wide characters currently problematic
- selection is not highlighted
* highlight currently selected text
* improve get currently selected text from TerminalPane
* copy selection to clipboard (wayland only for now)
* Add missing set_should_render on selection update
* Improve text selection
- Strip whitespace from end of lines
- Insert newlines when selection spans multiple lines
* Simplify selection logic
- Remove Range struct
- Selection is not an Option anymore, it's empty when start == end
* copy selection to clipboard with OSC-52 sequence
* Improve text selection with multiple panes
- Constrain mouse hold and release events to currently active pane
- Fix calculation of columns with side by side panes
* fix for PositionAndSize changes
* Fix mouse selection with full screen pane.
- Transform mouse event positions to relative when passing to pane.
* Move selection to grid, rework highlighting.
- Mark selected lines for update in grid output buffer, for now in the
simplest way possible, but can be made more efficient by calculating
changed lines only.
- Clear selection on pane resize.
- Re-add logic to forward mouse hold and release events only to
currently active pane.
* Tidy up selection
- add method to get selection line range
- add method to sort the current selection
* Grid: move current selection up/down when scrolling
- Make the selection work with lines in lines_above and lines_below
- Todo: update selection end when scrolling with mouse button being held
- Todo: figure out how to move selection when new characters are added.
* Grid: move selection when new lines are added
* Keep track of selection being active
- Handle the selection growing/shrinking when scrolling with mouse
button held down but not yet released.
* Improve selection end with multiple panes
* Tidying up
- remove logging statements, unused code
* Add some unit tests for selection, move position to zellij-utils
* Change Position::new to take i32 for line
* Grid: add unit tests for copy from selection
* add basic integration test for mouse pane focus
* Add basic integration test for mouse scroll
* Use color from palette for selection rendering
* Improve performance of selection render
- Try to minimize lines to update on selection start/update/end
* fixes for updated start method
* fix lines not in viewport being marked for rendering
- the previous optimization to grid selection rendering was always
adding the lines at the extremes of previous selection, causing problems
when scrolling up or down
- make sure to only add lines in viewport
* Disable mouse mode on exit
* use saturating_sub for usize subtractions
* copy selection to clipboard on mouse release
* disable mouse on exit after error
* remove left-over comments
* remove copy keybinding
* add default impl for selection methods in Pane
- remove the useless methods from Impl Pane in PluginPane
* move line diff between selections to selection
* add option to disable mouse mode
* Allow scrolling with mouse while selecting.
* move action repeater to os_input_output, change timeout to 10ms
- change repeater to take an action instead of a position with hardcoded
action
* replace mouse mode integration tests with e2e tests
* cleanup
* cleanup
* check if mouse mode is disabled from merged options
* fix missing changes in tests, cleanup