Skip to content

fix: reduce recap decoy churn under tmux#2

Open
jms830 wants to merge 1 commit into
Fornace:mainfrom
jms830:fix/tmux-decoy-scrollback
Open

fix: reduce recap decoy churn under tmux#2
jms830 wants to merge 1 commit into
Fornace:mainfrom
jms830:fix/tmux-decoy-scrollback

Conversation

@jms830

@jms830 jms830 commented Jun 12, 2026

Copy link
Copy Markdown

What

Reduces the decoy-row workaround inside tmux/screen:

  • keep the existing single bumpDecoy() on submit/input so vertical shifts still get a changed sentinel row;
  • skip the 100ms decoy animation loop in multiplexers;
  • only auto-bump the decoy during render() when card height/history length changes while inside tmux/screen.

Outside multiplexers, behavior remains unchanged.

Why

The current widget intentionally changes the hidden decoy row every render so pi-tui must repaint all rows below the recap card. That helps avoid ghost borders, but inside tmux/screen the renderer has no destructive-clear/reflow semantics for already-committed scrollback. During animation/ticking, the forced repaint of every lower row gets committed into scrollback as mid-state frames.

Observed in tmux 3.5a: repeated recap cards stacked in scrollback and progressive command rows like:

$ ls
$ ls ~/.
$ ls ~/.omp/agent/extensions/

Those artifacts are the lower rows being repainted every tick, not real shell history.

This keeps the decoy's original purpose for true vertical shifts, but stops continuous below-widget churn in multiplexers.

Testing

  • Parsed index.ts, ui/status-widget.ts, and ui/status-widget.js with Bun.Transpiler.
  • Applied the same patch locally via Bun patchedDependencies on an omp/tmux setup and verified it persists through bun install.
  • Runtime verification target: tmux 3.5a + omp 15.12.3 + pi-recap 0.8.21/0.8.22. Expected result: no repeated recap blocks / progressive tool-row fragments in scrollback while the recap widget updates.

jms830 referenced this pull request in jms830/pi-recap Jun 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant