feat: support mouse dragging panel separators to resize panelsadded drag column function#3890
Open
winlaic wants to merge 2 commits intosxyazi:mainfrom
Open
feat: support mouse dragging panel separators to resize panelsadded drag column function#3890winlaic wants to merge 2 commits intosxyazi:mainfrom
winlaic wants to merge 2 commits intosxyazi:mainfrom
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements tmux-style mouse dragging of the panel separators to dynamically resize the parent, current, and preview panels (see the gif below).
Changes
yazi-config/preset/yazi-default.toml"drag"to the defaultmouse_eventslist so drag handling is enabled by default.yazi-actor/src/app/mouse.rsrender!()after theRoot:drag()Lua call so the UI repaints immediately on every drag event.yazi-plugin/preset/components/root.lua_drag_whichfield (nil|"left"|"right") to track which separator is currently being dragged.Root:click()to detect mouse-down on either separator (with a ±1 column tolerance), set_drag_which, and clear it again on mouse-up.Root:drag()to read the current panel widths fromtab._chunks, compute the new widths from the cursor position, and write the updated all-pixel-width array back tort.mgr.ratio.How it works
The separator hit zones are derived from tab._chunks, which contains the three column rects produced by Tab:layout()
Each separator uses a ±1 column tolerance and is only active when the corresponding side panel is visible (width > 0).