Skip to content

feat(canvas): represent dense terminal rows without per-run display-list exhaustion #7

Description

@phall1

Problem

Current terminal_grid.paint emits background and text runs per row (src/primitives/canvas/terminal_grid.zig:502). A terminal with distinct foreground/background values per cell can exhaust fixed command and text budgets, then truncates the viewport. Raising those limits is not a viable fix because retained command storage grows with them.

Proposed direction

Port and redesign the Cockpit fork's packed per-row cell_grid command: retain one row-level command whose cell geometry is index-derived, keep row-granular fingerprints for incremental patches, and add host decoders before enabling the packet path.

Acceptance

  • A dense 200x60 truecolor terminal paints all rows without increasing fixed command capacity.
  • Editing one row produces a row-local retained patch.
  • CPU reference and supported GPU host paths have explicit coverage.

Upstream candidate

Large initiative. Split implementation PRs into model/CPU rendering, retained fingerprinting, packet format, and host decoder.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions