diff --git a/internal/views/splits.go b/internal/views/splits.go index b2a20873f9..d40140ac2a 100644 --- a/internal/views/splits.go +++ b/internal/views/splits.go @@ -413,7 +413,7 @@ func (n *Node) HSplit(bottom bool) uint64 { if !n.IsLeaf() { return 0 } - if n.Kind == STUndef { + if n.parent == nil { n.Kind = STVert } if n.Kind == STVert { @@ -429,13 +429,13 @@ func (n *Node) VSplit(right bool) uint64 { if !n.IsLeaf() { return 0 } - if n.Kind == STUndef { + if n.parent == nil { n.Kind = STHoriz } - if n.Kind == STVert { - return n.vVSplit(right) + if n.Kind == STHoriz { + return n.hVSplit(0, right) } - return n.hVSplit(0, right) + return n.vVSplit(right) } // unsplits the child of a split @@ -483,7 +483,15 @@ func (n *Node) Unsplit() bool { // flattens the tree by removing unnecessary intermediate parents that have only one child // and handles the side effect of it func (n *Node) flatten() { - if n.parent == nil || len(n.children) != 1 { + if len(n.children) != 1 { + return + } + + // Special case for root node + if n.parent == nil { + *n = *n.children[0] + n.parent = nil + n.Kind = STUndef return } @@ -531,11 +539,17 @@ func (n *Node) flatten() { func (n *Node) String() string { var strf func(n *Node, ident int) string strf = func(n *Node, ident int) string { - marker := "|" + marker := "/" if n.Kind == STHoriz { marker = "-" + } else if n.Kind == STVert { + marker = "|" + } + var parentId uint64 = 0 + if n.parent != nil { + parentId = n.parent.id } - str := fmt.Sprint(strings.Repeat("\t", ident), marker, n.View, n.id) + str := fmt.Sprint(strings.Repeat("\t", ident), marker, n.View, n.id, parentId) if n.IsLeaf() { str += "🍁" }