editor: Unfold buffers with selections on edit + Remove selections on buffer fold#37953
Merged
smitbarmase merged 7 commits intozed-industries:mainfrom Nov 11, 2025
Conversation
|
We require contributors to sign our Contributor License Agreement, and we don't have @anicioalexandre on file. You can sign our CLA at https://zed.dev/cla. Once you've signed, post a comment here that says '@cla-bot check'. |
Contributor
Author
|
@cla-bot check |
|
The cla-bot has been summoned, and re-checked this pull request! |
f063cec to
3b92dc0
Compare
Contributor
Author
|
@maxbrunsfeld could you have a look when you have some time, please? |
smitbarmase
requested changes
Sep 29, 2025
3b92dc0 to
ddd3033
Compare
15c5734 to
72cde7f
Compare
Contributor
Author
|
@smitbarmase do you think we could move forward with this? |
smitbarmase
requested changes
Oct 22, 2025
Member
smitbarmase
left a comment
There was a problem hiding this comment.
I added few more comments, I think we can merge after those are resolved.
Member
|
Could you also rebase this on the latest main? |
smitbarmase
approved these changes
Nov 10, 2025
6b38389 to
72b84ef
Compare
Member
|
Thank you! |
11happy
pushed a commit
to 11happy/zed
that referenced
this pull request
Dec 1, 2025
… buffer fold (zed-industries#37953) Closes zed-industries#36376 Problem: Multi-cursor edits/selections in multi-buffers view were jumping to incorrect locations after toggling buffer folds. When users created multiple selections across different buffers in a multi-buffer view (like project search results) and then folded one of the buffers, subsequent text insertion would either: 1. Insert text at wrong locations (like at the top of the first unfolded buffer) 2. Replace the entire content in some buffers instead of inserting at the intended cursor positions 3. Create orphaned selections that caused corruption in the editing experience The issue seems to happen because when a buffer gets folded in a multi-buffer view, the existing selections associated with that buffer become invalid anchor points. Solution: 1. Selection Cleanup on Buffer Folding - Added `remove_selections_from_buffer()` method that filters out all selections from a buffer when it gets folded - This prevents invalid selections from corrupting subsequent editing operations - Includes edge case handling: if all selections are removed (all buffers folded), it creates a default selection at the start of the first buffer to prevent panics 2. Unfolding buffers before editing - Added `unfold_buffers_with_selections()` call in `handle_input()` ensures buffers with active selections are automatically unfolded before editing - This helps in fixing an edge case (covered in the tests) where, if you fold all buffers in a multi-buffer view, and try to insert text in a selection, it gets unfolded before the edit happens. Without this, the inserted text would override the entire buffer content. - If we don't care about this edge case, we could remove this method. I find it ok to add since we already trigger buffer unfolding after edits with `Event::ExcerptsEdited`. Release Notes: - Fixed multi-cursor edits jumping to incorrect locations after toggling buffer folds in multi-buffer views (e.g, project search) - Multi-cursor selections now properly handle buffer folding/unfolding operations - Text insertion no longer occurs at the wrong positions when buffers are folded during multi-cursor editing - Eliminated content replacement bugs where entire buffer contents were incorrectly overwritten - Added safe fallback behavior when all buffers in a multi-buffer view are folded --------- Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
CherryWorm
pushed a commit
to CherryWorm/zed
that referenced
this pull request
Dec 16, 2025
…of the toggled one (zed-industries#44394) Closes zed-industries#43870 Regressed in zed-industries#37953 Release Notes: - Fixed issue where toggling buffer fold focuses first buffer in multi-buffer instead of the toggled one.
someone13574
pushed a commit
to someone13574/zed
that referenced
this pull request
Dec 16, 2025
…of the toggled one (zed-industries#44394) Closes zed-industries#43870 Regressed in zed-industries#37953 Release Notes: - Fixed issue where toggling buffer fold focuses first buffer in multi-buffer instead of the toggled one.
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.
Closes #36376
Problem:
Multi-cursor edits/selections in multi-buffers view were jumping to incorrect locations after toggling buffer folds. When users created multiple selections across different buffers in a multi-buffer view (like project search results) and then folded one of the buffers, subsequent text insertion would either:
The issue seems to happen because when a buffer gets folded in a multi-buffer view, the existing selections associated with that buffer become invalid anchor points.
Solution:
remove_selections_from_buffer()method that filters out all selections from a buffer when it gets foldedunfold_buffers_with_selections()call inhandle_input()ensures buffers with active selections are automatically unfolded before editingEvent::ExcerptsEdited.Release Notes: