()
| 592 | } |
| 593 | |
| 594 | func (m *harness) renderDebugList() { |
| 595 | events := debug.Snapshot() |
| 596 | if len(events) == 0 { |
| 597 | m.debugView.SetContent(Dimmed("(no debug events yet)")) |
| 598 | return |
| 599 | } |
| 600 | selIdx := -1 |
| 601 | var sb strings.Builder |
| 602 | for i, e := range events { |
| 603 | line := formatDebugEvent(e) |
| 604 | if m.debugFocus && e.ID == m.debugSelected { |
| 605 | line = selectedLineStyle.Render(line) |
| 606 | selIdx = i |
| 607 | } |
| 608 | sb.WriteString(line) |
| 609 | sb.WriteString("\n") |
| 610 | } |
| 611 | m.debugView.SetContent(sb.String()) |
| 612 | if m.debugFocus && selIdx >= 0 { |
| 613 | // Keep the selection roughly centered in the viewport so up/down |
| 614 | // navigation feels stable. |
| 615 | offset := selIdx - m.debugView.Height/2 |
| 616 | if offset < 0 { |
| 617 | offset = 0 |
| 618 | } |
| 619 | m.debugView.SetYOffset(offset) |
| 620 | } else { |
| 621 | m.debugView.GotoBottom() |
| 622 | } |
| 623 | } |
| 624 | |
| 625 | func (m *harness) renderDebugDetail() { |
| 626 | e, ok := debug.FindByID(m.debugSelected) |
no test coverage detected