microsoft / microsoft/terminal

Use a binary tree/heap to represent panes

Open
#13,762 0 comments 1 reaction 0 assignees View on GitHub
Area-CodeHealth Area-TerminalControl Help Wanted Issue-Task Product-Terminal
Dominant language
C++
Stars
105k
Forks
9.6k
Avg merge
3d 17h
Merged PRs (30d)
29

Description

# Problem

The `Pane` class acts simultaneously as the data model to represent actual panes and as splits which contain nothing but exactly 2 child panes and a split ratio / direction. In a sense `Pane` represents both a leaf and internal nodes in a binary tree simultaneously. Member functions of `Pane` iterating through that tree are complex and make changes difficult (#13306), as iteration happens almost exclusively via recursion, making retaining state cumbersome.

# Proposal

Let's implement a binary heap class that works independently of `Pane`. This would allow us to use regular text-book algorithms for its implementation. Internal nodes of the heap would retain split ratios and directions and leaf nodes of the heap contain `shared_ptr` references. Traversal/iteration would also be simplified. This separate heap would be cheap to clone, allowing us to implement things like UI state persistence (#13306) more easily.

Contributor guide

Open the contributing guide

Research direction

Start by locating the Pane class and tracing the recursive traversal and split state it currently owns. Define the independent binary heap around internal split nodes and leaf Pane references, with traversal and cloning behavior supporting the proposed UI state persistence work.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
cli
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.