aboutsummaryrefslogtreecommitdiffstats
path: root/zellij-utils/src/input/mouse.rs (follow)
Commit message (Collapse)AuthorAge
* Mobile layout (#5241)Aram Drevekenin2026-06-10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * phase 2+3 * initial mobile plugin (phases 4 + 5 + 6) * some bugfixes * implement stage 7 * mobile interface improvements * improve mobile pane/tab picker * more ui improvements and fixes * various mobile fixes * some mobile fixes * mobile keyboard triggering fix * some cleanups * initial plugin keyboard implementation * improve keyboard hit zones * improve keyboard * pinch resize * pinching fixes * implement scrolling + panning * initial keyboard resizing * fix: mobile first render issues * keyboard responsiveness * fix some issues with the keyboard * implement fit * fix mobile scrolling * add tilde cell to compact * improve mobile keyboard * fix starting mobile terminal font to natural keyboard size * fix mobile resize blank screen flash * shadow focus for mobile * more keyboard fixes * improve mobile status bar * fix: render plugins to mobile clients * allow opening new panes/tabs from the mobile plugin * allow configuring * fix dot slash * improve mobile native soft keyboard interaction * switch to native keyboard - initial implementation * dirty hacks, but phone keyboard works now * adjust keyboard help strip * fix cursor in mobile * fix keyboard and help line * rename keyboard to modifier bar * allow starting new session * make clicking session name bring us to new session menu * allow switching to desktop from the mobile ui * mobile welcome screen initial implementation * mobile welcome screen fixes * various welcome screen fixes * more mobile fixes * moar mobile fixes * mobile ui redesign * fix: swallowed backspace bug * switch session screen improvement * touch up some interfaces * refactor: move mobile state to own struct * refactor: move fit resizing to the server * remove dead flash code * some cleanups * refactor: clear fit on close * refactor: improve fit api * refactor: pane sync functions * refactor: mouse * refactor: break into modules * some cleanups for the sessions screen * fix scrolling and other stuff * refactor: sessions screen * refactor: panes screen * refactor: new session screen * refactor: menu screen * refactor: render * cleanups * refactor: plugin structure * remove unused welcome screen path * Rename api * refactor input.js * cleanup useless comments * fit/mobile refactoring * take out the garbage * remove more comments * remove mobile flash on startup/attach * fix: various mobile startup issues * fix space bugs * cleanup * rustfmt * fix windows build * adjust modifier bar ui * add pr
* Allow resizing panes with the mouse (#4678)Aram Drevekenin2026-02-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * initial implementation * improve edge detection * fix up/down resize increment bug * temporarily disable alt-mouse grouping * fix inverting strategies and simplify edge detection * resize of floating -> ctrl click, resize of tiled -> (ctrl)click * fix old functionality and tests * refactor and fixes * refactor mouse click handling * move mouse click handling to separate module * resize scroll up/down with scroll wheel * tests for scroll resize * implement hover help * fix occlusion bug * allow disabling with config * fix focus pinned pane on frame * use strategy invert resize directly rather than function parameter * remove annoying log message * cleanups and formatting * add pr
* Command Sequences, Blocking CLI Commands, New Plugin APIs (#4546)Aram Drevekenin2025-12-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * fix deadlocks * initial logging to plugin implementation * only log actions, include keys as Action::Write * send actions to plugins as a new Event::UserAction * add Action::Write metadata to plugin API * run_action plugin command and permission * block-until-exit/success/failure in the cli * fix tests * add NewBlockingPane to the plugin API * run actions in a different thread so as not to block plugin execution * add custom context to run_action flow * fixes for floating pane z_index sorting and unknown protobuf events not crashing plugins * always render the frame of pinned panes * macros module * add macros to config * KDL macro parsing * thread macros to the plugin thread * get/update/delete macros from plugins * add macros updated event * add ability to rename macros * fix deadlock * fix z_indices with pinned unselectable panes bug * allow plugins to opt-in to show_cursor * change show_cursor(bool) to show_cursor(Option<coordinates>) * test * upgrade strum to allow proper enum iteration and case insensitive fromstr implementation for Actions * better cwd tracking for exited command panes * add initial panes to NewTab Action (no-op for now) * add initial panes to cli newtab action * make initial panes work * add close_on_exit and start_suspended to the cli * properly convert newtab action (potentially breaking for plugins) * allow first pane in tab to block * make distinction between opening panes with the last active client and the current pane in the cli * improve some apis * fix fixed size closing pane bug * fix plugin cursor coordinates * fix issues with launch-or-focus-plugin having to do with in-place and suppressed panes * fix: set affected pane in replace pane * allow setting a pane in place when it is suppressed and being focused (tests failing) * fix tests * some fixes for unsuppression of panes * some fixes for completion_tx in new tab action * allow replace/suppressed rather than replace/close only * fixes for inserting suppressed panes without conflicts * pane focus history and explicit unsuppress plugin api * fix: prefer explicitly provided pane id in placement in actions that provide it * fix floating pane coordinate change and z_index * fix plugin cache dir to persist between sessions * fix some stack focusing issues when adding panes without a client id * make sure pinned panes are always above non-pinned floating panes * allow plugins to copy to clipboard * initial text styling additions implementations - buggy * fix dimming issues * remove extras, stay with just dim and unbold * unbold and dim as indices * allow ui components to render success/error colors * allow plugins to send sigint/sigkill to processes, as well as receive their pid * ui component fixes and send originating plugin context with run_action * originating plugin for new tab too * make plugn show pane command also expand stacked panes * add sequence plugin * remove macros * remove snapshots * add shortcut for sequence plugin * fix plugin tests * plugin tests for new apis * update snapshots for sequence shortcut * cleanups and formatting * Event::CwdChanged * moar cleanups * remove some warnings * remove mroe warnings * remove dead code * remove more dead code * fix minor bugs in sequence plugin * update sequence help and format codebase * fix conditional blocking cli commands * fix initial-command new-tab cli flag * add client_ids to CwdChanged Event * last fixes * add pr
* feat: multiple Select and Bulk Pane Actions (#4169)Aram Drevekenin2025-04-29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * initial implementation with break panes to new tab * break pane group left/right * group embed/eject panes * stack pane group on resize * close pane group * style(fmt): rustfmt * fix tests * group drag and ungroup with the mouse * fix mouse hover for multiple clients * fix for multiple clients * multiple select plugin initial * use real data in plugin * adjust functionality * fix some ux issues * reflect group mouse group selections in plugin * group/ungroup panes in Zellij * highlight frames when marked by the plugin * refactor: render function in plugin * some ui responsiveness * some more responsiveness and adjust hover text * break out functionality * stack functionality * break panes left/right and close multiple panes * fix(tab): only relayout the relevant layout when non-focused pane is closed * status bar UI * embed and float panes * work * fix some ui/ux issues * refactor: move stuff around * some responsiveness and fix search result browsing bug * change plugin pane title * differentiate group from focused pane * add keyboard shortcut * add ui to compact bar * make boundary colors appear properly without pane frames * get plugins to also display their frame color * make hover shortcuts appear on command panes * fix: do not render search string component if it's empty * BeforeClose Event and unhighlight panes on exit * some UI/UX fixes * some fixes to the catppuccin-latte theme * remove ungroup shortcut * make some ui components opaque * fix more opaque elements * fix some issues with stacking pane order * keyboard shortcuts for grouping * config to opt out of advanced mouse actions * make selected + focused frame color distinct * group marking mode * refactor: multiple-select plugin * adjust stacking group behavior * adjust flashing periods * render common modifier in group controls * add to compact bar * adjust key hint wording * add key to presets and default config * some cleanups * some refactoring * fix tests * fix plugin system tests * tests: group/ungroup/hover * test: BeforeClose plugin event * new plugin assets * style(fmt): rustfmt * remove warnings * tests: give plugin more time to load
* feat(terminal): mouse AnyEvent tracking (1003)Autumn2025-01-14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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.vim https://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/d8a62cc1ab659194337d73e399004036 https://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>
* chore(deps): move from termion to termwiz for STDIN handling (#1249)Aram Drevekenin2022-03-23
| | | | | | | | | | | | | | | | | | | * fix(deps): switch from termion to termwiz for STDIN parsing * style(fmt): clippy * style(fmt): moar clippy * style(fmt): rustfmt * fix(tests): e2e mouse press * style(fmt): rustfmt * bring back polling * fmt fmt fmt * fix some e2e flakiness
* feat(ui): initial mouse support (#448)Thomas Linford2021-07-02
* 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