Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Limit the amount of vertical splits you can do #4726

Open
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

janhrastnik
Copy link
Contributor

This would fix #1083.
Right now there's this error happening: #2773 (comment), when you do an appropriate amount of vertical splits.
This is the line that causes the crash:

area.width = container.area.x + container.area.width - area.x;

I think recalculate() here doesn't take into consideration that inner gaps decrease area width, so I changed that.
I also added a function in typed.rs that checks if a child view of the focused view has a width of 1. If it does, then we can't make any more vertical splits.

@janhrastnik janhrastnik changed the title Limit the amount of vertical splits Limit the amount of vertical splits you can do Nov 12, 2022
@kirawi kirawi added C-bug Category: This is a bug A-helix-term Area: Helix term improvements S-waiting-on-review Status: Awaiting review from a maintainer. labels Nov 14, 2022
content: Content::Container(container),
..
} => container.children.clone(),
_ => unimplemented!(),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
_ => unimplemented!(),
_ => unreachable!(),

This should be unreachable since we're looking at a parent node in the tree

Comment on lines 221 to 228
let container_children: Vec<ViewId> = match &self.nodes[parent] {
Node {
content: Content::Container(container),
..
} => container.children.clone(),
_ => unimplemented!(),
};
container_children.contains(child_id)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can avoid the cloning by doing the contains check inside of the match

match &self.nodes[parent] {
    Node {
        content: Content::Container(container),
        ..
    } => container.children.contains(child_id),
    _ => unreachable!(),
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-helix-term Area: Helix term improvements C-bug Category: This is a bug S-waiting-on-review Status: Awaiting review from a maintainer.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Too many vertical splits causes a crash
3 participants